[jffi-next] 45/49: Expose invokeNO3rN fast-path for heap objects.

Tim Potter tpot-guest at moszumanska.debian.org
Wed Mar 4 04:51:16 UTC 2015


This is an automated email from the git hooks/post-receive script.

tpot-guest pushed a commit to annotated tag upstream/1.0.10
in repository jffi-next.

commit f609f5d5758b408a393ed1cf423865d38b2179ac
Author: Wayne Meissner <wmeissner at gmail.com>
Date:   Sun Jul 3 22:04:33 2011 +1000

    Expose invokeNO3rN fast-path for heap objects.
---
 src/com/kenai/jffi/HeapObjectParameterInvoker.java | 114 ++++++++++++++++++++-
 src/com/kenai/jffi/Invoker.java                    |   8 ++
 .../kenai/jffi/NativeObjectParameterInvoker.java   |   2 +-
 src/com/kenai/jffi/ObjectParameterInvoker.java     |  26 +++++
 4 files changed, 147 insertions(+), 3 deletions(-)

diff --git a/src/com/kenai/jffi/HeapObjectParameterInvoker.java b/src/com/kenai/jffi/HeapObjectParameterInvoker.java
index be37604..5d02fe8 100644
--- a/src/com/kenai/jffi/HeapObjectParameterInvoker.java
+++ b/src/com/kenai/jffi/HeapObjectParameterInvoker.java
@@ -3,9 +3,13 @@ package com.kenai.jffi;
 /**
  *
  */
-public class HeapObjectParameterInvoker extends ObjectParameterInvoker {
+final class HeapObjectParameterInvoker extends ObjectParameterInvoker {
     private final Foreign foreign = Foreign.getInstance();
 
+    public final boolean isNative() {
+        return false;
+    }
+
     private static int encode(byte[] paramBuffer, int off, Type type, long n) {
         HeapInvocationBuffer.Encoder encoder = HeapInvocationBuffer.encoder;
         if (type.size() <= 4) {
@@ -87,6 +91,32 @@ public class HeapObjectParameterInvoker extends ObjectParameterInvoker {
                 o1, o1flags.asObjectInfo(), o1off, o1len,
                 o2, o2flags.asObjectInfo(), o2off, o2len);
     }
+    
+    public long invokeN3O3rN(Function function, 
+        long n1, long n2, long n3, 
+        Object o1, int o1off, int o1len, ObjectParameterInfo o1flags, 
+        Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+        Object o3, int o3off, int o3len, ObjectParameterInfo o3flags) {
+        
+        HeapInvocationBuffer.Encoder encoder = HeapInvocationBuffer.encoder;
+        byte[] paramBuffer = new byte[encoder.getBufferSize(function)];
+        
+        int poff = 0;
+        poff = encode(paramBuffer, poff, function.getParameterType(0), n1);
+        poff = encode(paramBuffer, poff, function.getParameterType(1), n2);
+        poff = encode(paramBuffer, poff, function.getParameterType(2), n3);
+        
+        int[] objInfo = { 
+            o1flags.asObjectInfo(), o1off, o1len,
+            o2flags.asObjectInfo(), o2off, o2len,
+            o3flags.asObjectInfo(), o3off, o3len 
+        };
+        Object[] objects = { o1, o2, o3 };
+        
+        return foreign.invokeArrayWithObjectsInt64(function.getContextAddress(), 
+                paramBuffer, 3, objInfo, objects);
+    }
+
 
     public long invokeN4O1rN(Function function, 
         long n1, long n2, long n3, long n4,
@@ -127,6 +157,33 @@ public class HeapObjectParameterInvoker extends ObjectParameterInvoker {
                 o1, o1flags.asObjectInfo(), o1off, o1len,
                 o2, o2flags.asObjectInfo(), o2off, o2len);
     }
+    
+    public long invokeN4O3rN(Function function, 
+        long n1, long n2, long n3, long n4,
+        Object o1, int o1off, int o1len, ObjectParameterInfo o1flags, 
+        Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+        Object o3, int o3off, int o3len, ObjectParameterInfo o3flags) {
+        
+        HeapInvocationBuffer.Encoder encoder = HeapInvocationBuffer.encoder;
+        byte[] paramBuffer = new byte[encoder.getBufferSize(function)];
+        
+        int poff = 0;
+        poff = encode(paramBuffer, poff, function.getParameterType(0), n1);
+        poff = encode(paramBuffer, poff, function.getParameterType(1), n2);
+        poff = encode(paramBuffer, poff, function.getParameterType(2), n3);
+        poff = encode(paramBuffer, poff, function.getParameterType(3), n4);
+
+        int[] objInfo = { 
+            o1flags.asObjectInfo(), o1off, o1len,
+            o2flags.asObjectInfo(), o2off, o2len,
+            o3flags.asObjectInfo(), o3off, o3len 
+        };
+        Object[] objects = { o1, o2, o3 };
+        
+        return foreign.invokeArrayWithObjectsInt64(function.getContextAddress(),
+                paramBuffer, 3, objInfo, objects);
+    }
+
 
     @Override
     public long invokeN5O1rN(Function function, 
@@ -170,6 +227,33 @@ public class HeapObjectParameterInvoker extends ObjectParameterInvoker {
                 o1, o1flags.asObjectInfo(), o1off, o1len,
                 o2, o2flags.asObjectInfo(), o2off, o2len);
     }
+    
+    public long invokeN5O3rN(Function function, 
+        long n1, long n2, long n3, long n4, long n5,
+        Object o1, int o1off, int o1len, ObjectParameterInfo o1flags, 
+        Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+        Object o3, int o3off, int o3len, ObjectParameterInfo o3flags) {
+        
+        HeapInvocationBuffer.Encoder encoder = HeapInvocationBuffer.encoder;
+        byte[] paramBuffer = new byte[encoder.getBufferSize(function)];
+        
+        int poff = 0;
+        poff = encode(paramBuffer, poff, function.getParameterType(0), n1);
+        poff = encode(paramBuffer, poff, function.getParameterType(1), n2);
+        poff = encode(paramBuffer, poff, function.getParameterType(2), n3);
+        poff = encode(paramBuffer, poff, function.getParameterType(3), n4);
+        poff = encode(paramBuffer, poff, function.getParameterType(4), n5);
+
+        int[] objInfo = { 
+            o1flags.asObjectInfo(), o1off, o1len,
+            o2flags.asObjectInfo(), o2off, o2len,
+            o3flags.asObjectInfo(), o3off, o3len 
+        };
+        Object[] objects = { o1, o2, o3 };
+        
+        return foreign.invokeArrayWithObjectsInt64(function.getContextAddress(),
+                paramBuffer, 3, objInfo, objects);
+    }
 
     @Override
     public long invokeN6O1rN(Function function, 
@@ -215,6 +299,32 @@ public class HeapObjectParameterInvoker extends ObjectParameterInvoker {
                 o2, o2flags.asObjectInfo(), o2off, o2len);
     }
     
-    
+    public long invokeN6O3rN(Function function, 
+        long n1, long n2, long n3, long n4, long n5, long n6,
+        Object o1, int o1off, int o1len, ObjectParameterInfo o1flags, 
+        Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+        Object o3, int o3off, int o3len, ObjectParameterInfo o3flags) {
+        
+        HeapInvocationBuffer.Encoder encoder = HeapInvocationBuffer.encoder;
+        byte[] paramBuffer = new byte[encoder.getBufferSize(function)];
+        
+        int poff = 0;
+        poff = encode(paramBuffer, poff, function.getParameterType(0), n1);
+        poff = encode(paramBuffer, poff, function.getParameterType(1), n2);
+        poff = encode(paramBuffer, poff, function.getParameterType(2), n3);
+        poff = encode(paramBuffer, poff, function.getParameterType(3), n4);
+        poff = encode(paramBuffer, poff, function.getParameterType(4), n5);
+        poff = encode(paramBuffer, poff, function.getParameterType(5), n6);
+
+        int[] objInfo = { 
+            o1flags.asObjectInfo(), o1off, o1len,
+            o2flags.asObjectInfo(), o2off, o2len,
+            o3flags.asObjectInfo(), o3off, o3len 
+        };
+        Object[] objects = { o1, o2, o3 };
+        
+        return foreign.invokeArrayWithObjectsInt64(function.getContextAddress(),
+                paramBuffer, 3, objInfo, objects);
+    }
 
 }
diff --git a/src/com/kenai/jffi/Invoker.java b/src/com/kenai/jffi/Invoker.java
index 2740c05..8060e44 100644
--- a/src/com/kenai/jffi/Invoker.java
+++ b/src/com/kenai/jffi/Invoker.java
@@ -66,6 +66,14 @@ public abstract class Invoker {
     private Invoker() {}
 
     /**
+     * Gets the fast-path object parameter invoker.
+     * 
+     * @return An instance of {@link ObjectParameterInvoker}
+     */
+    public final ObjectParameterInvoker getObjectParameterInvoker() {
+        return objectParameterInvoker;
+    }
+    /**
      * Invokes a function with no arguments, and returns a 32 bit integer.
      *
      * @param function The <tt>Function</tt> to invoke.
diff --git a/src/com/kenai/jffi/NativeObjectParameterInvoker.java b/src/com/kenai/jffi/NativeObjectParameterInvoker.java
index fe2fa3b..124c642 100644
--- a/src/com/kenai/jffi/NativeObjectParameterInvoker.java
+++ b/src/com/kenai/jffi/NativeObjectParameterInvoker.java
@@ -4,7 +4,7 @@ package com.kenai.jffi;
 /**
  *
  */
-public final class NativeObjectParameterInvoker extends ObjectParameterInvoker {
+final class NativeObjectParameterInvoker extends ObjectParameterInvoker {
     private final Foreign foreign = Foreign.getInstance();
 
     public final boolean isNative() {
diff --git a/src/com/kenai/jffi/ObjectParameterInvoker.java b/src/com/kenai/jffi/ObjectParameterInvoker.java
index 51db3c0..8cefa63 100644
--- a/src/com/kenai/jffi/ObjectParameterInvoker.java
+++ b/src/com/kenai/jffi/ObjectParameterInvoker.java
@@ -19,6 +19,8 @@ abstract public class ObjectParameterInvoker {
         return new HeapObjectParameterInvoker();
     }
     
+    abstract public boolean isNative();
+    
     abstract public long invokeN1O1rN(Function function, 
             long n1, 
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags);
@@ -41,6 +43,12 @@ abstract public class ObjectParameterInvoker {
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
             Object o2, int o2off, int o2len, ObjectParameterInfo o2flags);
     
+    abstract public long invokeN3O3rN(Function function, 
+            long n1, long n2, long n3,
+            Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
+            Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+            Object o3, int o3off, int o3len, ObjectParameterInfo o3flags);
+    
     abstract public long invokeN4O1rN(Function function, 
             long n1, long n2, long n3, long n4,
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags);
@@ -50,6 +58,12 @@ abstract public class ObjectParameterInvoker {
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
             Object o2, int o2off, int o2len, ObjectParameterInfo o2flags);
     
+    abstract public long invokeN4O3rN(Function function, 
+            long n1, long n2, long n3, long n4,
+            Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
+            Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+            Object o3, int o3off, int o3len, ObjectParameterInfo o3flags);
+    
     abstract public long invokeN5O1rN(Function function, 
             long n1, long n2, long n3, long n4, long n5,
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags);
@@ -59,6 +73,12 @@ abstract public class ObjectParameterInvoker {
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
             Object o2, int o2off, int o2len, ObjectParameterInfo o2flags);
     
+    abstract public long invokeN5O3rN(Function function, 
+            long n1, long n2, long n3, long n4, long n5,
+            Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
+            Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+            Object o3, int o3off, int o3len, ObjectParameterInfo o3flags);
+    
     abstract public long invokeN6O1rN(Function function, 
             long n1, long n2, long n3, long n4, long n5, long n6,
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags);
@@ -67,4 +87,10 @@ abstract public class ObjectParameterInvoker {
             long n1, long n2, long n3, long n4, long n5, long n6,
             Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
             Object o2, int o2off, int o2len, ObjectParameterInfo o2flags);
+    
+    abstract public long invokeN6O3rN(Function function, 
+            long n1, long n2, long n3, long n4, long n5, long n6,
+            Object o1, int o1off, int o1len, ObjectParameterInfo o1flags,
+            Object o2, int o2off, int o2len, ObjectParameterInfo o2flags,
+            Object o3, int o3off, int o3len, ObjectParameterInfo o3flags);
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/jffi-next.git



More information about the pkg-java-commits mailing list