rename __call__ to mf in cython.mf
[liba.git] / java / src / tf.c
blobc7ddabcd16622df2110fdc365b371703b685c51c
1 #include "a.h"
2 #include "a/tf.h"
3 #include "liba_tf.h"
5 #undef L
6 #define L Java_liba_tf
7 static struct
9 jmethodID _new;
10 jfieldID ctx;
11 jfieldID num;
12 jfieldID den;
13 jfieldID input;
14 jfieldID output;
15 } L = {NULL, NULL, NULL, NULL, NULL, NULL};
17 JNIEXPORT void JNICALL Java_liba_tf_clinit(JNIEnv *_env, jclass _cls)
19 jclass _nbb = (*_env)->FindClass(_env, "Ljava/nio/ByteBuffer;");
20 L._new = (*_env)->GetStaticMethodID(_env, _nbb, "allocateDirect", "(I)Ljava/nio/ByteBuffer;");
21 L.ctx = (*_env)->GetFieldID(_env, _cls, "ctx", "Ljava/nio/ByteBuffer;");
22 L.num = (*_env)->GetFieldID(_env, _cls, "num", "Ljava/nio/ByteBuffer;");
23 L.den = (*_env)->GetFieldID(_env, _cls, "den", "Ljava/nio/ByteBuffer;");
24 L.input = (*_env)->GetFieldID(_env, _cls, "input", "Ljava/nio/ByteBuffer;");
25 L.output = (*_env)->GetFieldID(_env, _cls, "output", "Ljava/nio/ByteBuffer;");
28 JNIEXPORT void JNICALL Java_liba_tf_init(JNIEnv *_env, jobject _obj, jdoubleArray num, jdoubleArray den)
30 jsize num_n = (*_env)->GetArrayLength(_env, num);
31 jsize den_n = (*_env)->GetArrayLength(_env, den);
33 jobject _ctx = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)sizeof(a_tf));
34 jobject _num = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)num_n * 8);
35 jobject _den = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)den_n * 8);
36 jobject _input = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)num_n * 8);
37 jobject _output = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)den_n * 8);
39 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
40 double *num_p = (double *)(*_env)->GetDirectBufferAddress(_env, _num);
41 double *den_p = (double *)(*_env)->GetDirectBufferAddress(_env, _den);
42 double *input = (double *)(*_env)->GetDirectBufferAddress(_env, _input);
43 double *output = (double *)(*_env)->GetDirectBufferAddress(_env, _output);
45 (*_env)->SetObjectField(_env, _obj, L.ctx, _ctx);
46 (*_env)->SetObjectField(_env, _obj, L.num, _num);
47 (*_env)->SetObjectField(_env, _obj, L.den, _den);
48 (*_env)->SetObjectField(_env, _obj, L.input, _input);
49 (*_env)->SetObjectField(_env, _obj, L.output, _output);
50 (*_env)->GetDoubleArrayRegion(_env, num, 0, num_n, num_p);
51 (*_env)->GetDoubleArrayRegion(_env, den, 0, den_n, den_p);
53 ctx->num_p = num_p;
54 ctx->den_p = den_p;
55 ctx->input = input;
56 ctx->output = output;
57 ctx->num_n = (unsigned int)num_n;
58 ctx->den_n = (unsigned int)den_n;
61 JNIEXPORT jobject JNICALL Java_liba_tf_num__(JNIEnv *_env, jobject _obj)
63 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
64 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
65 jobject num = (*_env)->NewDoubleArray(_env, (jsize)ctx->num_n);
66 (*_env)->SetDoubleArrayRegion(_env, num, 0, (jsize)ctx->num_n, ctx->num_p);
67 return num;
70 JNIEXPORT jobject JNICALL Java_liba_tf_num___3D(JNIEnv *_env, jobject _obj, jdoubleArray num)
72 union
74 double *p;
75 double const *q;
76 } u;
77 jsize num_n = (*_env)->GetArrayLength(_env, num);
78 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
79 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
80 if (num_n > (jsize)ctx->num_n)
82 jobject _num = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)num_n * 8);
83 jobject _input = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)num_n * 8);
84 double *num_p = (double *)(*_env)->GetDirectBufferAddress(_env, _num);
85 double *input = (double *)(*_env)->GetDirectBufferAddress(_env, _input);
86 (*_env)->SetObjectField(_env, _obj, L.num, _num);
87 (*_env)->SetObjectField(_env, _obj, L.input, _input);
88 ctx->num_n = (unsigned int)num_n;
89 ctx->num_p = num_p;
90 ctx->input = input;
92 u.q = ctx->num_p;
93 (*_env)->GetDoubleArrayRegion(_env, num, 0, num_n, u.p);
94 return _obj;
97 JNIEXPORT jobject JNICALL Java_liba_tf_input(JNIEnv *_env, jobject _obj)
99 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
100 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
101 jobject input = (*_env)->NewDoubleArray(_env, (jsize)ctx->num_n);
102 (*_env)->SetDoubleArrayRegion(_env, input, 0, (jsize)ctx->num_n, ctx->input);
103 return input;
106 JNIEXPORT jobject JNICALL Java_liba_tf_den__(JNIEnv *_env, jobject _obj)
108 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
109 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
110 jobject den = (*_env)->NewDoubleArray(_env, (jsize)ctx->den_n);
111 (*_env)->SetDoubleArrayRegion(_env, den, 0, (jsize)ctx->den_n, ctx->den_p);
112 return den;
115 JNIEXPORT jobject JNICALL Java_liba_tf_den___3D(JNIEnv *_env, jobject _obj, jdoubleArray den)
117 union
119 double *p;
120 double const *q;
121 } u;
122 jsize den_n = (*_env)->GetArrayLength(_env, den);
123 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
124 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
125 if (den_n > (jsize)ctx->den_n)
127 jobject _den = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)den_n * 8);
128 jobject _output = (*_env)->CallObjectMethod(_env, _obj, L._new, (jint)den_n * 8);
129 double *den_p = (double *)(*_env)->GetDirectBufferAddress(_env, _den);
130 double *output = (double *)(*_env)->GetDirectBufferAddress(_env, _output);
131 (*_env)->SetObjectField(_env, _obj, L.den, _den);
132 (*_env)->SetObjectField(_env, _obj, L.output, _output);
133 ctx->den_n = (unsigned int)den_n;
134 ctx->den_p = den_p;
135 ctx->output = output;
137 u.q = ctx->den_p;
138 (*_env)->GetDoubleArrayRegion(_env, den, 0, den_n, u.p);
139 return _obj;
142 JNIEXPORT jobject JNICALL Java_liba_tf_output(JNIEnv *_env, jobject _obj)
144 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
145 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
146 jobject output = (*_env)->NewDoubleArray(_env, (jsize)ctx->num_n);
147 (*_env)->SetDoubleArrayRegion(_env, output, 0, (jsize)ctx->num_n, ctx->output);
148 return output;
151 JNIEXPORT jdouble JNICALL Java_liba_tf_iter(JNIEnv *_env, jobject _obj, jdouble x)
153 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
154 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
155 return a_tf_iter(ctx, x);
158 JNIEXPORT jobject JNICALL Java_liba_tf_zero(JNIEnv *_env, jobject _obj)
160 jobject _ctx = (*_env)->GetObjectField(_env, _obj, L.ctx);
161 a_tf *ctx = (a_tf *)(*_env)->GetDirectBufferAddress(_env, _ctx);
162 a_tf_zero(ctx);
163 return _obj;