diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-08-04 14:45:50 -0400 |
---|---|---|
committer | Ivo van Dongen <info@ivovandongen.nl> | 2016-08-16 11:38:30 +0200 |
commit | 4e211548d5029a353aaa8814c40599970a8098bd (patch) | |
tree | 9cad650747190f6fbd1bb53f034baee3e86f6517 /platform/android/src/jni | |
parent | dcd9e1016cd20f107c4e34be62c631a1f4189af1 (diff) | |
download | qtlocation-mapboxgl-4e211548d5029a353aaa8814c40599970a8098bd.tar.gz |
[android] #5869 - visible feature querying
Diffstat (limited to 'platform/android/src/jni')
-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)); + } +} |