package org.deuce.transaction.lsa.field;
import org.deuce.reflection.UnsafeHolder;
import org.deuce.transform.Exclude;
import sun.misc.Unsafe;
/**
* @author Pascal Felber
*/
@Exclude
public class Field {
@Exclude
static public enum Type {
BYTE, BOOLEAN, CHAR, SHORT, INT, LONG, FLOAT, DOUBLE, OBJECT
}
static public Object getValue(Object reference, long field, Type type) {
Unsafe unsafe = UnsafeHolder.getUnsafe();
switch (type) {
case BYTE:
return unsafe.getByte(reference, field);
case BOOLEAN:
return unsafe.getBoolean(reference, field);
case CHAR:
return unsafe.getChar(reference, field);
case SHORT:
return unsafe.getShort(reference, field);
case INT:
return unsafe.getInt(reference, field);
case LONG:
return unsafe.getLong(reference, field);
case FLOAT:
return unsafe.getFloat(reference, field);
case DOUBLE:
return unsafe.getDouble(reference, field);
case OBJECT:
return unsafe.getObject(reference, field);
}
return null;
}
static public void putValue(Object reference, long field, Object value, Type type) {
Unsafe unsafe = UnsafeHolder.getUnsafe();
switch (type) {
case BYTE:
unsafe.putByte(reference, field, (Byte) value);
break;
case BOOLEAN:
unsafe.putBoolean(reference, field, (Boolean) value);
break;
case CHAR:
unsafe.putChar(reference, field, (Character) value);
break;
case SHORT:
unsafe.putShort(reference, field, (Short) value);
break;
case INT:
unsafe.putInt(reference, field, (Integer) value);
break;
case LONG:
unsafe.putLong(reference, field, (Long) value);
break;
case FLOAT:
unsafe.putFloat(reference, field, (Float) value);
break;
case DOUBLE:
unsafe.putDouble(reference, field, (Double) value);
break;
case OBJECT:
unsafe.putObject(reference, field, value);
break;
}
}
}