Skip to content

Commit

Permalink
Modernize switch statements in ArrayUtil (#13669)
Browse files Browse the repository at this point in the history
  • Loading branch information
mrhbj authored Aug 19, 2024
1 parent 1c9bd6b commit 0533eff
Showing 1 changed file with 22 additions and 30 deletions.
52 changes: 22 additions & 30 deletions lucene/core/src/java/org/apache/lucene/util/ArrayUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -174,42 +174,34 @@ public static int oversize(int minTargetSize, int bytesPerElement) {

if (Constants.JRE_IS_64BIT) {
// round up to 8 byte alignment in 64bit env
switch (bytesPerElement) {
case 4:
// round up to multiple of 2
return (newSize + 1) & 0x7ffffffe;
case 2:
// round up to multiple of 4
return (newSize + 3) & 0x7ffffffc;
case 1:
// round up to multiple of 8
return (newSize + 7) & 0x7ffffff8;
case 8:
return switch (bytesPerElement) {
// round up to multiple of 2
case 4 -> (newSize + 1) & 0x7ffffffe;
// round up to multiple of 4
case 2 -> (newSize + 3) & 0x7ffffffc;
// round up to multiple of 8
case 1 -> (newSize + 7) & 0x7ffffff8;
// no rounding
default:
// odd (invalid?) size
return newSize;
}
case 8 -> newSize;
// odd (invalid?) size
default -> newSize;
};
} else {
// In 32bit jvm, it's still 8-byte aligned,
// but the array header is 12 bytes, not a multiple of 8.
// So saving 4,12,20,28... bytes of data is the most cost-effective.
switch (bytesPerElement) {
case 1:
// align with size of 4,12,20,28...
return ((newSize + 3) & 0x7ffffff8) + 4;
case 2:
// align with size of 6,10,14,18...
return ((newSize + 1) & 0x7ffffffc) + 2;
case 4:
// align with size of 5,7,9,11...
return (newSize & 0x7ffffffe) + 1;
case 8:
return switch (bytesPerElement) {
// align with size of 4,12,20,28...
case 1 -> ((newSize + 3) & 0x7ffffff8) + 4;
// align with size of 6,10,14,18...
case 2 -> ((newSize + 1) & 0x7ffffffc) + 2;
// align with size of 5,7,9,11...
case 4 -> (newSize & 0x7ffffffe) + 1;
// no processing required
default:
// odd (invalid?) size
return newSize;
}
case 8 -> newSize;
// odd (invalid?) size
default -> newSize;
};
}
}

Expand Down

0 comments on commit 0533eff

Please sign in to comment.