Skip to content

Commit c62576f

Browse files
committed
[optimize] make value comparison slightly faster
Built in Arrays.mismatch() method seems to help
1 parent 24e92e9 commit c62576f

1 file changed

Lines changed: 7 additions & 8 deletions

File tree

  • exist-core/src/main/java/org/exist/storage/btree

exist-core/src/main/java/org/exist/storage/btree/Value.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@
7272
*/
7373
package org.exist.storage.btree;
7474

75+
import java.util.Arrays;
76+
7577
import static java.nio.charset.StandardCharsets.UTF_8;
7678

7779
/**
@@ -214,14 +216,11 @@ public final int compareTo(final Object obj) {
214216
}
215217

216218
public final int comparePrefix(final Value value) {
217-
for (int i = 0; i < value.len; i++) {
218-
final byte b1 = data[pos + i];
219-
final byte b2 = value.data[value.pos + i];
220-
if (b1 != b2) {
221-
final short s1 = (short) (b1 & 0xFF);
222-
final short s2 = (short) (b2 & 0xFF);
223-
return s1 > s2 ? (i + 1) : -(i + 1);
224-
}
219+
final int mismatch = Arrays.mismatch(data, pos, pos + value.len, value.data, value.pos, value.pos + value.len);
220+
if (mismatch >= 0) {
221+
final int v1 = (data[pos + mismatch] & 0xFF);
222+
final int v2 = (value.data[value.pos + mismatch] & 0xFF);
223+
return v1 > v2 ? (mismatch + 1) : -(mismatch + 1);
225224
}
226225
return 0;
227226
}

0 commit comments

Comments
 (0)