package org.deuce.transaction;
import org.deuce.objectweb.asm.Type;
import org.deuce.reflection.AddressUtil;
import org.deuce.transform.Exclude;
import org.deuce.transform.UseStrongIso;
/**
* Cluster static delegate methods.
* These methods delegates calls from the dynamic generated code to the context.
*
*
* @author Guy Korland
* @since 1.0
*
*/
public class ContextDelegator {
final static public String CONTEXT_DELEGATOR_INTERNAL = Type.getInternalName(ContextDelegator.class);
final static public String BEFORE_READ_METHOD_NAME;
final static public String BEFORE_READ_METHOD_DESC;
static {
if(UseStrongIso.USE_STRONG_ISO) {
BEFORE_READ_METHOD_NAME = "beforeReadAccessStrongIso";
BEFORE_READ_METHOD_DESC = "(Ljava/lang/Object;Ljava/lang/Object;JJ" + Context.CONTEXT_DESC +")V";
} else {
BEFORE_READ_METHOD_NAME = "beforeReadAccess";
BEFORE_READ_METHOD_DESC = "(Ljava/lang/Object;J" + Context.CONTEXT_DESC +")V";
}
}
final static public String WRITE_ARR_METHOD_NAME = "onArrayWriteAccess";
final static public String WRITE_METHOD_NAME;
final static public String STATIC_WRITE_METHOD_NAME;
static {
if(UseStrongIso.USE_STRONG_ISO) {
WRITE_METHOD_NAME = "onWriteAccessStrongIso";
STATIC_WRITE_METHOD_NAME = "addStaticWriteAccessStrongIso";
} else {
WRITE_METHOD_NAME = "onWriteAccess";
STATIC_WRITE_METHOD_NAME = "addStaticWriteAccess";
}
}
final static public String READ_METHOD_NAME = "onReadAccess";
final static public String READ_ARR_METHOD_NAME;
static {
if(UseStrongIso.USE_STRONG_ISO) {
READ_ARR_METHOD_NAME = "onArrayReadAccessStrongIso";
} else {
READ_ARR_METHOD_NAME = "onArrayReadAccess";
}
}
final static private String WRITE_METHOD_BOOLEAN_DESC;
final static private String WRITE_METHOD_BYTE_DESC;
final static private String WRITE_METHOD_CHAR_DESC;
final static private String WRITE_METHOD_SHORT_DESC;
final static private String WRITE_METHOD_INT_DESC;
final static private String WRITE_METHOD_LONG_DESC;
final static private String WRITE_METHOD_FLOAT_DESC;
final static private String WRITE_METHOD_DOUBLE_DESC;
final static private String WRITE_METHOD_OBJ_DESC;
final static private String STATIC_WRITE_METHOD_BOOLEAN_DESC;
final static private String STATIC_WRITE_METHOD_BYTE_DESC;
final static private String STATIC_WRITE_METHOD_CHAR_DESC;
final static private String STATIC_WRITE_METHOD_SHORT_DESC;
final static private String STATIC_WRITE_METHOD_INT_DESC;
final static private String STATIC_WRITE_METHOD_LONG_DESC;
final static private String STATIC_WRITE_METHOD_FLOAT_DESC;
final static private String STATIC_WRITE_METHOD_DOUBLE_DESC;
final static private String STATIC_WRITE_METHOD_OBJ_DESC;
static{
if(UseStrongIso.USE_STRONG_ISO) {
WRITE_METHOD_BOOLEAN_DESC = "(Ljava/lang/Object;ZJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_BYTE_DESC = "(Ljava/lang/Object;BJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_CHAR_DESC = "(Ljava/lang/Object;CJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_SHORT_DESC = "(Ljava/lang/Object;SJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_INT_DESC = "(Ljava/lang/Object;IJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_LONG_DESC = "(Ljava/lang/Object;JJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_FLOAT_DESC = "(Ljava/lang/Object;FJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_DOUBLE_DESC = "(Ljava/lang/Object;DJJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_OBJ_DESC = "(Ljava/lang/Object;Ljava/lang/Object;JJ" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_BOOLEAN_DESC = "(ZLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_BYTE_DESC = "(BLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_CHAR_DESC = "(CLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_SHORT_DESC = "(SLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_INT_DESC = "(ILjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_LONG_DESC = "(JLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_FLOAT_DESC = "(FLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_DOUBLE_DESC = "(DLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_OBJ_DESC = "(Ljava/lang/Object;Ljava/lang/Object;J" + Context.CONTEXT_DESC +")V";
} else {
WRITE_METHOD_BOOLEAN_DESC = "(Ljava/lang/Object;ZJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_BYTE_DESC = "(Ljava/lang/Object;BJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_CHAR_DESC = "(Ljava/lang/Object;CJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_SHORT_DESC = "(Ljava/lang/Object;SJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_INT_DESC = "(Ljava/lang/Object;IJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_LONG_DESC = "(Ljava/lang/Object;JJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_FLOAT_DESC = "(Ljava/lang/Object;FJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_DOUBLE_DESC = "(Ljava/lang/Object;DJ" + Context.CONTEXT_DESC +")V";
WRITE_METHOD_OBJ_DESC = "(Ljava/lang/Object;Ljava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_BOOLEAN_DESC = "(ZLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_BYTE_DESC = "(BLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_CHAR_DESC = "(CLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_SHORT_DESC = "(SLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_INT_DESC = "(ILjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_LONG_DESC = "(JLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_FLOAT_DESC = "(FLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_DOUBLE_DESC = "(DLjava/lang/Object;J" + Context.CONTEXT_DESC +")V";
STATIC_WRITE_METHOD_OBJ_DESC = "(Ljava/lang/Object;Ljava/lang/Object;J" + Context.CONTEXT_DESC +")V";
}
}
final static private String READ_METHOD_BOOLEAN_DESC = "(Ljava/lang/Object;ZJ" + Context.CONTEXT_DESC +")Z";
final static private String READ_METHOD_BYTE_DESC = "(Ljava/lang/Object;BJ" + Context.CONTEXT_DESC +")B";
final static private String READ_METHOD_CHAR_DESC = "(Ljava/lang/Object;CJ" + Context.CONTEXT_DESC +")C";
final static private String READ_METHOD_SHORT_DESC = "(Ljava/lang/Object;SJ" + Context.CONTEXT_DESC +")S";
final static private String READ_METHOD_INT_DESC = "(Ljava/lang/Object;IJ" + Context.CONTEXT_DESC +")I";
final static private String READ_METHOD_LONG_DESC = "(Ljava/lang/Object;JJ" + Context.CONTEXT_DESC +")J";
final static private String READ_METHOD_FLOAT_DESC = "(Ljava/lang/Object;FJ" + Context.CONTEXT_DESC +")F";
final static private String READ_METHOD_DOUBLE_DESC = "(Ljava/lang/Object;DJ" + Context.CONTEXT_DESC +")D";
final static private String READ_METHOD_OBJ_DESC = "(Ljava/lang/Object;Ljava/lang/Object;J" + Context.CONTEXT_DESC +")Ljava/lang/Object;";
final static public String WRITE_ARRAY_METHOD_BYTE_DESC = "([BIB" + Context.CONTEXT_DESC +")V";
final static public String WRITE_ARRAY_METHOD_CHAR_DESC = "([CIC" + Context.CONTEXT_DESC +")V";
final static public String WRITE_ARRAY_METHOD_SHORT_DESC = "([SIS" + Context.CONTEXT_DESC +")V";
final static public String WRITE_ARRAY_METHOD_INT_DESC = "([III" + Context.CONTEXT_DESC +")V";
final static public String WRITE_ARRAY_METHOD_LONG_DESC = "([JIJ" + Context.CONTEXT_DESC +")V";
final static public String WRITE_ARRAY_METHOD_FLOAT_DESC = "([FIF" + Context.CONTEXT_DESC +")V";
final static public String WRITE_ARRAY_METHOD_DOUBLE_DESC = "([DID" + Context.CONTEXT_DESC +")V";
final static public String WRITE_ARRAY_METHOD_OBJ_DESC = "([Ljava/lang/Object;ILjava/lang/Object;" + Context.CONTEXT_DESC +")V";
final static public String READ_ARRAY_METHOD_BYTE_DESC;
final static public String READ_ARRAY_METHOD_CHAR_DESC;
final static public String READ_ARRAY_METHOD_SHORT_DESC;
final static public String READ_ARRAY_METHOD_INT_DESC;
final static public String READ_ARRAY_METHOD_LONG_DESC;
final static public String READ_ARRAY_METHOD_FLOAT_DESC;
final static public String READ_ARRAY_METHOD_DOUBLE_DESC;
final static public String READ_ARRAY_METHOD_OBJ_DESC;
static {
if(UseStrongIso.USE_STRONG_ISO) {
// READ_ARRAY_METHOD_BYTE_DESC = "([BI" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")B";
// READ_ARRAY_METHOD_CHAR_DESC = "([CI" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")C";
// READ_ARRAY_METHOD_SHORT_DESC = "([SI" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")S";
// READ_ARRAY_METHOD_INT_DESC = "([II" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")I";
// READ_ARRAY_METHOD_LONG_DESC = "([JI" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")J";
// READ_ARRAY_METHOD_FLOAT_DESC = "([FI" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")F";
// READ_ARRAY_METHOD_DOUBLE_DESC = "([DI" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")D";
// READ_ARRAY_METHOD_OBJ_DESC = "([Ljava/lang/Object;I" + Type.getType(ArrayReadFieldAccess.class).getDescriptor() + Context.CONTEXT_DESC +")Ljava/lang/Object;";
READ_ARRAY_METHOD_BYTE_DESC = "([BI" + "J" + Context.CONTEXT_DESC +")B";
READ_ARRAY_METHOD_CHAR_DESC = "([CI" + "J" + Context.CONTEXT_DESC +")C";
READ_ARRAY_METHOD_SHORT_DESC = "([SI" + "J" + Context.CONTEXT_DESC +")S";
READ_ARRAY_METHOD_INT_DESC = "([II" + "J" + Context.CONTEXT_DESC +")I";
READ_ARRAY_METHOD_LONG_DESC = "([JI" + "J" + Context.CONTEXT_DESC +")J";
READ_ARRAY_METHOD_FLOAT_DESC = "([FI" + "J" + Context.CONTEXT_DESC +")F";
READ_ARRAY_METHOD_DOUBLE_DESC = "([DI" + "J" + Context.CONTEXT_DESC +")D";
READ_ARRAY_METHOD_OBJ_DESC = "([Ljava/lang/Object;I" + "J" + Context.CONTEXT_DESC +")Ljava/lang/Object;";
} else {
READ_ARRAY_METHOD_BYTE_DESC = "([BI" + Context.CONTEXT_DESC +")B";
READ_ARRAY_METHOD_CHAR_DESC = "([CI" + Context.CONTEXT_DESC +")C";
READ_ARRAY_METHOD_SHORT_DESC = "([SI" + Context.CONTEXT_DESC +")S";
READ_ARRAY_METHOD_INT_DESC = "([II" + Context.CONTEXT_DESC +")I";
READ_ARRAY_METHOD_LONG_DESC = "([JI" + Context.CONTEXT_DESC +")J";
READ_ARRAY_METHOD_FLOAT_DESC = "([FI" + Context.CONTEXT_DESC +")F";
READ_ARRAY_METHOD_DOUBLE_DESC = "([DI" + Context.CONTEXT_DESC +")D";
READ_ARRAY_METHOD_OBJ_DESC = "([Ljava/lang/Object;I" + Context.CONTEXT_DESC +")Ljava/lang/Object;";
}
}
final static private int BYTE_ARR_BASE = AddressUtil.arrayBaseOffset(byte[].class);
final static private int CHAR_ARR_BASE = AddressUtil.arrayBaseOffset(char[].class);
final static private int SHORT_ARR_BASE = AddressUtil.arrayBaseOffset(short[].class);
final static private int INT_ARR_BASE = AddressUtil.arrayBaseOffset(int[].class);
final static private int LONG_ARR_BASE = AddressUtil.arrayBaseOffset(long[].class);
final static private int FLOAT_ARR_BASE = AddressUtil.arrayBaseOffset(float[].class);
final static private int DOUBLE_ARR_BASE = AddressUtil.arrayBaseOffset(double[].class);
final static private int OBJECT_ARR_BASE = AddressUtil.arrayBaseOffset(Object[].class);
final static private int BYTE_ARR_SCALE = AddressUtil.arrayIndexScale(byte[].class);
final static private int CHAR_ARR_SCALE = AddressUtil.arrayIndexScale(char[].class);
final static private int SHORT_ARR_SCALE = AddressUtil.arrayIndexScale(short[].class);
final static private int INT_ARR_SCALE = AddressUtil.arrayIndexScale(int[].class);
final static private int LONG_ARR_SCALE = AddressUtil.arrayIndexScale(long[].class);
final static private int FLOAT_ARR_SCALE = AddressUtil.arrayIndexScale(float[].class);
final static private int DOUBLE_ARR_SCALE = AddressUtil.arrayIndexScale(double[].class);
final static private int OBJECT_ARR_SCALE = AddressUtil.arrayIndexScale(Object[].class);
final private static ContextThreadLocal THREAD_CONTEXT = new ContextThreadLocal();
@Exclude
private static class ContextThreadLocal extends ThreadLocal<Context>
{
private Class<?> contextClass;
public ContextThreadLocal(){
String className = System.getProperty( "org.deuce.transaction.contextClass");
if( className != null){
try {
this.contextClass = Class.forName(className);
System.out.println("Found!!! stm " + className);
return;
} catch (ClassNotFoundException e) {
System.out.println("Did not find!!! stm " + className);
e.printStackTrace(); // TODO add logger
}
}
System.out.println("Did not find!!! stm " + className);
this.contextClass = org.deuce.transaction.estm.Context.class;
//System.out.println("Using GTM");
//this.contextClass = org.deuce.transaction.gtm.Context.class;
}
@Override
protected synchronized Context initialValue() {
try {
return (Context)this.contextClass.newInstance();
} catch (Exception e) {
throw new TransactionException( e);
}
}
}
public static Context getInstance(){
return THREAD_CONTEXT.get();
}
public static String getWriteMethodDesc( Type type) {
switch( type.getSort()) {
case Type.BOOLEAN:
return WRITE_METHOD_BOOLEAN_DESC;
case Type.BYTE:
return WRITE_METHOD_BYTE_DESC;
case Type.CHAR:
return WRITE_METHOD_CHAR_DESC;
case Type.SHORT:
return WRITE_METHOD_SHORT_DESC;
case Type.INT:
return WRITE_METHOD_INT_DESC;
case Type.LONG:
return WRITE_METHOD_LONG_DESC;
case Type.FLOAT:
return WRITE_METHOD_FLOAT_DESC;
case Type.DOUBLE:
return WRITE_METHOD_DOUBLE_DESC;
default:
return WRITE_METHOD_OBJ_DESC;
}
}
public static String getStaticWriteMethodDesc( Type type) {
switch( type.getSort()) {
case Type.BOOLEAN:
return STATIC_WRITE_METHOD_BOOLEAN_DESC;
case Type.BYTE:
return STATIC_WRITE_METHOD_BYTE_DESC;
case Type.CHAR:
return STATIC_WRITE_METHOD_CHAR_DESC;
case Type.SHORT:
return STATIC_WRITE_METHOD_SHORT_DESC;
case Type.INT:
return STATIC_WRITE_METHOD_INT_DESC;
case Type.LONG:
return STATIC_WRITE_METHOD_LONG_DESC;
case Type.FLOAT:
return STATIC_WRITE_METHOD_FLOAT_DESC;
case Type.DOUBLE:
return STATIC_WRITE_METHOD_DOUBLE_DESC;
default:
return STATIC_WRITE_METHOD_OBJ_DESC;
}
}
public static String getReadMethodDesc( Type type) {
switch( type.getSort()) {
case Type.BOOLEAN:
return READ_METHOD_BOOLEAN_DESC;
case Type.BYTE:
return READ_METHOD_BYTE_DESC;
case Type.CHAR:
return READ_METHOD_CHAR_DESC;
case Type.SHORT:
return READ_METHOD_SHORT_DESC;
case Type.INT:
return READ_METHOD_INT_DESC;
case Type.LONG:
return READ_METHOD_LONG_DESC;
case Type.FLOAT:
return READ_METHOD_FLOAT_DESC;
case Type.DOUBLE:
return READ_METHOD_DOUBLE_DESC;
default:
return READ_METHOD_OBJ_DESC;
}
}
static public void beforeReadAccess( Object obj, long field, Context context) {
context.beforeReadAccess(obj, field);
}
static public void beforeReadAccessStrongIso( Object obj, Object obj2, long field, long fieldObj, Context context) {
context.beforeReadAccessStrongIso(obj, field, obj2, fieldObj);
}
static public Object onReadAccess( Object obj, Object value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public boolean onReadAccess( Object obj, boolean value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public byte onReadAccess( Object obj, byte value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public char onReadAccess( Object obj, char value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public short onReadAccess( Object obj, short value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public int onReadAccess( Object obj, int value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public long onReadAccess( Object obj, long value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public float onReadAccess( Object obj, float value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public double onReadAccess( Object obj, double value, long field, Context context) {
return context.onReadAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, Object value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, boolean value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, byte value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, char value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, short value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, int value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, long value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, float value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccess( Object obj, double value, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( Object value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( boolean value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( byte value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( char value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( short value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( int value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( long value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( float value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void addStaticWriteAccess( double value, Object obj, long field, Context context) {
context.onWriteAccess(obj, value, field);
}
static public void onWriteAccessStrongIso( Object obj, Object value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, boolean value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, byte value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, char value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, short value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, int value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, long value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, float value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void onWriteAccessStrongIso( Object obj, double value, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( Object value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( boolean value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( byte value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( char value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( short value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( int value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( long value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( float value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
static public void addStaticWriteAccessStrongIso( double value, Object obj, long field, long fieldObj, Context context) {
context.onWriteAccessStrongIso(obj, value, field, fieldObj);
}
// static public Object onArrayReadAccessStrongIso( Object[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = OBJECT_ARR_BASE + OBJECT_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
// static public byte onArrayReadAccessStrongIso( byte[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = BYTE_ARR_BASE + BYTE_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
// static public char onArrayReadAccessStrongIso( char[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = CHAR_ARR_BASE + CHAR_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
// static public short onArrayReadAccessStrongIso( short[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = SHORT_ARR_BASE + SHORT_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
// static public int onArrayReadAccessStrongIso( int[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = INT_ARR_BASE + INT_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
// static public long onArrayReadAccessStrongIso( long[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = LONG_ARR_BASE + LONG_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
// static public float onArrayReadAccessStrongIso( float[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = FLOAT_ARR_BASE + FLOAT_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
// static public double onArrayReadAccessStrongIso( double[] arr, int index, ArrayReadFieldAccess objArr, Context context) {
// int address = DOUBLE_ARR_BASE + DOUBLE_ARR_SCALE*index;
// context.beforeReadAccess(arr, address);
// return context.onReadAccess(arr, arr[index], address);
// }
static public Object onArrayReadAccessStrongIso( Object[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = OBJECT_ARR_BASE + OBJECT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public byte onArrayReadAccessStrongIso( byte[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = BYTE_ARR_BASE + BYTE_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public char onArrayReadAccessStrongIso( char[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = CHAR_ARR_BASE + CHAR_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public short onArrayReadAccessStrongIso( short[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = SHORT_ARR_BASE + SHORT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public int onArrayReadAccessStrongIso( int[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = INT_ARR_BASE + INT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public long onArrayReadAccessStrongIso( long[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = LONG_ARR_BASE + LONG_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public float onArrayReadAccessStrongIso( float[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = FLOAT_ARR_BASE + FLOAT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public double onArrayReadAccessStrongIso( double[] arr, int index, long objArrAdd, Context context) {
System.out.println("ERROR ARRAYS NOT SUPPORTED");
int address = DOUBLE_ARR_BASE + DOUBLE_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public Object onArrayReadAccess( Object[] arr, int index, Context context) {
int address = OBJECT_ARR_BASE + OBJECT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public byte onArrayReadAccess( byte[] arr, int index, Context context) {
int address = BYTE_ARR_BASE + BYTE_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public char onArrayReadAccess( char[] arr, int index, Context context) {
int address = CHAR_ARR_BASE + CHAR_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public short onArrayReadAccess( short[] arr, int index, Context context) {
int address = SHORT_ARR_BASE + SHORT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public int onArrayReadAccess( int[] arr, int index, Context context) {
int address = INT_ARR_BASE + INT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public long onArrayReadAccess( long[] arr, int index, Context context) {
int address = LONG_ARR_BASE + LONG_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public float onArrayReadAccess( float[] arr, int index, Context context) {
int address = FLOAT_ARR_BASE + FLOAT_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public double onArrayReadAccess( double[] arr, int index, Context context) {
int address = DOUBLE_ARR_BASE + DOUBLE_ARR_SCALE*index;
context.beforeReadAccess(arr, address);
return context.onReadAccess(arr, arr[index], address);
}
static public <T> void onArrayWriteAccess( T[] arr, int index, T value, Context context) {
T t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, OBJECT_ARR_BASE + OBJECT_ARR_SCALE*index);
}
static public void onArrayWriteAccess( byte[] arr, int index, byte value, Context context) {
byte t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, BYTE_ARR_BASE + BYTE_ARR_SCALE*index);
}
static public void onArrayWriteAccess( char[] arr, int index, char value, Context context) {
char t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, CHAR_ARR_BASE + CHAR_ARR_SCALE*index);
}
static public void onArrayWriteAccess( short[] arr, int index, short value, Context context) {
short t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, SHORT_ARR_BASE + SHORT_ARR_SCALE*index);
}
static public void onArrayWriteAccess( int[] arr, int index, int value, Context context) {
int t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, INT_ARR_BASE + INT_ARR_SCALE*index);
}
static public void onArrayWriteAccess( long[] arr, int index, long value, Context context) {
long t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, LONG_ARR_BASE + LONG_ARR_SCALE*index);
}
static public void onArrayWriteAccess( float[] arr, int index, float value, Context context) {
float t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, FLOAT_ARR_BASE + FLOAT_ARR_SCALE*index);
}
static public void onArrayWriteAccess( double[] arr, int index, double value, Context context) {
double t = arr[index]; // dummy access just to check the index in range
context.onWriteAccess(arr, value, DOUBLE_ARR_BASE + DOUBLE_ARR_SCALE*index);
}
}