diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2017-01-17 13:25:27 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2017-01-17 13:25:27 +0100 |
commit | 7e0cc3b545a5b47a8770e55e5476e9646809a618 (patch) | |
tree | a57127d2f1e8ed14506f47f54e44f1e3028d8214 /platform/android/src/jni/peer.hpp | |
parent | ea273d4e75f51a6cb7a6fc7573c7722e34e730f1 (diff) | |
download | qtlocation-mapboxgl-7e0cc3b545a5b47a8770e55e5476e9646809a618.tar.gz |
[android] introduce generic Peer object for JNI wrappingupstream/7743-nativepeer-defaultfilesource
Diffstat (limited to 'platform/android/src/jni/peer.hpp')
-rw-r--r-- | platform/android/src/jni/peer.hpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/platform/android/src/jni/peer.hpp b/platform/android/src/jni/peer.hpp new file mode 100644 index 0000000000..2c16cce710 --- /dev/null +++ b/platform/android/src/jni/peer.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include <jni/jni.hpp> + +#include <memory> + +namespace mbgl { +namespace android { + +template <typename T> +class Peer { +public: + static constexpr auto Name(); + static void RegisterNative(jni::JNIEnv&); + + static T& Get(jni::JNIEnv& env, const jni::Object<Peer<T>>& obj) { + jni::Field<Peer, jlong> field{ env, javaClass, peer }; + return *reinterpret_cast<Peer*>(obj.Get(env, field))->native; + } + +protected: + template <typename... Args> + Peer(Args&&... args) : native(std::make_unique<T>(std::forward<Args>(args)...)) { + } + + const std::unique_ptr<T> native; + +private: + static const char* peer; + static jni::Class<Peer<T>> javaClass; +}; + +template <typename T> +jni::Class<Peer<T>> Peer<T>::javaClass; + +template <typename T> +const char* Peer<T>::peer = "peer"; + +} // namespace android +} // namespace mbgl |