in spectator-api/src/main/java/com/netflix/spectator/impl/Hash64.java [155:189]
public Hash64 updateBytes(byte[] values, int offset, int length) {
if (UnsafeUtils.supported() && length >= 8) {
final int bytesInStripe = (Long.SIZE - bitPos) / Byte.SIZE;
final int s = offset + bytesInStripe;
final int e = s + (length - bytesInStripe) / Long.BYTES * Long.BYTES;
// Complete current stripe
for (int i = offset; i < s; ++i) {
updateByteImpl(values[i]);
}
if (++stripePos == stripe.length) {
processStripe();
}
bitPos = 0;
// Write long values
for (int i = s; i < e; i += Long.BYTES) {
stripe[stripePos] = UnsafeUtils.getLong(values, i);
if (++stripePos == stripe.length) {
processStripe();
}
}
// Write remaining bytes
stripe[stripePos] = 0L;
for (int i = e; i < offset + length; ++i) {
updateByteImpl(values[i]);
}
} else {
for (int i = offset; i < offset + length; ++i) {
updateByte(values[i]);
}
}
return this;
}