diff options
Diffstat (limited to 'src/java/JavaHandle.cpp')
-rw-r--r-- | src/java/JavaHandle.cpp | 43 |
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 |