what-the-bank/sources/com/google/common/hash/LittleEndianByteArray.java

149 lines
6.1 KiB
Java
Raw Permalink Normal View History

2024-07-27 18:17:47 +07:00
package com.google.common.hash;
import com.google.common.primitives.Longs;
import com.google.common.primitives.UnsignedBytes;
import java.lang.reflect.Field;
import java.nio.ByteOrder;
import java.security.AccessController;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import sun.misc.Unsafe;
/* loaded from: classes2.dex */
final class LittleEndianByteArray {
static final boolean $assertionsDisabled = false;
private static final LittleEndianBytes byteArray;
/* loaded from: classes2.dex */
enum JavaLittleEndianBytes implements LittleEndianBytes {
INSTANCE { // from class: com.google.common.hash.LittleEndianByteArray.JavaLittleEndianBytes.1
@Override // com.google.common.hash.LittleEndianByteArray.LittleEndianBytes
public final long getLongLittleEndian(byte[] bArr, int i) {
return Longs.fromBytes(bArr[i + 7], bArr[i + 6], bArr[i + 5], bArr[i + 4], bArr[i + 3], bArr[i + 2], bArr[i + 1], bArr[i]);
}
@Override // com.google.common.hash.LittleEndianByteArray.LittleEndianBytes
public final void putLongLittleEndian(byte[] bArr, int i, long j) {
long j2 = 255;
for (int i2 = 0; i2 < 8; i2++) {
bArr[i + i2] = (byte) ((j & j2) >> (i2 << 3));
j2 <<= 8;
}
}
}
}
/* loaded from: classes2.dex */
interface LittleEndianBytes {
long getLongLittleEndian(byte[] bArr, int i);
void putLongLittleEndian(byte[] bArr, int i, long j);
}
/* JADX INFO: Access modifiers changed from: package-private */
public static long load64(byte[] bArr, int i) {
return byteArray.getLongLittleEndian(bArr, i);
}
static long load64Safely(byte[] bArr, int i, int i2) {
long j = 0;
for (int i3 = 0; i3 < Math.min(i2, 8); i3++) {
j |= (bArr[i + i3] & 255) << (i3 << 3);
}
return j;
}
static void store64(byte[] bArr, int i, long j) {
byteArray.putLongLittleEndian(bArr, i, j);
}
/* JADX INFO: Access modifiers changed from: package-private */
public static int load32(byte[] bArr, int i) {
return ((bArr[i + 3] & UnsignedBytes.MAX_VALUE) << 24) | (bArr[i] & UnsignedBytes.MAX_VALUE) | ((bArr[i + 1] & UnsignedBytes.MAX_VALUE) << 8) | ((bArr[i + 2] & UnsignedBytes.MAX_VALUE) << 16);
}
static boolean usingUnsafe() {
return byteArray instanceof UnsafeByteArray;
}
/* loaded from: classes2.dex */
enum UnsafeByteArray implements LittleEndianBytes {
UNSAFE_LITTLE_ENDIAN { // from class: com.google.common.hash.LittleEndianByteArray.UnsafeByteArray.1
@Override // com.google.common.hash.LittleEndianByteArray.LittleEndianBytes
public final long getLongLittleEndian(byte[] bArr, int i) {
return UnsafeByteArray.theUnsafe.getLong(bArr, i + UnsafeByteArray.BYTE_ARRAY_BASE_OFFSET);
}
@Override // com.google.common.hash.LittleEndianByteArray.LittleEndianBytes
public final void putLongLittleEndian(byte[] bArr, int i, long j) {
UnsafeByteArray.theUnsafe.putLong(bArr, i + UnsafeByteArray.BYTE_ARRAY_BASE_OFFSET, j);
}
},
UNSAFE_BIG_ENDIAN { // from class: com.google.common.hash.LittleEndianByteArray.UnsafeByteArray.2
@Override // com.google.common.hash.LittleEndianByteArray.LittleEndianBytes
public final long getLongLittleEndian(byte[] bArr, int i) {
return Long.reverseBytes(UnsafeByteArray.theUnsafe.getLong(bArr, i + UnsafeByteArray.BYTE_ARRAY_BASE_OFFSET));
}
@Override // com.google.common.hash.LittleEndianByteArray.LittleEndianBytes
public final void putLongLittleEndian(byte[] bArr, int i, long j) {
UnsafeByteArray.theUnsafe.putLong(bArr, i + UnsafeByteArray.BYTE_ARRAY_BASE_OFFSET, Long.reverseBytes(j));
}
};
private static final int BYTE_ARRAY_BASE_OFFSET;
private static final Unsafe theUnsafe;
static {
Unsafe unsafe = getUnsafe();
theUnsafe = unsafe;
BYTE_ARRAY_BASE_OFFSET = unsafe.arrayBaseOffset(byte[].class);
if (unsafe.arrayIndexScale(byte[].class) != 1) {
throw new AssertionError();
}
}
private static Unsafe getUnsafe() {
try {
try {
return Unsafe.getUnsafe();
} catch (PrivilegedActionException e) {
throw new RuntimeException("Could not initialize intrinsics", e.getCause());
}
} catch (SecurityException unused) {
return (Unsafe) AccessController.doPrivileged(new PrivilegedExceptionAction<Unsafe>() { // from class: com.google.common.hash.LittleEndianByteArray.UnsafeByteArray.3
@Override // java.security.PrivilegedExceptionAction
public Unsafe run() throws Exception {
for (Field field : Unsafe.class.getDeclaredFields()) {
field.setAccessible(true);
Object obj = field.get(null);
if (Unsafe.class.isInstance(obj)) {
return (Unsafe) Unsafe.class.cast(obj);
}
}
throw new NoSuchFieldError("the Unsafe");
}
});
}
}
}
static {
LittleEndianBytes littleEndianBytes = JavaLittleEndianBytes.INSTANCE;
try {
if ("amd64".equals(System.getProperty("os.arch"))) {
if (ByteOrder.nativeOrder().equals(ByteOrder.LITTLE_ENDIAN)) {
littleEndianBytes = UnsafeByteArray.UNSAFE_LITTLE_ENDIAN;
} else {
littleEndianBytes = UnsafeByteArray.UNSAFE_BIG_ENDIAN;
}
}
} catch (Throwable unused) {
}
byteArray = littleEndianBytes;
}
private LittleEndianByteArray() {
}
}