summaryrefslogtreecommitdiffstats
path: root/java/src/c/helper.c
diff options
context:
space:
mode:
Diffstat (limited to 'java/src/c/helper.c')
-rw-r--r--java/src/c/helper.c93
1 files changed, 46 insertions, 47 deletions
diff --git a/java/src/c/helper.c b/java/src/c/helper.c
index b2e147d1..17e555c1 100644
--- a/java/src/c/helper.c
+++ b/java/src/c/helper.c
@@ -24,41 +24,33 @@
#include <helper.h>
-void * getObjectRef(JNIEnv * env, jobject this, const char * name){
- jclass clazz;
- jfieldID fid;
- jlong result;
-
- clazz = (*env)->GetObjectClass(env, this);
- fid = (*env)->GetFieldID(env, clazz, name, "J");
-
- result = (*env)->GetLongField(env, this, fid);
- return (void*)(long)result;
-}
-
-void setObjectRef(JNIEnv * env, jobject this, const char * name, void * objectRef){
- jclass clazz;
- jfieldID fid;
- jlong ref;
-
- clazz = (*env)->GetObjectClass(env, this);
- fid = (*env)->GetFieldID(env, clazz, name, "J");
+void checkAndSetField(JNIEnv *env, jobject this, char *fieldName,
+ char *fieldType, char *javaObjectClassName, void *cObject) {
+ jobject javaObject;
- ref = (jlong)(long)objectRef;
- (*env)->SetLongField(env, this, fid, ref);
-}
+ /* check if changes are made */
+ javaObject = getJavaObjectField(env, this, fieldName, fieldType);
+ if(isSameObject(env, javaObject, cObject)){
+ /* no change made, do nothing */
+ return;
+ }
+ javaObject = instantiate(env, javaObjectClassName);
+ if(javaObject == NULL){
+ return; /* exception thrown */
+ }
-void storeCObject(JNIEnv * env, jobject this, void * cobject){
- setObjectRef(env, this, "c_lasso_object", cobject);
+ /* associate C object with JavaObject */
+ setCObject(env, javaObject, cObject);
+ setJavaObjectField(env, this, fieldName, fieldType, javaObject);
}
-void* getCObject(JNIEnv * env, jobject this){
+void * getCObject(JNIEnv * env, jobject this) {
return getObjectRef(env, this, "c_lasso_object");
}
-
-jobject getJavaObjectField(JNIEnv * env, jobject this, const char * fieldName, const char * fieldType){
+jobject getJavaObjectField(JNIEnv * env, jobject this, const char * fieldName,
+ const char * fieldType) {
jclass clazz;
jfieldID fid;
jobject result;
@@ -70,17 +62,19 @@ jobject getJavaObjectField(JNIEnv * env, jobject this, const char * fieldName, c
return result;
}
-void setJavaObjectField(JNIEnv * env, jobject this, const char * fieldName, const char * fieldType, jobject value){
+void * getObjectRef(JNIEnv * env, jobject this, const char * name) {
jclass clazz;
jfieldID fid;
+ jlong result;
clazz = (*env)->GetObjectClass(env, this);
- fid = (*env)->GetFieldID(env, clazz, fieldName, fieldType);
+ fid = (*env)->GetFieldID(env, clazz, name, "J");
- (*env)->SetObjectField(env, this, fid, value);
+ result = (*env)->GetLongField(env, this, fid);
+ return (void*)(long)result;
}
-jobject instanciate(JNIEnv * env, const char * className){
+jobject instantiate(JNIEnv * env, const char * className){
jclass clazz;
jmethodID constructor;
jobject result;
@@ -104,23 +98,28 @@ int isSameObject(JNIEnv * env, jobject javaObject, void* cObject){
return javaObject != NULL && cObject == getCObject(env, javaObject);
}
-void checkAndSetField(JNIEnv * env, jobject this, char * fieldName,
-char * fieldType, char * javaObjectClassName, void * cObject){
- jobject javaObject;
+void setCObject(JNIEnv * env, jobject this, void * cobject) {
+ setObjectRef(env, this, "c_lasso_object", cobject);
+}
- /* check if change are made */
- javaObject = getJavaObjectField(env, this, fieldName, fieldType);
- if(isSameObject(env, javaObject, cObject)){
- /* no change made, do nothing */
- return;
- }
+void setJavaObjectField(JNIEnv * env, jobject this, const char * fieldName, const char * fieldType, jobject value){
+ jclass clazz;
+ jfieldID fid;
- javaObject = instanciate(env, javaObjectClassName);
- if(javaObject == NULL){
- return; /* exception thrown */
- }
+ clazz = (*env)->GetObjectClass(env, this);
+ fid = (*env)->GetFieldID(env, clazz, fieldName, fieldType);
- /* associate C object with JavaObject */
- storeCObject(env, javaObject, cObject);
- setJavaObjectField(env, this, fieldName, fieldType, javaObject);
+ (*env)->SetObjectField(env, this, fid, value);
+}
+
+void setObjectRef(JNIEnv * env, jobject this, const char * name, void * objectRef) {
+ jclass clazz;
+ jfieldID fid;
+ jlong ref;
+
+ clazz = (*env)->GetObjectClass(env, this);
+ fid = (*env)->GetFieldID(env, clazz, name, "J");
+
+ ref = (jlong)(long)objectRef;
+ (*env)->SetLongField(env, this, fid, ref);
}