[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