aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java/JavaHandle.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/JavaHandle.cpp')
-rw-r--r--src/java/JavaHandle.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/java/JavaHandle.cpp b/src/java/JavaHandle.cpp
new file mode 100644
index 00000000..4f02323e
--- /dev/null
+++ b/src/java/JavaHandle.cpp
@@ -0,0 +1,43 @@
+#include "JavaHandle.h"
+
+using namespace mailcore;
+
+static jfieldID getField(JNIEnv * env, jobject obj, const char * fieldName)
+{
+ jclass c = env->GetObjectClass(obj);
+ return env->GetFieldID(c, fieldName, "J");
+}
+
+static jfieldID getHandleField(JNIEnv * env, jobject obj)
+{
+ return getField(env, obj, "nativeHandle");
+}
+
+void * mailcore::getHandle(JNIEnv * env, jobject obj)
+{
+ jlong handle = env->GetLongField(obj, getHandleField(env, obj));
+ return (void *) handle;
+}
+
+void mailcore::setHandle(JNIEnv *env, jobject obj, void *t)
+{
+ jlong handle = reinterpret_cast<jlong>(t);
+ env->SetLongField(obj, getHandleField(env, obj), handle);
+}
+
+void * mailcore::getCustomHandle(JNIEnv * env, jobject obj, const char * fieldName)
+{
+ jlong handle = env->GetLongField(obj, getField(env, obj, fieldName));
+ return (void *) handle;
+}
+
+void mailcore::setCustomHandle(JNIEnv *env, jobject obj, const char * fieldName, void *t)
+{
+ jlong handle = reinterpret_cast<jlong>(t);
+ env->SetLongField(obj, getField(env, obj, fieldName), handle);
+}
+
+jobject mailcore::getObjectField(JNIEnv *env, jobject obj, const char * fieldName)
+{
+ return env->GetObjectField(obj, getField(env, obj, fieldName));
+} \ No newline at end of file