aboutsummaryrefslogtreecommitdiff
path: root/swig/java/jxtract.i
diff options
context:
space:
mode:
Diffstat (limited to 'swig/java/jxtract.i')
-rw-r--r--swig/java/jxtract.i86
1 files changed, 85 insertions, 1 deletions
diff --git a/swig/java/jxtract.i b/swig/java/jxtract.i
index 14b9727..6918436 100644
--- a/swig/java/jxtract.i
+++ b/swig/java/jxtract.i
@@ -1,3 +1,87 @@
-%include "arrays_java.i"
%include "../xtract.i"
+%include "arrays_java.i"
+
+/*
+%{
+int mean(const float *data, const int N, void *in, float *result) {
+ return xtract_mean(data, N, in, result);
+}
+%}
+*/
+%apply float[] {const float *data};
+/*%apply void *in {const void *argv}; */
+%apply float *OUTPUT { float *result };
+%typemap(in,numinputs=0) JNIEnv *env "$1 = jenv;"
+
+%javamethodmodifiers arr2voidf "private";
+%javamethodmodifiers arr2voidi "private";
+%javamethodmodifiers freearrf "private";
+%javamethodmodifiers freearri "private";
+%inline %{
+jlong arr2voidf(JNIEnv *env, jfloatArray arr) {
+ void *ptr = (*env)->GetFloatArrayElements(env, arr, NULL);
+ return (intptr_t)ptr;
+}
+
+void freearrf(JNIEnv *env, jfloatArray arr, jlong map) {
+ void *ptr = 0;
+ ptr = *(void **)↦
+ (*env)->ReleaseFloatArrayElements(env, arr, ptr, JNI_ABORT);
+}
+
+jlong arr2voidi(JNIEnv *env, jintArray arr) {
+ void *ptr = (*env)->GetIntArrayElements(env, arr, NULL);
+ return (intptr_t)ptr;
+}
+
+void freearri(JNIEnv *env, jintArray arr, jlong map) {
+ void *ptr = 0;
+ ptr = *(void **)↦
+ (*env)->ReleaseIntArrayElements(env, arr, ptr, JNI_ABORT);
+}
+%}
+
+
+%pragma(java) modulecode=%{
+ private static long arrPtr(Object o) {
+ if (o instanceof float[]) {
+ return arr2voidf((float[])o);
+ }
+ else if (o instanceof int[]) {
+ return arr2voidi((int[])o);
+ }
+ else if (o == null) {
+ return 0L;
+ }
+ throw new IllegalArgumentException();
+ }
+
+ private static void freeArrPtr(Object o, long addr) {
+ if (o instanceof float[]) {
+ freearrf((float[])o, addr);
+ return;
+ }
+ else if (o instanceof int[]) {
+ freearri((int[])o, addr);
+ return;
+ }
+ else if (o == null) {
+ return;
+ }
+ throw new IllegalArgumentException();
+ }
+%}
+
+%typemap(jstype) void *argv "Object"
+%typemap(javain,pre=" long tmp$javainput = arrPtr($javainput);",post=" freeArrPtr($javainput, tmp$javainput);") void *argv "tmp$javainput"
+
+/*
+int xtract_mean(const float *data, const int N, void *argv, float *result);
+int xtract_variance(const float *data, const int N, void *argv, float *result);
+*/
+%include xtract_redeclare.i
+
+/*%{
+#include "xtract/xtract_scalar.h"
+%}*/