in memory/memory-core/src/main/java/org/apache/arrow/memory/util/ByteFunctionHelpers.java [134:204]
private static int memcmp(
final long laddr, long lStart, long lEnd, final long raddr, long rStart, final long rEnd) {
long lLen = lEnd - lStart;
long rLen = rEnd - rStart;
long n = Math.min(rLen, lLen);
long lPos = laddr + lStart;
long rPos = raddr + rStart;
while (n > 63) {
for (int x = 0; x < 8; x++) {
long leftLong = MemoryUtil.getLong(lPos);
long rightLong = MemoryUtil.getLong(rPos);
if (leftLong != rightLong) {
if (LITTLE_ENDIAN) {
return unsignedLongCompare(Long.reverseBytes(leftLong), Long.reverseBytes(rightLong));
} else {
return unsignedLongCompare(leftLong, rightLong);
}
}
lPos += 8;
rPos += 8;
}
n -= 64;
}
while (n > 7) {
long leftLong = MemoryUtil.getLong(lPos);
long rightLong = MemoryUtil.getLong(rPos);
if (leftLong != rightLong) {
if (LITTLE_ENDIAN) {
return unsignedLongCompare(Long.reverseBytes(leftLong), Long.reverseBytes(rightLong));
} else {
return unsignedLongCompare(leftLong, rightLong);
}
}
lPos += 8;
rPos += 8;
n -= 8;
}
if (n > 3) {
int leftInt = MemoryUtil.getInt(lPos);
int rightInt = MemoryUtil.getInt(rPos);
if (leftInt != rightInt) {
if (LITTLE_ENDIAN) {
return unsignedIntCompare(Integer.reverseBytes(leftInt), Integer.reverseBytes(rightInt));
} else {
return unsignedIntCompare(leftInt, rightInt);
}
}
lPos += 4;
rPos += 4;
n -= 4;
}
while (n-- != 0) {
byte leftByte = MemoryUtil.getByte(lPos);
byte rightByte = MemoryUtil.getByte(rPos);
if (leftByte != rightByte) {
return ((leftByte & 0xFF) - (rightByte & 0xFF)) > 0 ? 1 : -1;
}
lPos++;
rPos++;
}
if (lLen == rLen) {
return 0;
}
return lLen > rLen ? 1 : -1;
}