2020-05-21 02:33:47 +00:00
|
|
|
package io.izzel.arclight.api;
|
2020-05-16 06:22:29 +00:00
|
|
|
|
|
|
|
import sun.reflect.CallerSensitive;
|
|
|
|
|
|
|
|
import java.lang.invoke.MethodHandles;
|
|
|
|
import java.lang.reflect.Field;
|
|
|
|
import java.security.ProtectionDomain;
|
|
|
|
|
|
|
|
@SuppressWarnings("all")
|
|
|
|
public class Unsafe {
|
|
|
|
|
|
|
|
private static final sun.misc.Unsafe unsafe;
|
|
|
|
private static final MethodHandles.Lookup lookup;
|
|
|
|
|
|
|
|
static {
|
|
|
|
try {
|
|
|
|
Field theUnsafe = sun.misc.Unsafe.class.getDeclaredField("theUnsafe");
|
|
|
|
theUnsafe.setAccessible(true);
|
|
|
|
unsafe = (sun.misc.Unsafe) theUnsafe.get(null);
|
|
|
|
Unsafe.ensureClassInitialized(MethodHandles.Lookup.class);
|
|
|
|
Field field = MethodHandles.Lookup.class.getDeclaredField("IMPL_LOOKUP");
|
|
|
|
Object base = unsafe.staticFieldBase(field);
|
|
|
|
long offset = unsafe.staticFieldOffset(field);
|
|
|
|
lookup = (MethodHandles.Lookup) unsafe.getObject(base, offset);
|
|
|
|
} catch (Exception e) {
|
|
|
|
throw new RuntimeException(e);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static MethodHandles.Lookup lookup() {
|
|
|
|
return lookup;
|
|
|
|
}
|
|
|
|
|
|
|
|
@CallerSensitive
|
|
|
|
public static sun.misc.Unsafe getUnsafe() {
|
|
|
|
return unsafe;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getInt(Object o, long l) {
|
|
|
|
return unsafe.getInt(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putInt(Object o, long l, int i) {
|
|
|
|
unsafe.putInt(o, l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Object getObject(Object o, long l) {
|
|
|
|
return unsafe.getObject(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putObject(Object o, long l, Object o1) {
|
|
|
|
unsafe.putObject(o, l, o1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean getBoolean(Object o, long l) {
|
|
|
|
return unsafe.getBoolean(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putBoolean(Object o, long l, boolean b) {
|
|
|
|
unsafe.putBoolean(o, l, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static byte getByte(Object o, long l) {
|
|
|
|
return unsafe.getByte(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putByte(Object o, long l, byte b) {
|
|
|
|
unsafe.putByte(o, l, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static short getShort(Object o, long l) {
|
|
|
|
return unsafe.getShort(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putShort(Object o, long l, short i) {
|
|
|
|
unsafe.putShort(o, l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static char getChar(Object o, long l) {
|
|
|
|
return unsafe.getChar(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putChar(Object o, long l, char c) {
|
|
|
|
unsafe.putChar(o, l, c);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long getLong(Object o, long l) {
|
|
|
|
return unsafe.getLong(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putLong(Object o, long l, long l1) {
|
|
|
|
unsafe.putLong(o, l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static float getFloat(Object o, long l) {
|
|
|
|
return unsafe.getFloat(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putFloat(Object o, long l, float v) {
|
|
|
|
unsafe.putFloat(o, l, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static double getDouble(Object o, long l) {
|
|
|
|
return unsafe.getDouble(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putDouble(Object o, long l, double v) {
|
|
|
|
unsafe.putDouble(o, l, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static int getInt(Object o, int i) {
|
|
|
|
return unsafe.getInt(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putInt(Object o, int i, int i1) {
|
|
|
|
unsafe.putInt(o, i, i1);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static Object getObject(Object o, int i) {
|
|
|
|
return unsafe.getObject(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putObject(Object o, int i, Object o1) {
|
|
|
|
unsafe.putObject(o, i, o1);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static boolean getBoolean(Object o, int i) {
|
|
|
|
return unsafe.getBoolean(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putBoolean(Object o, int i, boolean b) {
|
|
|
|
unsafe.putBoolean(o, i, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static byte getByte(Object o, int i) {
|
|
|
|
return unsafe.getByte(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putByte(Object o, int i, byte b) {
|
|
|
|
unsafe.putByte(o, i, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static short getShort(Object o, int i) {
|
|
|
|
return unsafe.getShort(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putShort(Object o, int i, short i1) {
|
|
|
|
unsafe.putShort(o, i, i1);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static char getChar(Object o, int i) {
|
|
|
|
return unsafe.getChar(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putChar(Object o, int i, char c) {
|
|
|
|
unsafe.putChar(o, i, c);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static long getLong(Object o, int i) {
|
|
|
|
return unsafe.getLong(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putLong(Object o, int i, long l) {
|
|
|
|
unsafe.putLong(o, i, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static float getFloat(Object o, int i) {
|
|
|
|
return unsafe.getFloat(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putFloat(Object o, int i, float v) {
|
|
|
|
unsafe.putFloat(o, i, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static double getDouble(Object o, int i) {
|
|
|
|
return unsafe.getDouble(o, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void putDouble(Object o, int i, double v) {
|
|
|
|
unsafe.putDouble(o, i, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static byte getByte(long l) {
|
|
|
|
return unsafe.getByte(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putByte(long l, byte b) {
|
|
|
|
unsafe.putByte(l, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static short getShort(long l) {
|
|
|
|
return unsafe.getShort(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putShort(long l, short i) {
|
|
|
|
unsafe.putShort(l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static char getChar(long l) {
|
|
|
|
return unsafe.getChar(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putChar(long l, char c) {
|
|
|
|
unsafe.putChar(l, c);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getInt(long l) {
|
|
|
|
return unsafe.getInt(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putInt(long l, int i) {
|
|
|
|
unsafe.putInt(l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long getLong(long l) {
|
|
|
|
return unsafe.getLong(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putLong(long l, long l1) {
|
|
|
|
unsafe.putLong(l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static float getFloat(long l) {
|
|
|
|
return unsafe.getFloat(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putFloat(long l, float v) {
|
|
|
|
unsafe.putFloat(l, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static double getDouble(long l) {
|
|
|
|
return unsafe.getDouble(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putDouble(long l, double v) {
|
|
|
|
unsafe.putDouble(l, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long getAddress(long l) {
|
|
|
|
return unsafe.getAddress(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putAddress(long l, long l1) {
|
|
|
|
unsafe.putAddress(l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long allocateMemory(long l) {
|
|
|
|
return unsafe.allocateMemory(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long reallocateMemory(long l, long l1) {
|
|
|
|
return unsafe.reallocateMemory(l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setMemory(Object o, long l, long l1, byte b) {
|
|
|
|
unsafe.setMemory(o, l, l1, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void setMemory(long l, long l1, byte b) {
|
|
|
|
unsafe.setMemory(l, l1, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void copyMemory(Object o, long l, Object o1, long l1, long l2) {
|
|
|
|
unsafe.copyMemory(o, l, o1, l1, l2);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void copyMemory(long l, long l1, long l2) {
|
|
|
|
unsafe.copyMemory(l, l1, l2);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void freeMemory(long l) {
|
|
|
|
unsafe.freeMemory(l);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static int fieldOffset(Field field) {
|
|
|
|
return unsafe.fieldOffset(field);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static Object staticFieldBase(Class<?> aClass) {
|
|
|
|
return unsafe.staticFieldBase(aClass);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long staticFieldOffset(Field field) {
|
|
|
|
return unsafe.staticFieldOffset(field);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long objectFieldOffset(Field field) {
|
|
|
|
return unsafe.objectFieldOffset(field);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Object staticFieldBase(Field field) {
|
|
|
|
return unsafe.staticFieldBase(field);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean shouldBeInitialized(Class<?> aClass) {
|
|
|
|
return unsafe.shouldBeInitialized(aClass);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void ensureClassInitialized(Class<?> aClass) {
|
|
|
|
unsafe.ensureClassInitialized(aClass);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int arrayBaseOffset(Class<?> aClass) {
|
|
|
|
return unsafe.arrayBaseOffset(aClass);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int arrayIndexScale(Class<?> aClass) {
|
|
|
|
return unsafe.arrayIndexScale(aClass);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int addressSize() {
|
|
|
|
return unsafe.addressSize();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int pageSize() {
|
|
|
|
return unsafe.pageSize();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Class<?> defineClass(String s, byte[] bytes, int i, int i1, ClassLoader classLoader, ProtectionDomain protectionDomain) {
|
|
|
|
return unsafe.defineClass(s, bytes, i, i1, classLoader, protectionDomain);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Class<?> defineAnonymousClass(Class<?> aClass, byte[] bytes, Object[] objects) {
|
|
|
|
return unsafe.defineAnonymousClass(aClass, bytes, objects);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Object allocateInstance(Class<?> aClass) throws InstantiationException {
|
|
|
|
return unsafe.allocateInstance(aClass);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void monitorEnter(Object o) {
|
|
|
|
unsafe.monitorEnter(o);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static void monitorExit(Object o) {
|
|
|
|
unsafe.monitorExit(o);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Deprecated
|
|
|
|
public static boolean tryMonitorEnter(Object o) {
|
|
|
|
return unsafe.tryMonitorEnter(o);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void throwException(Throwable throwable) {
|
|
|
|
unsafe.throwException(throwable);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean compareAndSwapObject(Object o, long l, Object o1, Object o2) {
|
|
|
|
return unsafe.compareAndSwapObject(o, l, o1, o2);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean compareAndSwapInt(Object o, long l, int i, int i1) {
|
|
|
|
return unsafe.compareAndSwapInt(o, l, i, i1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean compareAndSwapLong(Object o, long l, long l1, long l2) {
|
|
|
|
return unsafe.compareAndSwapLong(o, l, l1, l2);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Object getObjectVolatile(Object o, long l) {
|
|
|
|
return unsafe.getObjectVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putObjectVolatile(Object o, long l, Object o1) {
|
|
|
|
unsafe.putObjectVolatile(o, l, o1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getIntVolatile(Object o, long l) {
|
|
|
|
return unsafe.getIntVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putIntVolatile(Object o, long l, int i) {
|
|
|
|
unsafe.putIntVolatile(o, l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static boolean getBooleanVolatile(Object o, long l) {
|
|
|
|
return unsafe.getBooleanVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putBooleanVolatile(Object o, long l, boolean b) {
|
|
|
|
unsafe.putBooleanVolatile(o, l, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static byte getByteVolatile(Object o, long l) {
|
|
|
|
return unsafe.getByteVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putByteVolatile(Object o, long l, byte b) {
|
|
|
|
unsafe.putByteVolatile(o, l, b);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static short getShortVolatile(Object o, long l) {
|
|
|
|
return unsafe.getShortVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putShortVolatile(Object o, long l, short i) {
|
|
|
|
unsafe.putShortVolatile(o, l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static char getCharVolatile(Object o, long l) {
|
|
|
|
return unsafe.getCharVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putCharVolatile(Object o, long l, char c) {
|
|
|
|
unsafe.putCharVolatile(o, l, c);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long getLongVolatile(Object o, long l) {
|
|
|
|
return unsafe.getLongVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putLongVolatile(Object o, long l, long l1) {
|
|
|
|
unsafe.putLongVolatile(o, l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static float getFloatVolatile(Object o, long l) {
|
|
|
|
return unsafe.getFloatVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putFloatVolatile(Object o, long l, float v) {
|
|
|
|
unsafe.putFloatVolatile(o, l, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static double getDoubleVolatile(Object o, long l) {
|
|
|
|
return unsafe.getDoubleVolatile(o, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putDoubleVolatile(Object o, long l, double v) {
|
|
|
|
unsafe.putDoubleVolatile(o, l, v);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putOrderedObject(Object o, long l, Object o1) {
|
|
|
|
unsafe.putOrderedObject(o, l, o1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putOrderedInt(Object o, long l, int i) {
|
|
|
|
unsafe.putOrderedInt(o, l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void putOrderedLong(Object o, long l, long l1) {
|
|
|
|
unsafe.putOrderedLong(o, l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void unpark(Object o) {
|
|
|
|
unsafe.unpark(o);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void park(boolean b, long l) {
|
|
|
|
unsafe.park(b, l);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getLoadAverage(double[] doubles, int i) {
|
|
|
|
return unsafe.getLoadAverage(doubles, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getAndAddInt(Object o, long l, int i) {
|
|
|
|
return unsafe.getAndAddInt(o, l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long getAndAddLong(Object o, long l, long l1) {
|
|
|
|
return unsafe.getAndAddLong(o, l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int getAndSetInt(Object o, long l, int i) {
|
|
|
|
return unsafe.getAndSetInt(o, l, i);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static long getAndSetLong(Object o, long l, long l1) {
|
|
|
|
return unsafe.getAndSetLong(o, l, l1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Object getAndSetObject(Object o, long l, Object o1) {
|
|
|
|
return unsafe.getAndSetObject(o, l, o1);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void loadFence() {
|
|
|
|
unsafe.loadFence();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void storeFence() {
|
|
|
|
unsafe.storeFence();
|
|
|
|
}
|
|
|
|
|
|
|
|
public static void fullFence() {
|
|
|
|
unsafe.fullFence();
|
|
|
|
}
|
|
|
|
}
|