summaryrefslogtreecommitdiffstats
path: root/include/ScopedLocalRef.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/ScopedLocalRef.h')
-rw-r--r--include/ScopedLocalRef.h24
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;
}