in ratis-common/src/main/java/org/apache/ratis/util/PureJavaCrc32C.java [94:147]
public void update(ByteBuffer b) {
int localCrc = crc;
b.order(ByteOrder.LITTLE_ENDIAN);
int off = b.position();
int len = b.remaining();
while(len > 7) {
final long value = b.getLong(off);
final int m = (int) value;
final int n = (int)(value >> 4*8);
final int c0 =((m >> 0*8) ^ (localCrc >> 0*8)) & 0xff;
final int c1 =((m >> 1*8) ^ (localCrc >> 1*8)) & 0xff;
final int c2 =((m >> 2*8) ^ (localCrc >> 2*8)) & 0xff;
final int c3 =((m >> 3*8) ^ (localCrc >> 3*8)) & 0xff;
final int c4 = (n >> 0*8) & 0xff;
final int c5 = (n >> 1*8) & 0xff;
final int c6 = (n >> 2*8) & 0xff;
final int c7 = (n >> 3*8) & 0xff;
localCrc = (T[T8_7_START + c0] ^ T[T8_6_START + c1])
^ (T[T8_5_START + c2] ^ T[T8_4_START + c3])
^ (T[T8_3_START + c4] ^ T[T8_2_START + c5])
^ (T[T8_1_START + c6] ^ T[T8_0_START + c7]);
off += 8;
len -= 8;
}
if (len > 3) {
final int n = b.getInt(off);
localCrc = (localCrc >>> 8) ^ T[T8_0_START + ((localCrc ^ (n >> 0*8)) & 0xff)];
localCrc = (localCrc >>> 8) ^ T[T8_0_START + ((localCrc ^ (n >> 1*8)) & 0xff)];
localCrc = (localCrc >>> 8) ^ T[T8_0_START + ((localCrc ^ (n >> 2*8)) & 0xff)];
localCrc = (localCrc >>> 8) ^ T[T8_0_START + ((localCrc ^ (n >> 3*8)) & 0xff)];
off += 4;
len -= 4;
}
if (len > 1) {
final int n = b.getShort(off);
localCrc = (localCrc >>> 8) ^ T[T8_0_START + ((localCrc ^ (n >> 0*8)) & 0xff)];
localCrc = (localCrc >>> 8) ^ T[T8_0_START + ((localCrc ^ (n >> 1*8)) & 0xff)];
off += 2;
len -= 2;
}
if (len > 0) {
localCrc = (localCrc >>> 8) ^ T[T8_0_START + ((localCrc ^ b.get(off)) & 0xff)];
}
// Publish crc out to object
crc = localCrc;
}