package org.glassfish.pfl.dynamic.copyobject.impl;
import org.glassfish.pfl.basic.reflection.Bridge;
import org.glassfish.pfl.basic.reflection.BridgePermission;
import org.glassfish.pfl.dynamic.copyobject.spi.ReflectiveCopyException;
import java.security.Permission;
import java.util.Map;
public abstract class CodegenCopierBase implements ClassCopierOrdinaryImpl.ClassFieldCopier {
private static final Bridge bridge = Bridge.get();
private static final Permission getBridgePermission = new BridgePermission("getBridge");
private PipelineClassCopierFactory factory;
public CodegenCopierBase(PipelineClassCopierFactory factory) {
SecurityManager sman = System.getSecurityManager();
if (sman != null) {
sman.checkPermission(getBridgePermission);
}
this.factory = factory;
}
final protected void copyObject(Map<Object, Object> oldToNew,
long offset, Object src, Object dest) throws ReflectiveCopyException {
Object obj = bridge.getObject(src, offset);
Object result = null;
if (obj != null) {
ClassCopier copier = factory.getClassCopier(obj.getClass());
result = copier.copy(oldToNew, obj);
}
bridge.putObject(dest, offset, result);
}
final protected void copyByte(long offset, Object src, Object dest) {
bridge.putByte(dest, offset, bridge.getByte(src, offset));
}
final protected void copyChar(long offset, Object src, Object dest) {
bridge.putChar(dest, offset, bridge.getChar(src, offset));
}
final protected void copyShort(long offset, Object src, Object dest) {
bridge.putShort(dest, offset, bridge.getShort(src, offset));
}
final protected void copyInt(long offset, Object src, Object dest) {
bridge.putInt(dest, offset, bridge.getInt(src, offset));
}
final protected void copyLong(long offset, Object src, Object dest) {
bridge.putLong(dest, offset, bridge.getLong(src, offset));
}
final protected void copyFloat(long offset, Object src, Object dest) {
bridge.putFloat(dest, offset, bridge.getFloat(src, offset));
}
final protected void copyDouble(long offset, Object src, Object dest) {
bridge.putDouble(dest, offset, bridge.getDouble(src, offset));
}
final protected void copyBoolean(long offset, Object src, Object dest) {
bridge.putBoolean(dest, offset, bridge.getBoolean(src, offset));
}
};