summaryrefslogtreecommitdiff
path: root/platform/android/src/jni
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/src/jni')
-rw-r--r--platform/android/src/jni/generic_global_ref_deleter.hpp42
-rw-r--r--platform/android/src/jni/local_object.hpp33
2 files changed, 18 insertions, 57 deletions
diff --git a/platform/android/src/jni/generic_global_ref_deleter.hpp b/platform/android/src/jni/generic_global_ref_deleter.hpp
index 7239e361a7..b865ee9f8b 100644
--- a/platform/android/src/jni/generic_global_ref_deleter.hpp
+++ b/platform/android/src/jni/generic_global_ref_deleter.hpp
@@ -12,39 +12,33 @@ namespace android {
struct GenericGlobalRefDeleter {
void operator()(jni::jobject* p) const {
if (p) {
- auto env = AttachEnv();
- env->DeleteGlobalRef(jni::Unwrap(p));
+ AttachEnv()->DeleteGlobalRef(jni::Unwrap(p));
}
}
};
+struct GenericWeakGlobalRefDeleter {
+ void operator()(jni::jobject* p) const {
+ if (p) {
+ AttachEnv()->DeleteWeakGlobalRef(jni::Unwrap(p));
+ }
+ }
+};
-template < class TagType >
-class GenericWeakObjectRefDeleter;
-
-template < class TagType = jni::ObjectTag >
-using GenericUniqueWeakObject = std::unique_ptr< const jni::Object<TagType>, GenericWeakObjectRefDeleter<TagType> >;
+template < class T >
+using GenericGlobal = jni::UniquePointerlike< T, GenericGlobalRefDeleter >;
-template < class TagType >
-class GenericWeakObjectRefDeleter
-{
-public:
- using pointer = jni::PointerToValue< jni::Object<TagType> >;
+template < class T >
+using GenericWeak = jni::UniquePointerlike< T, GenericWeakGlobalRefDeleter >;
- void operator()(pointer p) const
- {
- if (p)
- {
- auto env = AttachEnv();
- env->DeleteWeakGlobalRef(jni::Unwrap(p->Get()));
- }
- }
+template < class T >
+GenericGlobal<T> SeizeGenericGlobal(T&& t) {
+ return GenericGlobal<T>(std::move(t), GenericGlobalRefDeleter());
};
-template < class TagType >
-GenericUniqueWeakObject<TagType> SeizeGenericWeakRef(JNIEnv&, jni::Object<TagType>&& object)
-{
- return GenericUniqueWeakObject<TagType>(jni::PointerToValue<jni::Object<TagType>>(std::move(object)), GenericWeakObjectRefDeleter<TagType>());
+template < class T >
+GenericWeak<T> SeizeGenericWeak(T&& t) {
+ return GenericWeak<T>(std::move(t), GenericWeakGlobalRefDeleter());
};
} // namespace android
diff --git a/platform/android/src/jni/local_object.hpp b/platform/android/src/jni/local_object.hpp
deleted file mode 100644
index 00fc4a1933..0000000000
--- a/platform/android/src/jni/local_object.hpp
+++ /dev/null
@@ -1,33 +0,0 @@
-#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));
- }
-}