diff options
Diffstat (limited to 'platform/android/src/conversion/constant.hpp')
-rw-r--r-- | platform/android/src/conversion/constant.hpp | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/platform/android/src/conversion/constant.hpp b/platform/android/src/conversion/constant.hpp index 9a570d3717..f1a8171b99 100644 --- a/platform/android/src/conversion/constant.hpp +++ b/platform/android/src/conversion/constant.hpp @@ -24,6 +24,13 @@ struct Converter<jni::jobject*, bool> { }; template <> +struct Converter<jni::jboolean, bool> { + Result<jni::jboolean> operator()(jni::JNIEnv&, const bool& value) const { + return {(jni::jboolean) value}; + } +}; + +template <> struct Converter<jni::jobject*, float> { Result<jni::jobject*> operator()(jni::JNIEnv& env, const float& value) const { static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Float")).release(); @@ -33,6 +40,45 @@ struct Converter<jni::jobject*, float> { }; template <> +struct Converter<jni::jfloat, float> { + Result<jni::jfloat> operator()(jni::JNIEnv&, const float& value) const { + return {(jni::jfloat) value}; + } +}; + + +template <> +struct Converter<jni::jobject*, double> { + Result<jni::jobject*> operator()(jni::JNIEnv& env, const double& value) const { + static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Double")).release(); + static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(D)V"); + return {&jni::NewObject(env, *javaClass, *constructor, (jfloat) value)}; + } +}; + +template <> +struct Converter<jni::jdouble, float> { + Result<jni::jdouble> operator()(jni::JNIEnv&, const double& value) const { + return {(jni::jdouble) value}; + } +}; + +/** + * All integrals. java is limited to 64 bit signed, so... + * TODO: use BigDecimal for > 64 / unsigned? + */ +template<typename T> +struct Converter<jni::jobject*, T, typename std::enable_if<std::is_integral<T>::value>::type> { + Result<jni::jobject*> operator()(jni::JNIEnv& env, const T& value) const { + static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Long")).release(); + static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(J)V"); + return {&jni::NewObject(env, *javaClass, *constructor, (jlong) value)}; + } +}; + +//TODO: convert integral types to primitive jni types + +template <> struct Converter<jni::jobject*, std::string> { Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::string& value) const { return {jni::Make<jni::String>(env, value).Get()}; @@ -40,6 +86,13 @@ struct Converter<jni::jobject*, std::string> { }; template <> +struct Converter<jni::jstring*, std::string> { + Result<jni::jstring*> operator()(jni::JNIEnv& env, const std::string& value) const { + return {jni::Make<jni::String>(env, value).Get()}; + } +}; + +template <> struct Converter<jni::jobject*, Color> { Result<jni::jobject*> operator()(jni::JNIEnv& env, const Color& value) const { std::stringstream sstream; @@ -90,6 +143,15 @@ struct Converter<jni::jobject*, std::vector<float>> { } }; +// Java -> C++ + +template <> +struct Converter<std::string, jni::String> { + Result<std::string> operator()(jni::JNIEnv& env, const jni::String& value) const { + return { jni::Make<std::string>(env, value) }; + } +}; + } // namespace conversion } // namespace style } // namespace mbgl |