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
);
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
);
70 JNIEXPORT jobject JNICALL
Java_liba_tf_num___3D(JNIEnv
*_env
, jobject _obj
, jdoubleArray num
)
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
;
93 (*_env
)->GetDoubleArrayRegion(_env
, num
, 0, num_n
, u
.p
);
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
);
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
);
115 JNIEXPORT jobject JNICALL
Java_liba_tf_den___3D(JNIEnv
*_env
, jobject _obj
, jdoubleArray den
)
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
;
135 ctx
->output
= output
;
138 (*_env
)->GetDoubleArrayRegion(_env
, den
, 0, den_n
, u
.p
);
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
);
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
);