diff options
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 | ||||
-rw-r--r-- | platform/android/src/java/util.cpp | 2 | ||||
-rw-r--r-- | platform/android/src/java/util.hpp | 15 |
4 files changed, 141 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 diff --git a/platform/android/src/java/util.cpp b/platform/android/src/java/util.cpp index effd2ae0d0..89c4c77794 100644 --- a/platform/android/src/java/util.cpp +++ b/platform/android/src/java/util.cpp @@ -5,12 +5,14 @@ namespace android { namespace java { namespace util { +jni::Class<Arrays> Arrays::javaClass; jni::Class<List> List::javaClass; jni::Class<Set> Set::javaClass; jni::Class<Map> Map::javaClass; jni::Class<Map::Entry> Map::Entry::javaClass; void registerNative(jni::JNIEnv& env) { + Arrays::javaClass = *jni::Class<Arrays>::Find(env).NewGlobalRef(env).release(); List::javaClass = *jni::Class<List>::Find(env).NewGlobalRef(env).release(); Set::javaClass = *jni::Class<Set>::Find(env).NewGlobalRef(env).release(); Map::javaClass = *jni::Class<Map>::Find(env).NewGlobalRef(env).release(); diff --git a/platform/android/src/java/util.hpp b/platform/android/src/java/util.hpp index dedb8ac348..c6b07acac5 100644 --- a/platform/android/src/java/util.hpp +++ b/platform/android/src/java/util.hpp @@ -24,6 +24,21 @@ public: }; +class Arrays : private mbgl::util::noncopyable { +public: + + static constexpr auto Name() { return "java/util/Arrays"; }; + + template <class T> + static jni::Object<List> asList(jni::JNIEnv& env, jni::Array<jni::Object<T>> array) { + static auto asList = Arrays::javaClass.GetStaticMethod<jni::Object<List>(jni::Array<jni::Object<>>)>(env, "asList"); + return javaClass.Call(env, asList, (jni::Array<jni::Object<>>) array); + } + + static jni::Class<Arrays> javaClass; + +}; + class Set : private mbgl::util::noncopyable { public: |