private final static int _findMatchLength(final byte[] in, int ptr1, int ptr2, final int maxPtr1) { // Expect at least 8 bytes to check for fast case; offline others if ((ptr1 + 8) >= maxPtr1) { // rare case, offline return _findTailMatchLength(in, ptr1, ptr2, maxPtr1); } // short matches common, so start with specialized comparison // NOTE: we know that we have 4 bytes of slack before end, so this is safe: int i1 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr1); int i2 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr2); if (i1 != i2) { return 1 + _leadingBytes(i1, i2); } ptr1 += 4; ptr2 += 4; i1 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr1); i2 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr2); if (i1 != i2) { return 5 + _leadingBytes(i1, i2); } return _findLongMatchLength(in, ptr1+4, ptr2+4, maxPtr1); }
private final static int _findMatchLength(final byte[] in, int ptr1, int ptr2, final int maxPtr1) { // Expect at least 8 bytes to check for fast case; offline others if ((ptr1 + 8) >= maxPtr1) { // rare case, offline return _findTailMatchLength(in, ptr1, ptr2, maxPtr1); } // short matches common, so start with specialized comparison // NOTE: we know that we have 4 bytes of slack before end, so this is safe: int i1 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr1); int i2 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr2); if (i1 != i2) { return 1 + _leadingBytes(i1, i2); } ptr1 += 4; ptr2 += 4; i1 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr1); i2 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr2); if (i1 != i2) { return 5 + _leadingBytes(i1, i2); } return _findLongMatchLength(in, ptr1+4, ptr2+4, maxPtr1); }
private final static int _findMatchLength(final byte[] in, int ptr1, int ptr2, final int maxPtr1) { // Expect at least 8 bytes to check for fast case; offline others if ((ptr1 + 8) >= maxPtr1) { // rare case, offline return _findTailMatchLength(in, ptr1, ptr2, maxPtr1); } // short matches common, so start with specialized comparison // NOTE: we know that we have 4 bytes of slack before end, so this is safe: int i1 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr1); int i2 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr2); if (i1 != i2) { return 1 + _leadingBytes(i1, i2); } ptr1 += 4; ptr2 += 4; i1 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr1); i2 = unsafe.getInt(in, BYTE_ARRAY_OFFSET + ptr2); if (i1 != i2) { return 5 + _leadingBytes(i1, i2); } return _findLongMatchLength(in, ptr1+4, ptr2+4, maxPtr1); }