Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.jruby.ext.ffi.jffi;
  
Invokes a native function using InvocationBuffer methods.
 
 final class BufferNativeInvoker extends NativeInvoker {
     private final com.kenai.jffi.Function function;
     private final FunctionInvoker functionInvoker;
     private final ParameterMarshaller[] parameterMarshallers;
     private final boolean needsInvocationSession;
     private final int postInvokeCount;
     private final int referenceCount;
     private final HeapInvocationBuffer dummyBuffer;
     
     
     BufferNativeInvoker(RubyModule implementationClasscom.kenai.jffi.Function functionSignature signature,
             FunctionInvoker functionInvoker,
             ParameterMarshaller[] parameterMarshallers) {
         super(implementationClassfunctionsignature);
         this. = function;
         this. = functionInvoker;
         this. = parameterMarshallers.clone();
         
         int piCount = 0;
         int refCount = 0;
         for (ParameterMarshaller m : parameterMarshallers) {
             if (m.requiresPostInvoke()) {
                 ++piCount;
             }
 
             if (m.requiresReference()) {
                 ++refCount;
             }
         }
         this. = piCount;
         this. = refCount;
         this. = piCount > 0 || refCount > 0;
         this. = new HeapInvocationBuffer(function);
     }
     
     
     public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name) {
         return .invoke(context);
     }
     
     public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString nameIRubyObject arg1) {
         HeapInvocationBuffer buffer = new HeapInvocationBuffer();
         
         if () {
             Invocation invocation = new Invocation(context);
             try {
                 [0].marshal(invocationbufferarg1);
                 
                 return .invoke(contextbuffer);
             
             } finally {
                 invocation.finish();
             }
         
         } else {
             [0].marshal(contextbufferarg1);
             
             return .invoke(contextbuffer);
         }
     }
     
     public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                             IRubyObject arg1IRubyObject arg2) {
         HeapInvocationBuffer buffer = new HeapInvocationBuffer();
         if () {
             Invocation invocation = new Invocation(context);
             try {
                 [0].marshal(invocationbufferarg1);
                 [1].marshal(invocationbufferarg2);
             
                 return .invoke(contextbuffer);
             
             } finally {
                 invocation.finish();
             }
         
         } else {
             [0].marshal(contextbufferarg1);
             [1].marshal(contextbufferarg2);
             
             return .invoke(contextbuffer);
         }
     }
     
     public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString name,
                             IRubyObject arg1IRubyObject arg2IRubyObject arg3) {
         HeapInvocationBuffer buffer = new HeapInvocationBuffer();
         if () {
            Invocation invocation = new Invocation(context);
            try {
                [0].marshal(invocationbufferarg1);
                [1].marshal(invocationbufferarg2);
                [2].marshal(invocationbufferarg3);
                
                return .invoke(contextbuffer);
            } finally {
                invocation.finish();
            }
        
        } else {
            [0].marshal(contextbufferarg1);
            [1].marshal(contextbufferarg2);
            [2].marshal(contextbufferarg3);
        
            return .invoke(contextbuffer);
        }
    }
    public IRubyObject call(ThreadContext contextIRubyObject selfRubyModule klazzString nameIRubyObject[] args) {
        
        HeapInvocationBuffer buffer = new HeapInvocationBuffer();
        if () {
            Invocation invocation = new Invocation(context);
            try {
                for (int i = 0; i < args.length; ++i) {
                    [i].marshal(invocationbufferargs[i]);
                }
                return .invoke(contextbuffer);
            
            } finally {
                invocation.finish();
            }
        
        } else {
            for (int i = 0; i < args.length; ++i) {
                [i].marshal(contextbufferargs[i]);
            }
            return .invoke(contextbuffer);
        }
    }
    
New to GrepCode? Check out our FAQ X