package org.jruby.ext.ffi.jffi;
import com.kenai.jffi.ObjectParameterStrategy;
import com.kenai.jffi.ObjectParameterType;
import org.jruby.ext.ffi.MemoryIO;
import org.jruby.runtime.builtin.IRubyObject;
abstract public class PointerParameterStrategy extends ObjectParameterStrategy {
private final boolean isReferenceRequired;
PointerParameterStrategy(boolean isDirect, boolean isReferenceRequired) {
super(isDirect);
this.isReferenceRequired = isReferenceRequired;
}
PointerParameterStrategy(boolean isDirect, boolean isReferenceRequired, ObjectParameterType objectType) {
super(isDirect, objectType);
this.isReferenceRequired = isReferenceRequired;
}
public final boolean isReferenceRequired() {
return isReferenceRequired;
}
public abstract MemoryIO getMemoryIO(Object parameter);
@Override
public long address(Object parameter) {
return getMemoryIO(parameter).address();
}
@Override
public Object object(Object parameter) {
return getMemoryIO(parameter).array();
}
@Override
public int offset(Object parameter) {
return getMemoryIO(parameter).arrayOffset();
}
@Override
public int length(Object parameter) {
return getMemoryIO(parameter).arrayLength();
}
}