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