Files
MapLibreParticleLab/platform/android/src/jni/local_object.hpp
2016-08-16 11:38:30 +02:00

34 lines
777 B
C++

#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));
}
}