mirror of
https://github.com/corda/corda.git
synced 2025-06-13 04:38:19 +00:00
sketch of singleton support
This commit is contained in:
@ -47,176 +47,108 @@ public class Field<T> extends AccessibleObject {
|
||||
}
|
||||
|
||||
public Object get(Object instance) throws IllegalAccessException {
|
||||
Object target;
|
||||
if ((flags & Modifier.STATIC) != 0) {
|
||||
Object v = class_.staticTable()[offset];
|
||||
switch (code) {
|
||||
case ByteField:
|
||||
return Byte.valueOf
|
||||
((byte) (v == null ? 0 : ((Integer) v).intValue()));
|
||||
|
||||
case BooleanField:
|
||||
return Boolean.valueOf
|
||||
(v == null ? false : ((Integer) v) != 0);
|
||||
|
||||
case CharField:
|
||||
return Character.valueOf
|
||||
((char) (v == null ? 0 : ((Integer) v).intValue()));
|
||||
|
||||
case ShortField:
|
||||
return Short.valueOf
|
||||
((short) (v == null ? 0 : ((Integer) v).intValue()));
|
||||
|
||||
case FloatField:
|
||||
return Float.valueOf
|
||||
(Float.intBitsToFloat(v == null ? 0 : (Integer) v));
|
||||
|
||||
case DoubleField:
|
||||
return Double.valueOf
|
||||
(Double.longBitsToDouble(v == null ? 0 : (Long) v));
|
||||
|
||||
case IntField:
|
||||
case LongField:
|
||||
case ObjectField:
|
||||
return v;
|
||||
|
||||
default:
|
||||
throw new Error();
|
||||
}
|
||||
target = class_.staticTable();
|
||||
} else if (class_.isInstance(instance)) {
|
||||
switch (code) {
|
||||
case ByteField:
|
||||
return Byte.valueOf((byte) getPrimitive(instance, code, offset));
|
||||
|
||||
case BooleanField:
|
||||
return Boolean.valueOf(getPrimitive(instance, code, offset) != 0);
|
||||
|
||||
case CharField:
|
||||
return Character.valueOf((char) getPrimitive(instance, code, offset));
|
||||
|
||||
case ShortField:
|
||||
return Short.valueOf((short) getPrimitive(instance, code, offset));
|
||||
|
||||
case IntField:
|
||||
return Integer.valueOf((int) getPrimitive(instance, code, offset));
|
||||
|
||||
case LongField:
|
||||
return Long.valueOf((int) getPrimitive(instance, code, offset));
|
||||
|
||||
case FloatField:
|
||||
return Float.valueOf
|
||||
(Float.intBitsToFloat((int) getPrimitive(instance, code, offset)));
|
||||
|
||||
case DoubleField:
|
||||
return Double.valueOf
|
||||
(Double.longBitsToDouble(getPrimitive(instance, code, offset)));
|
||||
|
||||
case ObjectField:
|
||||
return getObject(instance, offset);
|
||||
|
||||
default:
|
||||
throw new Error();
|
||||
}
|
||||
target = instance;
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
switch (code) {
|
||||
case ByteField:
|
||||
return Byte.valueOf((byte) getPrimitive(target, code, offset));
|
||||
|
||||
case BooleanField:
|
||||
return Boolean.valueOf(getPrimitive(target, code, offset) != 0);
|
||||
|
||||
case CharField:
|
||||
return Character.valueOf((char) getPrimitive(target, code, offset));
|
||||
|
||||
case ShortField:
|
||||
return Short.valueOf((short) getPrimitive(target, code, offset));
|
||||
|
||||
case IntField:
|
||||
return Integer.valueOf((int) getPrimitive(target, code, offset));
|
||||
|
||||
case LongField:
|
||||
return Long.valueOf((int) getPrimitive(target, code, offset));
|
||||
|
||||
case FloatField:
|
||||
return Float.valueOf
|
||||
(Float.intBitsToFloat((int) getPrimitive(target, code, offset)));
|
||||
|
||||
case DoubleField:
|
||||
return Double.valueOf
|
||||
(Double.longBitsToDouble(getPrimitive(target, code, offset)));
|
||||
|
||||
case ObjectField:
|
||||
return getObject(instance, offset);
|
||||
|
||||
default:
|
||||
throw new Error();
|
||||
}
|
||||
}
|
||||
|
||||
public void set(Object instance, Object value)
|
||||
throws IllegalAccessException
|
||||
{
|
||||
Object target;
|
||||
if ((flags & Modifier.STATIC) != 0) {
|
||||
Object[] a = class_.staticTable();
|
||||
switch (code) {
|
||||
case ByteField:
|
||||
a[offset] = Integer.valueOf((Byte) value);
|
||||
break;
|
||||
|
||||
case BooleanField:
|
||||
a[offset] = Integer.valueOf(((Boolean) value) ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CharField:
|
||||
a[offset] = Integer.valueOf((Character) value);
|
||||
break;
|
||||
|
||||
case ShortField:
|
||||
a[offset] = Integer.valueOf((Short) value);
|
||||
break;
|
||||
|
||||
case FloatField:
|
||||
a[offset] = Integer.valueOf(Float.floatToRawIntBits((Float) value));
|
||||
break;
|
||||
|
||||
case DoubleField:
|
||||
a[offset] = Long.valueOf(Double.doubleToRawLongBits((Double) value));
|
||||
break;
|
||||
|
||||
case IntField:
|
||||
case LongField:
|
||||
a[offset] = value;
|
||||
break;
|
||||
|
||||
case ObjectField:
|
||||
if (getType().isInstance(value)) {
|
||||
a[offset] = value;
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Error();
|
||||
}
|
||||
target = class_.staticTable();
|
||||
} else if (class_.isInstance(instance)) {
|
||||
switch (code) {
|
||||
case ByteField:
|
||||
setPrimitive(instance, code, offset, (Byte) value);
|
||||
break;
|
||||
|
||||
case BooleanField:
|
||||
setPrimitive(instance, code, offset, ((Boolean) value) ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CharField:
|
||||
setPrimitive(instance, code, offset, (Character) value);
|
||||
break;
|
||||
|
||||
case ShortField:
|
||||
setPrimitive(instance, code, offset, (Short) value);
|
||||
break;
|
||||
|
||||
case IntField:
|
||||
setPrimitive(instance, code, offset, (Integer) value);
|
||||
break;
|
||||
|
||||
case LongField:
|
||||
setPrimitive(instance, code, offset, (Long) value);
|
||||
break;
|
||||
|
||||
case FloatField:
|
||||
setPrimitive(instance, code, offset,
|
||||
Float.floatToRawIntBits((Float) value));
|
||||
break;
|
||||
|
||||
case DoubleField:
|
||||
setPrimitive(instance, code, offset,
|
||||
Double.doubleToRawLongBits((Double) value));
|
||||
break;
|
||||
|
||||
case ObjectField:
|
||||
if (getType().isInstance(value)) {
|
||||
setObject(instance, offset, value);
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Error();
|
||||
}
|
||||
target = instance;
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
|
||||
switch (code) {
|
||||
case ByteField:
|
||||
setPrimitive(target, code, offset, (Byte) value);
|
||||
break;
|
||||
|
||||
case BooleanField:
|
||||
setPrimitive(target, code, offset, ((Boolean) value) ? 1 : 0);
|
||||
break;
|
||||
|
||||
case CharField:
|
||||
setPrimitive(target, code, offset, (Character) value);
|
||||
break;
|
||||
|
||||
case ShortField:
|
||||
setPrimitive(target, code, offset, (Short) value);
|
||||
break;
|
||||
|
||||
case IntField:
|
||||
setPrimitive(target, code, offset, (Integer) value);
|
||||
break;
|
||||
|
||||
case LongField:
|
||||
setPrimitive(target, code, offset, (Long) value);
|
||||
break;
|
||||
|
||||
case FloatField:
|
||||
setPrimitive(target, code, offset,
|
||||
Float.floatToRawIntBits((Float) value));
|
||||
break;
|
||||
|
||||
case DoubleField:
|
||||
setPrimitive(target, code, offset,
|
||||
Double.doubleToRawLongBits((Double) value));
|
||||
break;
|
||||
|
||||
case ObjectField:
|
||||
if (getType().isInstance(value)) {
|
||||
setObject(target, offset, value);
|
||||
} else {
|
||||
throw new IllegalArgumentException();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new Error();
|
||||
}
|
||||
}
|
||||
|
||||
private static native long getPrimitive
|
||||
|
Reference in New Issue
Block a user