PointerParameterStrategy.java
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();
    }
}