private void updateHash(Object base, long address, int length) { if (bufferSize > 0) { int available = min(32 - bufferSize, length); unsafe.copyMemory(base, address, buffer, BUFFER_ADDRESS + bufferSize, available); bufferSize += available; address += available; length -= available; if (bufferSize == 32) { updateBody(buffer, BUFFER_ADDRESS, bufferSize); bufferSize = 0; } } if (length >= 32) { int index = updateBody(base, address, length); address += index; length -= index; } if (length > 0) { unsafe.copyMemory(base, address, buffer, BUFFER_ADDRESS, length); bufferSize = length; } }
private void updateHash(Object base, long address, int length) { if (bufferSize > 0) { int available = min(32 - bufferSize, length); unsafe.copyMemory(base, address, buffer, BUFFER_ADDRESS + bufferSize, available); bufferSize += available; address += available; length -= available; if (bufferSize == 32) { updateBody(buffer, BUFFER_ADDRESS, bufferSize); bufferSize = 0; } } if (length >= 32) { int index = updateBody(base, address, length); address += index; length -= index; } if (length > 0) { unsafe.copyMemory(base, address, buffer, BUFFER_ADDRESS, length); bufferSize = length; } }
public static long hash(long seed, Slice data, int offset, int length) { checkPositionIndexes(0, offset + length, data.length()); Object base = data.getBase(); final long address = data.getAddress() + offset; long hash; if (length >= 32) { hash = updateBody(seed, base, address, length); } else { hash = seed + PRIME64_5; } hash += length; // round to the closest 32 byte boundary // this is the point up to which updateBody() processed int index = length & 0xFFFFFFE0; return updateTail(hash, base, address, index, length); }
public static long hash(long seed, Slice data, int offset, int length) { checkPositionIndexes(0, offset + length, data.length()); Object base = data.getBase(); final long address = data.getAddress() + offset; long hash; if (length >= 32) { hash = updateBody(seed, base, address, length); } else { hash = seed + PRIME64_5; } hash += length; // round to the closest 32 byte boundary // this is the point up to which updateBody() processed int index = length & 0xFFFFFFE0; return updateTail(hash, base, address, index, length); }