diff options
Diffstat (limited to 'platform/android/src/jni/local_object.hpp')
-rw-r--r-- | platform/android/src/jni/local_object.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/platform/android/src/jni/local_object.hpp b/platform/android/src/jni/local_object.hpp new file mode 100644 index 0000000000..00fc4a1933 --- /dev/null +++ b/platform/android/src/jni/local_object.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include <jni/jni.hpp> + +namespace jni { + + class LocalRefDeleter { + private: + JNIEnv* env = nullptr; + + public: + LocalRefDeleter() = default; + LocalRefDeleter(JNIEnv& e) : env(&e) {} + + void operator()(jobject* object) const { + if (object) { + assert(env); + DeleteLocalRef(*env, object); + } + } + }; + + template < class T > + using LocalObject = std::unique_ptr< T, LocalRefDeleter >; + + /** + * Use a LocalObject to discard of local references as soon as possible + */ + template < class T > + LocalObject<T> NewLocalObject(JNIEnv& env, T* t) { + return LocalObject<T>(t, LocalRefDeleter(env)); + } +} |