Files
rr3-apk/decompiled/sources/com/google/protobuf/UnsafeUtil.java
Daniel Elliott f9d20bb3fc Add decompiled APK source code (JADX)
- 28,932 files
- Full Java source code
- Smali files
- Resources

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-02-18 14:52:23 -08:00

932 lines
34 KiB
Java

package com.google.protobuf;
import com.facebook.appevents.integrity.IntegrityManager;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.security.AccessController;
import java.security.PrivilegedExceptionAction;
import java.util.logging.Level;
import java.util.logging.Logger;
import sun.misc.Unsafe;
/* loaded from: classes3.dex */
public final class UnsafeUtil {
private static final long BOOLEAN_ARRAY_BASE_OFFSET;
private static final long BOOLEAN_ARRAY_INDEX_SCALE;
private static final long BUFFER_ADDRESS_OFFSET;
private static final int BYTE_ARRAY_ALIGNMENT;
static final long BYTE_ARRAY_BASE_OFFSET;
private static final long DOUBLE_ARRAY_BASE_OFFSET;
private static final long DOUBLE_ARRAY_INDEX_SCALE;
private static final long FLOAT_ARRAY_BASE_OFFSET;
private static final long FLOAT_ARRAY_INDEX_SCALE;
private static final long INT_ARRAY_BASE_OFFSET;
private static final long INT_ARRAY_INDEX_SCALE;
static final boolean IS_BIG_ENDIAN;
private static final long LONG_ARRAY_BASE_OFFSET;
private static final long LONG_ARRAY_INDEX_SCALE;
private static final long OBJECT_ARRAY_BASE_OFFSET;
private static final long OBJECT_ARRAY_INDEX_SCALE;
private static final int STRIDE = 8;
private static final int STRIDE_ALIGNMENT_MASK = 7;
private static final Unsafe UNSAFE = getUnsafe();
private static final Class<?> MEMORY_CLASS = Android.getMemoryClass();
private static final boolean IS_ANDROID_64 = determineAndroidSupportByAddressSize(Long.TYPE);
private static final boolean IS_ANDROID_32 = determineAndroidSupportByAddressSize(Integer.TYPE);
private static final MemoryAccessor MEMORY_ACCESSOR = getMemoryAccessor();
private static final boolean HAS_UNSAFE_BYTEBUFFER_OPERATIONS = supportsUnsafeByteBufferOperations();
private static final boolean HAS_UNSAFE_ARRAY_OPERATIONS = supportsUnsafeArrayOperations();
public static boolean hasUnsafeArrayOperations() {
return HAS_UNSAFE_ARRAY_OPERATIONS;
}
public static boolean hasUnsafeByteBufferOperations() {
return HAS_UNSAFE_BYTEBUFFER_OPERATIONS;
}
public static boolean isAndroid64() {
return IS_ANDROID_64;
}
static {
long arrayBaseOffset = arrayBaseOffset(byte[].class);
BYTE_ARRAY_BASE_OFFSET = arrayBaseOffset;
BOOLEAN_ARRAY_BASE_OFFSET = arrayBaseOffset(boolean[].class);
BOOLEAN_ARRAY_INDEX_SCALE = arrayIndexScale(boolean[].class);
INT_ARRAY_BASE_OFFSET = arrayBaseOffset(int[].class);
INT_ARRAY_INDEX_SCALE = arrayIndexScale(int[].class);
LONG_ARRAY_BASE_OFFSET = arrayBaseOffset(long[].class);
LONG_ARRAY_INDEX_SCALE = arrayIndexScale(long[].class);
FLOAT_ARRAY_BASE_OFFSET = arrayBaseOffset(float[].class);
FLOAT_ARRAY_INDEX_SCALE = arrayIndexScale(float[].class);
DOUBLE_ARRAY_BASE_OFFSET = arrayBaseOffset(double[].class);
DOUBLE_ARRAY_INDEX_SCALE = arrayIndexScale(double[].class);
OBJECT_ARRAY_BASE_OFFSET = arrayBaseOffset(Object[].class);
OBJECT_ARRAY_INDEX_SCALE = arrayIndexScale(Object[].class);
BUFFER_ADDRESS_OFFSET = fieldOffset(bufferAddressField());
BYTE_ARRAY_ALIGNMENT = (int) (arrayBaseOffset & 7);
IS_BIG_ENDIAN = ByteOrder.nativeOrder() == ByteOrder.BIG_ENDIAN;
}
private UnsafeUtil() {
}
public static <T> T allocateInstance(Class<T> cls) {
try {
return (T) UNSAFE.allocateInstance(cls);
} catch (InstantiationException e) {
throw new IllegalStateException(e);
}
}
public static long objectFieldOffset(java.lang.reflect.Field field) {
return MEMORY_ACCESSOR.objectFieldOffset(field);
}
private static int arrayBaseOffset(Class<?> cls) {
if (HAS_UNSAFE_ARRAY_OPERATIONS) {
return MEMORY_ACCESSOR.arrayBaseOffset(cls);
}
return -1;
}
private static int arrayIndexScale(Class<?> cls) {
if (HAS_UNSAFE_ARRAY_OPERATIONS) {
return MEMORY_ACCESSOR.arrayIndexScale(cls);
}
return -1;
}
public static byte getByte(Object obj, long j) {
return MEMORY_ACCESSOR.getByte(obj, j);
}
public static void putByte(Object obj, long j, byte b) {
MEMORY_ACCESSOR.putByte(obj, j, b);
}
public static int getInt(Object obj, long j) {
return MEMORY_ACCESSOR.getInt(obj, j);
}
public static void putInt(Object obj, long j, int i) {
MEMORY_ACCESSOR.putInt(obj, j, i);
}
public static long getLong(Object obj, long j) {
return MEMORY_ACCESSOR.getLong(obj, j);
}
public static void putLong(Object obj, long j, long j2) {
MEMORY_ACCESSOR.putLong(obj, j, j2);
}
public static boolean getBoolean(Object obj, long j) {
return MEMORY_ACCESSOR.getBoolean(obj, j);
}
public static void putBoolean(Object obj, long j, boolean z) {
MEMORY_ACCESSOR.putBoolean(obj, j, z);
}
public static float getFloat(Object obj, long j) {
return MEMORY_ACCESSOR.getFloat(obj, j);
}
public static void putFloat(Object obj, long j, float f) {
MEMORY_ACCESSOR.putFloat(obj, j, f);
}
public static double getDouble(Object obj, long j) {
return MEMORY_ACCESSOR.getDouble(obj, j);
}
public static void putDouble(Object obj, long j, double d) {
MEMORY_ACCESSOR.putDouble(obj, j, d);
}
public static Object getObject(Object obj, long j) {
return MEMORY_ACCESSOR.getObject(obj, j);
}
public static void putObject(Object obj, long j, Object obj2) {
MEMORY_ACCESSOR.putObject(obj, j, obj2);
}
public static byte getByte(byte[] bArr, long j) {
return MEMORY_ACCESSOR.getByte(bArr, BYTE_ARRAY_BASE_OFFSET + j);
}
public static void putByte(byte[] bArr, long j, byte b) {
MEMORY_ACCESSOR.putByte(bArr, BYTE_ARRAY_BASE_OFFSET + j, b);
}
public static int getInt(int[] iArr, long j) {
return MEMORY_ACCESSOR.getInt(iArr, INT_ARRAY_BASE_OFFSET + (j * INT_ARRAY_INDEX_SCALE));
}
public static void putInt(int[] iArr, long j, int i) {
MEMORY_ACCESSOR.putInt(iArr, INT_ARRAY_BASE_OFFSET + (j * INT_ARRAY_INDEX_SCALE), i);
}
public static long getLong(long[] jArr, long j) {
return MEMORY_ACCESSOR.getLong(jArr, LONG_ARRAY_BASE_OFFSET + (j * LONG_ARRAY_INDEX_SCALE));
}
public static void putLong(long[] jArr, long j, long j2) {
MEMORY_ACCESSOR.putLong(jArr, LONG_ARRAY_BASE_OFFSET + (j * LONG_ARRAY_INDEX_SCALE), j2);
}
public static boolean getBoolean(boolean[] zArr, long j) {
return MEMORY_ACCESSOR.getBoolean(zArr, BOOLEAN_ARRAY_BASE_OFFSET + (j * BOOLEAN_ARRAY_INDEX_SCALE));
}
public static void putBoolean(boolean[] zArr, long j, boolean z) {
MEMORY_ACCESSOR.putBoolean(zArr, BOOLEAN_ARRAY_BASE_OFFSET + (j * BOOLEAN_ARRAY_INDEX_SCALE), z);
}
public static float getFloat(float[] fArr, long j) {
return MEMORY_ACCESSOR.getFloat(fArr, FLOAT_ARRAY_BASE_OFFSET + (j * FLOAT_ARRAY_INDEX_SCALE));
}
public static void putFloat(float[] fArr, long j, float f) {
MEMORY_ACCESSOR.putFloat(fArr, FLOAT_ARRAY_BASE_OFFSET + (j * FLOAT_ARRAY_INDEX_SCALE), f);
}
public static double getDouble(double[] dArr, long j) {
return MEMORY_ACCESSOR.getDouble(dArr, DOUBLE_ARRAY_BASE_OFFSET + (j * DOUBLE_ARRAY_INDEX_SCALE));
}
public static void putDouble(double[] dArr, long j, double d) {
MEMORY_ACCESSOR.putDouble(dArr, DOUBLE_ARRAY_BASE_OFFSET + (j * DOUBLE_ARRAY_INDEX_SCALE), d);
}
public static Object getObject(Object[] objArr, long j) {
return MEMORY_ACCESSOR.getObject(objArr, OBJECT_ARRAY_BASE_OFFSET + (j * OBJECT_ARRAY_INDEX_SCALE));
}
public static void putObject(Object[] objArr, long j, Object obj) {
MEMORY_ACCESSOR.putObject(objArr, OBJECT_ARRAY_BASE_OFFSET + (j * OBJECT_ARRAY_INDEX_SCALE), obj);
}
public static void copyMemory(byte[] bArr, long j, long j2, long j3) {
MEMORY_ACCESSOR.copyMemory(bArr, j, j2, j3);
}
public static void copyMemory(long j, byte[] bArr, long j2, long j3) {
MEMORY_ACCESSOR.copyMemory(j, bArr, j2, j3);
}
public static void copyMemory(byte[] bArr, long j, byte[] bArr2, long j2, long j3) {
System.arraycopy(bArr, (int) j, bArr2, (int) j2, (int) j3);
}
public static byte getByte(long j) {
return MEMORY_ACCESSOR.getByte(j);
}
public static void putByte(long j, byte b) {
MEMORY_ACCESSOR.putByte(j, b);
}
public static int getInt(long j) {
return MEMORY_ACCESSOR.getInt(j);
}
public static void putInt(long j, int i) {
MEMORY_ACCESSOR.putInt(j, i);
}
public static long getLong(long j) {
return MEMORY_ACCESSOR.getLong(j);
}
public static void putLong(long j, long j2) {
MEMORY_ACCESSOR.putLong(j, j2);
}
public static long addressOffset(ByteBuffer byteBuffer) {
return MEMORY_ACCESSOR.getLong(byteBuffer, BUFFER_ADDRESS_OFFSET);
}
public static Object getStaticObject(java.lang.reflect.Field field) {
return MEMORY_ACCESSOR.getStaticObject(field);
}
public static Unsafe getUnsafe() {
try {
return (Unsafe) AccessController.doPrivileged(new PrivilegedExceptionAction() { // from class: com.google.protobuf.UnsafeUtil.1
@Override // java.security.PrivilegedExceptionAction
public Unsafe run() throws Exception {
for (java.lang.reflect.Field field : Unsafe.class.getDeclaredFields()) {
field.setAccessible(true);
Object obj = field.get(null);
if (Unsafe.class.isInstance(obj)) {
return (Unsafe) Unsafe.class.cast(obj);
}
}
return null;
}
});
} catch (Throwable unused) {
return null;
}
}
private static MemoryAccessor getMemoryAccessor() {
Unsafe unsafe = UNSAFE;
if (unsafe == null) {
return null;
}
if (!Android.isOnAndroidDevice()) {
return new JvmMemoryAccessor(unsafe);
}
if (IS_ANDROID_64) {
return new Android64MemoryAccessor(unsafe);
}
if (IS_ANDROID_32) {
return new Android32MemoryAccessor(unsafe);
}
return null;
}
private static boolean supportsUnsafeArrayOperations() {
MemoryAccessor memoryAccessor = MEMORY_ACCESSOR;
if (memoryAccessor == null) {
return false;
}
return memoryAccessor.supportsUnsafeArrayOperations();
}
private static boolean supportsUnsafeByteBufferOperations() {
MemoryAccessor memoryAccessor = MEMORY_ACCESSOR;
if (memoryAccessor == null) {
return false;
}
return memoryAccessor.supportsUnsafeByteBufferOperations();
}
public static boolean determineAndroidSupportByAddressSize(Class<?> cls) {
if (!Android.isOnAndroidDevice()) {
return false;
}
try {
Class<?> cls2 = MEMORY_CLASS;
Class<?> cls3 = Boolean.TYPE;
cls2.getMethod("peekLong", cls, cls3);
cls2.getMethod("pokeLong", cls, Long.TYPE, cls3);
Class<?> cls4 = Integer.TYPE;
cls2.getMethod("pokeInt", cls, cls4, cls3);
cls2.getMethod("peekInt", cls, cls3);
cls2.getMethod("pokeByte", cls, Byte.TYPE);
cls2.getMethod("peekByte", cls);
cls2.getMethod("pokeByteArray", cls, byte[].class, cls4, cls4);
cls2.getMethod("peekByteArray", cls, byte[].class, cls4, cls4);
return true;
} catch (Throwable unused) {
return false;
}
}
/* JADX INFO: Access modifiers changed from: private */
public static java.lang.reflect.Field bufferAddressField() {
java.lang.reflect.Field field;
if (Android.isOnAndroidDevice() && (field = field(Buffer.class, "effectiveDirectAddress")) != null) {
return field;
}
java.lang.reflect.Field field2 = field(Buffer.class, IntegrityManager.INTEGRITY_TYPE_ADDRESS);
if (field2 == null || field2.getType() != Long.TYPE) {
return null;
}
return field2;
}
private static int firstDifferingByteIndexNativeEndian(long j, long j2) {
int numberOfTrailingZeros;
if (IS_BIG_ENDIAN) {
numberOfTrailingZeros = Long.numberOfLeadingZeros(j ^ j2);
} else {
numberOfTrailingZeros = Long.numberOfTrailingZeros(j ^ j2);
}
return numberOfTrailingZeros >> 3;
}
public static int mismatch(byte[] bArr, int i, byte[] bArr2, int i2, int i3) {
if (i < 0 || i2 < 0 || i3 < 0 || i + i3 > bArr.length || i2 + i3 > bArr2.length) {
throw new IndexOutOfBoundsException();
}
int i4 = 0;
if (HAS_UNSAFE_ARRAY_OPERATIONS) {
for (int i5 = (BYTE_ARRAY_ALIGNMENT + i) & 7; i4 < i3 && (i5 & 7) != 0; i5++) {
if (bArr[i + i4] != bArr2[i2 + i4]) {
return i4;
}
i4++;
}
int i6 = ((i3 - i4) & (-8)) + i4;
while (i4 < i6) {
long j = BYTE_ARRAY_BASE_OFFSET;
long j2 = i4;
long j3 = getLong((Object) bArr, i + j + j2);
long j4 = getLong((Object) bArr2, j + i2 + j2);
if (j3 != j4) {
return i4 + firstDifferingByteIndexNativeEndian(j3, j4);
}
i4 += 8;
}
}
while (i4 < i3) {
if (bArr[i + i4] != bArr2[i2 + i4]) {
return i4;
}
i4++;
}
return -1;
}
private static long fieldOffset(java.lang.reflect.Field field) {
MemoryAccessor memoryAccessor;
if (field == null || (memoryAccessor = MEMORY_ACCESSOR) == null) {
return -1L;
}
return memoryAccessor.objectFieldOffset(field);
}
private static java.lang.reflect.Field field(Class<?> cls, String str) {
try {
return cls.getDeclaredField(str);
} catch (Throwable unused) {
return null;
}
}
public static abstract class MemoryAccessor {
Unsafe unsafe;
public abstract void copyMemory(long j, byte[] bArr, long j2, long j3);
public abstract void copyMemory(byte[] bArr, long j, long j2, long j3);
public abstract boolean getBoolean(Object obj, long j);
public abstract byte getByte(long j);
public abstract byte getByte(Object obj, long j);
public abstract double getDouble(Object obj, long j);
public abstract float getFloat(Object obj, long j);
public abstract int getInt(long j);
public abstract long getLong(long j);
public abstract Object getStaticObject(java.lang.reflect.Field field);
public abstract void putBoolean(Object obj, long j, boolean z);
public abstract void putByte(long j, byte b);
public abstract void putByte(Object obj, long j, byte b);
public abstract void putDouble(Object obj, long j, double d);
public abstract void putFloat(Object obj, long j, float f);
public abstract void putInt(long j, int i);
public abstract void putLong(long j, long j2);
public MemoryAccessor(Unsafe unsafe) {
this.unsafe = unsafe;
}
public final long objectFieldOffset(java.lang.reflect.Field field) {
return this.unsafe.objectFieldOffset(field);
}
public final int arrayBaseOffset(Class<?> cls) {
return this.unsafe.arrayBaseOffset(cls);
}
public final int arrayIndexScale(Class<?> cls) {
return this.unsafe.arrayIndexScale(cls);
}
public boolean supportsUnsafeArrayOperations() {
Unsafe unsafe = this.unsafe;
if (unsafe == null) {
return false;
}
try {
Class<?> cls = unsafe.getClass();
cls.getMethod("objectFieldOffset", java.lang.reflect.Field.class);
cls.getMethod("arrayBaseOffset", Class.class);
cls.getMethod("arrayIndexScale", Class.class);
Class<?> cls2 = Long.TYPE;
cls.getMethod("getInt", Object.class, cls2);
cls.getMethod("putInt", Object.class, cls2, Integer.TYPE);
cls.getMethod("getLong", Object.class, cls2);
cls.getMethod("putLong", Object.class, cls2, cls2);
cls.getMethod("getObject", Object.class, cls2);
cls.getMethod("putObject", Object.class, cls2, Object.class);
return true;
} catch (Throwable th) {
UnsafeUtil.logMissingMethod(th);
return false;
}
}
public final int getInt(Object obj, long j) {
return this.unsafe.getInt(obj, j);
}
public final void putInt(Object obj, long j, int i) {
this.unsafe.putInt(obj, j, i);
}
public final long getLong(Object obj, long j) {
return this.unsafe.getLong(obj, j);
}
public final void putLong(Object obj, long j, long j2) {
this.unsafe.putLong(obj, j, j2);
}
public final Object getObject(Object obj, long j) {
return this.unsafe.getObject(obj, j);
}
public final void putObject(Object obj, long j, Object obj2) {
this.unsafe.putObject(obj, j, obj2);
}
public boolean supportsUnsafeByteBufferOperations() {
Unsafe unsafe = this.unsafe;
if (unsafe == null) {
return false;
}
try {
Class<?> cls = unsafe.getClass();
cls.getMethod("objectFieldOffset", java.lang.reflect.Field.class);
cls.getMethod("getLong", Object.class, Long.TYPE);
return UnsafeUtil.bufferAddressField() != null;
} catch (Throwable th) {
UnsafeUtil.logMissingMethod(th);
return false;
}
}
}
public static final class JvmMemoryAccessor extends MemoryAccessor {
public JvmMemoryAccessor(Unsafe unsafe) {
super(unsafe);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public Object getStaticObject(java.lang.reflect.Field field) {
return getObject(this.unsafe.staticFieldBase(field), this.unsafe.staticFieldOffset(field));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public boolean supportsUnsafeArrayOperations() {
if (!super.supportsUnsafeArrayOperations()) {
return false;
}
try {
Class<?> cls = this.unsafe.getClass();
Class<?> cls2 = Long.TYPE;
cls.getMethod("getByte", Object.class, cls2);
cls.getMethod("putByte", Object.class, cls2, Byte.TYPE);
cls.getMethod("getBoolean", Object.class, cls2);
cls.getMethod("putBoolean", Object.class, cls2, Boolean.TYPE);
cls.getMethod("getFloat", Object.class, cls2);
cls.getMethod("putFloat", Object.class, cls2, Float.TYPE);
cls.getMethod("getDouble", Object.class, cls2);
cls.getMethod("putDouble", Object.class, cls2, Double.TYPE);
return true;
} catch (Throwable th) {
UnsafeUtil.logMissingMethod(th);
return false;
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public byte getByte(Object obj, long j) {
return this.unsafe.getByte(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putByte(Object obj, long j, byte b) {
this.unsafe.putByte(obj, j, b);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public boolean getBoolean(Object obj, long j) {
return this.unsafe.getBoolean(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putBoolean(Object obj, long j, boolean z) {
this.unsafe.putBoolean(obj, j, z);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public float getFloat(Object obj, long j) {
return this.unsafe.getFloat(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putFloat(Object obj, long j, float f) {
this.unsafe.putFloat(obj, j, f);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public double getDouble(Object obj, long j) {
return this.unsafe.getDouble(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putDouble(Object obj, long j, double d) {
this.unsafe.putDouble(obj, j, d);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public boolean supportsUnsafeByteBufferOperations() {
if (!super.supportsUnsafeByteBufferOperations()) {
return false;
}
try {
Class<?> cls = this.unsafe.getClass();
Class<?> cls2 = Long.TYPE;
cls.getMethod("getByte", cls2);
cls.getMethod("putByte", cls2, Byte.TYPE);
cls.getMethod("getInt", cls2);
cls.getMethod("putInt", cls2, Integer.TYPE);
cls.getMethod("getLong", cls2);
cls.getMethod("putLong", cls2, cls2);
cls.getMethod("copyMemory", cls2, cls2, cls2);
cls.getMethod("copyMemory", Object.class, cls2, Object.class, cls2, cls2);
return true;
} catch (Throwable th) {
UnsafeUtil.logMissingMethod(th);
return false;
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public byte getByte(long j) {
return this.unsafe.getByte(j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putByte(long j, byte b) {
this.unsafe.putByte(j, b);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public int getInt(long j) {
return this.unsafe.getInt(j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putInt(long j, int i) {
this.unsafe.putInt(j, i);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public long getLong(long j) {
return this.unsafe.getLong(j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putLong(long j, long j2) {
this.unsafe.putLong(j, j2);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void copyMemory(long j, byte[] bArr, long j2, long j3) {
this.unsafe.copyMemory((Object) null, j, bArr, UnsafeUtil.BYTE_ARRAY_BASE_OFFSET + j2, j3);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void copyMemory(byte[] bArr, long j, long j2, long j3) {
this.unsafe.copyMemory(bArr, UnsafeUtil.BYTE_ARRAY_BASE_OFFSET + j, (Object) null, j2, j3);
}
}
public static final class Android64MemoryAccessor extends MemoryAccessor {
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public boolean supportsUnsafeByteBufferOperations() {
return false;
}
public Android64MemoryAccessor(Unsafe unsafe) {
super(unsafe);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public Object getStaticObject(java.lang.reflect.Field field) {
try {
return field.get(null);
} catch (IllegalAccessException unused) {
return null;
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public byte getByte(Object obj, long j) {
return UnsafeUtil.IS_BIG_ENDIAN ? UnsafeUtil.getByteBigEndian(obj, j) : UnsafeUtil.getByteLittleEndian(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putByte(Object obj, long j, byte b) {
if (UnsafeUtil.IS_BIG_ENDIAN) {
UnsafeUtil.putByteBigEndian(obj, j, b);
} else {
UnsafeUtil.putByteLittleEndian(obj, j, b);
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public boolean getBoolean(Object obj, long j) {
return UnsafeUtil.IS_BIG_ENDIAN ? UnsafeUtil.getBooleanBigEndian(obj, j) : UnsafeUtil.getBooleanLittleEndian(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putBoolean(Object obj, long j, boolean z) {
if (UnsafeUtil.IS_BIG_ENDIAN) {
UnsafeUtil.putBooleanBigEndian(obj, j, z);
} else {
UnsafeUtil.putBooleanLittleEndian(obj, j, z);
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public float getFloat(Object obj, long j) {
return Float.intBitsToFloat(getInt(obj, j));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putFloat(Object obj, long j, float f) {
putInt(obj, j, Float.floatToIntBits(f));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public double getDouble(Object obj, long j) {
return Double.longBitsToDouble(getLong(obj, j));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putDouble(Object obj, long j, double d) {
putLong(obj, j, Double.doubleToLongBits(d));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public byte getByte(long j) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putByte(long j, byte b) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public int getInt(long j) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putInt(long j, int i) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public long getLong(long j) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putLong(long j, long j2) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void copyMemory(long j, byte[] bArr, long j2, long j3) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void copyMemory(byte[] bArr, long j, long j2, long j3) {
throw new UnsupportedOperationException();
}
}
public static final class Android32MemoryAccessor extends MemoryAccessor {
private static final long SMALL_ADDRESS_MASK = -1;
private static int smallAddress(long j) {
return (int) j;
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public boolean supportsUnsafeByteBufferOperations() {
return false;
}
public Android32MemoryAccessor(Unsafe unsafe) {
super(unsafe);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public Object getStaticObject(java.lang.reflect.Field field) {
try {
return field.get(null);
} catch (IllegalAccessException unused) {
return null;
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public byte getByte(Object obj, long j) {
return UnsafeUtil.IS_BIG_ENDIAN ? UnsafeUtil.getByteBigEndian(obj, j) : UnsafeUtil.getByteLittleEndian(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putByte(Object obj, long j, byte b) {
if (UnsafeUtil.IS_BIG_ENDIAN) {
UnsafeUtil.putByteBigEndian(obj, j, b);
} else {
UnsafeUtil.putByteLittleEndian(obj, j, b);
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public boolean getBoolean(Object obj, long j) {
return UnsafeUtil.IS_BIG_ENDIAN ? UnsafeUtil.getBooleanBigEndian(obj, j) : UnsafeUtil.getBooleanLittleEndian(obj, j);
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putBoolean(Object obj, long j, boolean z) {
if (UnsafeUtil.IS_BIG_ENDIAN) {
UnsafeUtil.putBooleanBigEndian(obj, j, z);
} else {
UnsafeUtil.putBooleanLittleEndian(obj, j, z);
}
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public float getFloat(Object obj, long j) {
return Float.intBitsToFloat(getInt(obj, j));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putFloat(Object obj, long j, float f) {
putInt(obj, j, Float.floatToIntBits(f));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public double getDouble(Object obj, long j) {
return Double.longBitsToDouble(getLong(obj, j));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putDouble(Object obj, long j, double d) {
putLong(obj, j, Double.doubleToLongBits(d));
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public byte getByte(long j) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putByte(long j, byte b) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public int getInt(long j) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putInt(long j, int i) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public long getLong(long j) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void putLong(long j, long j2) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void copyMemory(long j, byte[] bArr, long j2, long j3) {
throw new UnsupportedOperationException();
}
@Override // com.google.protobuf.UnsafeUtil.MemoryAccessor
public void copyMemory(byte[] bArr, long j, long j2, long j3) {
throw new UnsupportedOperationException();
}
}
/* JADX INFO: Access modifiers changed from: private */
public static byte getByteBigEndian(Object obj, long j) {
return (byte) ((getInt(obj, (-4) & j) >>> ((int) (((~j) & 3) << 3))) & 255);
}
/* JADX INFO: Access modifiers changed from: private */
public static byte getByteLittleEndian(Object obj, long j) {
return (byte) ((getInt(obj, (-4) & j) >>> ((int) ((j & 3) << 3))) & 255);
}
/* JADX INFO: Access modifiers changed from: private */
public static void putByteBigEndian(Object obj, long j, byte b) {
long j2 = (-4) & j;
int i = getInt(obj, j2);
int i2 = ((~((int) j)) & 3) << 3;
putInt(obj, j2, ((255 & b) << i2) | (i & (~(255 << i2))));
}
/* JADX INFO: Access modifiers changed from: private */
public static void putByteLittleEndian(Object obj, long j, byte b) {
long j2 = (-4) & j;
int i = (((int) j) & 3) << 3;
putInt(obj, j2, ((255 & b) << i) | (getInt(obj, j2) & (~(255 << i))));
}
/* JADX INFO: Access modifiers changed from: private */
public static boolean getBooleanBigEndian(Object obj, long j) {
return getByteBigEndian(obj, j) != 0;
}
/* JADX INFO: Access modifiers changed from: private */
public static boolean getBooleanLittleEndian(Object obj, long j) {
return getByteLittleEndian(obj, j) != 0;
}
/* JADX INFO: Access modifiers changed from: private */
public static void putBooleanBigEndian(Object obj, long j, boolean z) {
putByteBigEndian(obj, j, z ? (byte) 1 : (byte) 0);
}
/* JADX INFO: Access modifiers changed from: private */
public static void putBooleanLittleEndian(Object obj, long j, boolean z) {
putByteLittleEndian(obj, j, z ? (byte) 1 : (byte) 0);
}
/* JADX INFO: Access modifiers changed from: private */
public static void logMissingMethod(Throwable th) {
Logger.getLogger(UnsafeUtil.class.getName()).log(Level.WARNING, "platform method missing - proto runtime falling back to safer methods: " + th);
}
}