[android] add GenericWeakReference that can be deleted from any thread

This commit is contained in:
Ivo van Dongen
2017-08-22 17:19:54 +03:00
committed by Ivo van Dongen
parent fae9faab06
commit a90e2f3a2c

View File

@@ -18,5 +18,34 @@ struct GenericGlobalRefDeleter {
}
};
template < class TagType >
class GenericWeakObjectRefDeleter;
template < class TagType = jni::ObjectTag >
using GenericUniqueWeakObject = std::unique_ptr< const jni::Object<TagType>, GenericWeakObjectRefDeleter<TagType> >;
template < class TagType >
class GenericWeakObjectRefDeleter
{
public:
using pointer = jni::PointerToValue< jni::Object<TagType> >;
void operator()(pointer p) const
{
if (p)
{
auto env = AttachEnv();
env->DeleteWeakGlobalRef(jni::Unwrap(p->Get()));
}
}
};
template < class TagType >
GenericUniqueWeakObject<TagType> SeizeGenericWeakRef(JNIEnv&, jni::Object<TagType>&& object)
{
return GenericUniqueWeakObject<TagType>(jni::PointerToValue<jni::Object<TagType>>(std::move(object)), GenericWeakObjectRefDeleter<TagType>());
};
} // namespace android
} // namespace mbgl