package org.deuce.reflection;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import org.deuce.transform.Exclude;
@Exclude
public class AddressUtil {
/**
* Fetches the field direct address.
* @param field field reference
* @return direct address
*/
public static long getAddress( Field field) {
if( Modifier.isStatic(field.getModifiers())){
return UnsafeHolder.getUnsafe().staticFieldOffset(field);
}else{
return UnsafeHolder.getUnsafe().objectFieldOffset(field);
}
}
/**
* Fetches base class handle
* @param clazz Class reference
* @return direct address
*/
public static Object staticFieldBase( Class clazz, String fieldName) {
Field field = null;
try {
field = clazz.getDeclaredField(fieldName);
return UnsafeHolder.getUnsafe().staticFieldBase( field);
} catch (Exception e) {
throw new RuntimeException(clazz + " " + field, e);
}
}
/**
* Fetches the array base offset
* @param arrClass array class
* @return offset
*/
public static int arrayBaseOffset( Class arrClass) {
return UnsafeHolder.getUnsafe().arrayBaseOffset( arrClass);
}
/**
* Fetches the array index scale
* @param arrClass array class
* @return scale
*/
public static int arrayIndexScale( Class arrClass) {
return UnsafeHolder.getUnsafe().arrayIndexScale( arrClass);
}
}