jamie@133
|
1
|
jamie@134
|
2 %include "../xtract.i"
|
jamie@133
|
3 %include "arrays_java.i"
|
jamie@134
|
4
|
jamie@134
|
5 /*
|
jamie@134
|
6 %{
|
jamie@134
|
7 int mean(const float *data, const int N, void *in, float *result) {
|
jamie@134
|
8 return xtract_mean(data, N, in, result);
|
jamie@134
|
9 }
|
jamie@134
|
10 %}
|
jamie@134
|
11 */
|
jamie@134
|
12 %apply float[] {const float *data};
|
jamie@134
|
13 /*%apply void *in {const void *argv}; */
|
jamie@134
|
14 %apply float *OUTPUT { float *result };
|
jamie@134
|
15 %typemap(in,numinputs=0) JNIEnv *env "$1 = jenv;"
|
jamie@134
|
16
|
jamie@134
|
17 %javamethodmodifiers arr2voidf "private";
|
jamie@134
|
18 %javamethodmodifiers arr2voidi "private";
|
jamie@134
|
19 %javamethodmodifiers freearrf "private";
|
jamie@134
|
20 %javamethodmodifiers freearri "private";
|
jamie@134
|
21 %inline %{
|
jamie@134
|
22 jlong arr2voidf(JNIEnv *env, jfloatArray arr) {
|
jamie@134
|
23 void *ptr = (*env)->GetFloatArrayElements(env, arr, NULL);
|
jamie@134
|
24 return (intptr_t)ptr;
|
jamie@134
|
25 }
|
jamie@134
|
26
|
jamie@134
|
27 void freearrf(JNIEnv *env, jfloatArray arr, jlong map) {
|
jamie@134
|
28 void *ptr = 0;
|
jamie@134
|
29 ptr = *(void **)↦
|
jamie@134
|
30 (*env)->ReleaseFloatArrayElements(env, arr, ptr, JNI_ABORT);
|
jamie@134
|
31 }
|
jamie@134
|
32
|
jamie@134
|
33 jlong arr2voidi(JNIEnv *env, jintArray arr) {
|
jamie@134
|
34 void *ptr = (*env)->GetIntArrayElements(env, arr, NULL);
|
jamie@134
|
35 return (intptr_t)ptr;
|
jamie@134
|
36 }
|
jamie@134
|
37
|
jamie@134
|
38 void freearri(JNIEnv *env, jintArray arr, jlong map) {
|
jamie@134
|
39 void *ptr = 0;
|
jamie@134
|
40 ptr = *(void **)↦
|
jamie@134
|
41 (*env)->ReleaseIntArrayElements(env, arr, ptr, JNI_ABORT);
|
jamie@134
|
42 }
|
jamie@134
|
43 %}
|
jamie@134
|
44
|
jamie@134
|
45
|
jamie@134
|
46 %pragma(java) modulecode=%{
|
jamie@134
|
47 private static long arrPtr(Object o) {
|
jamie@134
|
48 if (o instanceof float[]) {
|
jamie@134
|
49 return arr2voidf((float[])o);
|
jamie@134
|
50 }
|
jamie@134
|
51 else if (o instanceof int[]) {
|
jamie@134
|
52 return arr2voidi((int[])o);
|
jamie@134
|
53 }
|
jamie@134
|
54 else if (o == null) {
|
jamie@134
|
55 return 0L;
|
jamie@134
|
56 }
|
jamie@134
|
57 throw new IllegalArgumentException();
|
jamie@134
|
58 }
|
jamie@134
|
59
|
jamie@134
|
60 private static void freeArrPtr(Object o, long addr) {
|
jamie@134
|
61 if (o instanceof float[]) {
|
jamie@134
|
62 freearrf((float[])o, addr);
|
jamie@134
|
63 return;
|
jamie@134
|
64 }
|
jamie@134
|
65 else if (o instanceof int[]) {
|
jamie@134
|
66 freearri((int[])o, addr);
|
jamie@134
|
67 return;
|
jamie@134
|
68 }
|
jamie@134
|
69 else if (o == null) {
|
jamie@134
|
70 return;
|
jamie@134
|
71 }
|
jamie@134
|
72 throw new IllegalArgumentException();
|
jamie@134
|
73 }
|
jamie@134
|
74 %}
|
jamie@134
|
75
|
jamie@134
|
76 %typemap(jstype) void *argv "Object"
|
jamie@134
|
77 %typemap(javain,pre=" long tmp$javainput = arrPtr($javainput);",post=" freeArrPtr($javainput, tmp$javainput);") void *argv "tmp$javainput"
|
jamie@134
|
78
|
jamie@134
|
79 /*
|
jamie@134
|
80 int xtract_mean(const float *data, const int N, void *argv, float *result);
|
jamie@134
|
81 int xtract_variance(const float *data, const int N, void *argv, float *result);
|
jamie@134
|
82 */
|
jamie@134
|
83 %include xtract_redeclare.i
|
jamie@134
|
84
|
jamie@134
|
85 /*%{
|
jamie@134
|
86 #include "xtract/xtract_scalar.h"
|
jamie@134
|
87 %}*/
|