private static int memcmp()

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;
  }