blob: b865ee9f8b87aad8795f43c7b16de79ded723e54 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
#pragma once
#include <jni/jni.hpp>
#include "../attach_env.hpp"
namespace mbgl {
namespace android {
// A deleter that doesn't retain an JNIEnv handle but instead tries to attach the JVM. This means
// it can be used on any thread to delete a global ref.
struct GenericGlobalRefDeleter {
void operator()(jni::jobject* p) const {
if (p) {
AttachEnv()->DeleteGlobalRef(jni::Unwrap(p));
}
}
};
struct GenericWeakGlobalRefDeleter {
void operator()(jni::jobject* p) const {
if (p) {
AttachEnv()->DeleteWeakGlobalRef(jni::Unwrap(p));
}
}
};
template < class T >
using GenericGlobal = jni::UniquePointerlike< T, GenericGlobalRefDeleter >;
template < class T >
using GenericWeak = jni::UniquePointerlike< T, GenericWeakGlobalRefDeleter >;
template < class T >
GenericGlobal<T> SeizeGenericGlobal(T&& t) {
return GenericGlobal<T>(std::move(t), GenericGlobalRefDeleter());
};
template < class T >
GenericWeak<T> SeizeGenericWeak(T&& t) {
return GenericWeak<T>(std::move(t), GenericWeakGlobalRefDeleter());
};
} // namespace android
} // namespace mbgl
|