diff options
Diffstat (limited to 'include/ScopedLocalRef.h')
-rw-r--r-- | include/ScopedLocalRef.h | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/include/ScopedLocalRef.h b/include/ScopedLocalRef.h index 84ee11a..71d5776 100644 --- a/include/ScopedLocalRef.h +++ b/include/ScopedLocalRef.h @@ -17,28 +17,36 @@ #ifndef SCOPED_LOCAL_REF_H_included #define SCOPED_LOCAL_REF_H_included -#include "JNIHelp.h" +#include "jni.h" + +#include <stddef.h> // A smart pointer that deletes a JNI local reference when it goes out of scope. template<typename T> class ScopedLocalRef { public: - ScopedLocalRef(JNIEnv* env, T localRef) - : mEnv(env), mLocalRef(localRef) - { + ScopedLocalRef(JNIEnv* env, T localRef) : mEnv(env), mLocalRef(localRef) { } ~ScopedLocalRef() { reset(); } - void reset() { - if (mLocalRef != NULL) { - mEnv->DeleteLocalRef(mLocalRef); - mLocalRef = NULL; + void reset(T ptr = NULL) { + if (ptr != mLocalRef) { + if (mLocalRef != NULL) { + mEnv->DeleteLocalRef(mLocalRef); + } + mLocalRef = ptr; } } + T release() __attribute__((warn_unused_result)) { + T localRef = mLocalRef; + mLocalRef = NULL; + return localRef; + } + T get() const { return mLocalRef; } |