Rabbit-R1/switch port/java/sources/com/google/common/hash/AbstractStreamingHasher.java
2024-05-21 17:08:36 -04:00

141 lines
4.6 KiB
Java

package com.google.common.hash;
import com.google.common.base.Preconditions;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@ElementTypesAreNonnullByDefault
/* loaded from: classes3.dex */
abstract class AbstractStreamingHasher extends AbstractHasher {
private final ByteBuffer buffer;
private final int bufferSize;
private final int chunkSize;
protected abstract HashCode makeHash();
protected abstract void process(ByteBuffer byteBuffer);
/* JADX INFO: Access modifiers changed from: protected */
public AbstractStreamingHasher(int i) {
this(i, i);
}
protected AbstractStreamingHasher(int i, int i2) {
Preconditions.checkArgument(i2 % i == 0);
this.buffer = ByteBuffer.allocate(i2 + 7).order(ByteOrder.LITTLE_ENDIAN);
this.bufferSize = i2;
this.chunkSize = i;
}
protected void processRemaining(ByteBuffer byteBuffer) {
Java8Compatibility.position(byteBuffer, byteBuffer.limit());
Java8Compatibility.limit(byteBuffer, this.chunkSize + 7);
while (true) {
int position = byteBuffer.position();
int i = this.chunkSize;
if (position < i) {
byteBuffer.putLong(0L);
} else {
Java8Compatibility.limit(byteBuffer, i);
Java8Compatibility.flip(byteBuffer);
process(byteBuffer);
return;
}
}
}
@Override // com.google.common.hash.AbstractHasher, com.google.common.hash.Hasher, com.google.common.hash.PrimitiveSink
public final Hasher putBytes(byte[] bArr, int i, int i2) {
return putBytesInternal(ByteBuffer.wrap(bArr, i, i2).order(ByteOrder.LITTLE_ENDIAN));
}
@Override // com.google.common.hash.AbstractHasher, com.google.common.hash.Hasher, com.google.common.hash.PrimitiveSink
public final Hasher putBytes(ByteBuffer byteBuffer) {
ByteOrder order = byteBuffer.order();
try {
byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
return putBytesInternal(byteBuffer);
} finally {
byteBuffer.order(order);
}
}
private Hasher putBytesInternal(ByteBuffer byteBuffer) {
if (byteBuffer.remaining() <= this.buffer.remaining()) {
this.buffer.put(byteBuffer);
munchIfFull();
return this;
}
int position = this.bufferSize - this.buffer.position();
for (int i = 0; i < position; i++) {
this.buffer.put(byteBuffer.get());
}
munch();
while (byteBuffer.remaining() >= this.chunkSize) {
process(byteBuffer);
}
this.buffer.put(byteBuffer);
return this;
}
@Override // com.google.common.hash.Hasher, com.google.common.hash.PrimitiveSink
public final Hasher putByte(byte b) {
this.buffer.put(b);
munchIfFull();
return this;
}
@Override // com.google.common.hash.AbstractHasher, com.google.common.hash.Hasher, com.google.common.hash.PrimitiveSink
public final Hasher putShort(short s) {
this.buffer.putShort(s);
munchIfFull();
return this;
}
@Override // com.google.common.hash.AbstractHasher, com.google.common.hash.Hasher, com.google.common.hash.PrimitiveSink
public final Hasher putChar(char c) {
this.buffer.putChar(c);
munchIfFull();
return this;
}
@Override // com.google.common.hash.AbstractHasher, com.google.common.hash.Hasher, com.google.common.hash.PrimitiveSink
public final Hasher putInt(int i) {
this.buffer.putInt(i);
munchIfFull();
return this;
}
@Override // com.google.common.hash.AbstractHasher, com.google.common.hash.Hasher, com.google.common.hash.PrimitiveSink
public final Hasher putLong(long j) {
this.buffer.putLong(j);
munchIfFull();
return this;
}
@Override // com.google.common.hash.Hasher
public final HashCode hash() {
munch();
Java8Compatibility.flip(this.buffer);
if (this.buffer.remaining() > 0) {
processRemaining(this.buffer);
ByteBuffer byteBuffer = this.buffer;
Java8Compatibility.position(byteBuffer, byteBuffer.limit());
}
return makeHash();
}
private void munchIfFull() {
if (this.buffer.remaining() < 8) {
munch();
}
}
private void munch() {
Java8Compatibility.flip(this.buffer);
while (this.buffer.remaining() >= this.chunkSize) {
process(this.buffer);
}
this.buffer.compact();
}
}