blob: 00fc4a1933cb03a4d55369070445479d8529f740 (
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
|
#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));
}
}
|