diff options
author | Tobrun <tobrun@mapbox.com> | 2018-04-10 11:09:42 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-04-10 11:09:42 +0200 |
commit | 44ce5ab08792df5f38560016ed3d41712e8025d0 (patch) | |
tree | 83ff99ff7b811e4f54165058df01eb101750c33e /platform/android/src/java | |
parent | 351ac83c75955c7e44e49a42156ece83b759612b (diff) | |
download | qtlocation-mapboxgl-44ce5ab08792df5f38560016ed3d41712e8025d0.tar.gz |
Rework expression conversion (#11490)
* [android] - rework expression conversion
Diffstat (limited to 'platform/android/src/java')
-rw-r--r-- | platform/android/src/java/lang.cpp | 76 | ||||
-rw-r--r-- | platform/android/src/java/lang.hpp | 50 |
2 files changed, 124 insertions, 2 deletions
diff --git a/platform/android/src/java/lang.cpp b/platform/android/src/java/lang.cpp new file mode 100644 index 0000000000..3c95737169 --- /dev/null +++ b/platform/android/src/java/lang.cpp @@ -0,0 +1,76 @@ +#include "lang.hpp" + +namespace mbgl { +namespace android { +namespace java { +namespace lang { + +// Float + +jni::Object<Float> Float::valueOf(JNIEnv &env, jfloat value) { + static auto method = javaClass.GetStaticMethod<jni::Object<Float> (jni::jfloat)>(env, "valueOf"); + return javaClass.Call(env, method, value); +} + +void Float::registerNative(jni::JNIEnv &env) { + // Lookup the class + javaClass = *jni::Class<Float>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<Float> Float::javaClass; + +// Long + +jni::Object<Long> Long::valueOf(JNIEnv &env, jlong value) { + static auto method = javaClass.GetStaticMethod<jni::Object<Long> (jni::jlong)>(env, "valueOf"); + return javaClass.Call(env, method, value); +} + +void Long::registerNative(jni::JNIEnv &env) { + // Lookup the class + javaClass = *jni::Class<Long>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<Long> Long::javaClass; + +// Double + +jni::Object<Double> Double::valueOf(JNIEnv &env, jdouble value) { + static auto method = javaClass.GetStaticMethod<jni::Object<Double> (jni::jdouble)>(env, "valueOf"); + return javaClass.Call(env, method, value); +} + +void Double::registerNative(jni::JNIEnv &env) { + // Lookup the class + javaClass = *jni::Class<Double>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<Double> Double::javaClass; + +// Boolean + +jni::Object<Boolean> Boolean::valueOf(JNIEnv &env, jboolean value) { + static auto method = javaClass.GetStaticMethod<jni::Object<Boolean> (jni::jboolean)>(env, "valueOf"); + return javaClass.Call(env, method, value); +} + +void Boolean::registerNative(jni::JNIEnv &env) { + // Lookup the class + javaClass = *jni::Class<Boolean>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<Boolean> Boolean::javaClass; + +// Number + +void Number::registerNative(jni::JNIEnv &env) { + // Lookup the class + javaClass = *jni::Class<Number>::Find(env).NewGlobalRef(env).release(); +} + +jni::Class<Number> Number::javaClass; + +} // namespace lang +} // namespace java +} // namespace android +} // namespace mbgl diff --git a/platform/android/src/java/lang.hpp b/platform/android/src/java/lang.hpp index dcf81a9d0c..981e3b14b7 100644 --- a/platform/android/src/java/lang.hpp +++ b/platform/android/src/java/lang.hpp @@ -1,18 +1,64 @@ #pragma once +#include <jni/jni.hpp> +#include <mbgl/util/noncopyable.hpp> + namespace mbgl { namespace android { namespace java { namespace lang { -class Float { +class Float : private mbgl::util::noncopyable { public: static constexpr auto Name() { return "java/lang/Float"; }; + + static jni::Object<Float> valueOf(JNIEnv&, jfloat); + + static jni::Class<Float> javaClass; + + static void registerNative(jni::JNIEnv&); +}; + +class Double : private mbgl::util::noncopyable { +public: + static constexpr auto Name() { return "java/lang/Double"; }; + + static jni::Object<Double> valueOf(JNIEnv&, jdouble); + + static jni::Class<Double> javaClass; + + static void registerNative(jni::JNIEnv&); +}; + +class Long : private mbgl::util::noncopyable { +public: + static constexpr auto Name() { return "java/lang/Long"; }; + + static jni::Object<Long> valueOf(JNIEnv&, jlong); + + static jni::Class<Long> javaClass; + + static void registerNative(jni::JNIEnv&); +}; + +class Boolean : private mbgl::util::noncopyable { +public: + static constexpr auto Name() { return "java/lang/Boolean"; }; + + static jni::Object<Boolean> valueOf(JNIEnv&, jboolean); + + static jni::Class<Boolean> javaClass; + + static void registerNative(jni::JNIEnv&); }; -class Number { +class Number : private mbgl::util::noncopyable { public: static constexpr auto Name() { return "java/lang/Number"; }; + + static jni::Class<Number> javaClass; + + static void registerNative(jni::JNIEnv&); }; } // namespace lang |