diff options
Diffstat (limited to 'platform/android/src/conversion')
-rw-r--r-- | platform/android/src/conversion/collection.cpp | 38 | ||||
-rw-r--r-- | platform/android/src/conversion/collection.hpp | 34 | ||||
-rw-r--r-- | platform/android/src/conversion/color.cpp | 17 | ||||
-rw-r--r-- | platform/android/src/conversion/color.hpp | 8 | ||||
-rw-r--r-- | platform/android/src/conversion/constant.cpp | 86 | ||||
-rw-r--r-- | platform/android/src/conversion/constant.hpp | 75 |
6 files changed, 157 insertions, 101 deletions
diff --git a/platform/android/src/conversion/collection.cpp b/platform/android/src/conversion/collection.cpp new file mode 100644 index 0000000000..14d817ea88 --- /dev/null +++ b/platform/android/src/conversion/collection.cpp @@ -0,0 +1,38 @@ +#include "collection.hpp" +#include "constant.hpp" + +namespace mbgl { +namespace android { +namespace conversion { + +std::vector<std::string> toVector(JNIEnv& env, jni::jarray<jni::jobject>& array) { + std::vector<std::string> vector; + std::size_t len = jni::GetArrayLength(env, array); + vector.reserve(len); + + for (std::size_t i = 0; i < len; i++) { + jni::jstring* jstr = reinterpret_cast<jni::jstring*>(jni::GetObjectArrayElement(env, array, i)); + vector.push_back(*convert<std::string, jni::String>(env, jni::String(jstr))); + jni::DeleteLocalRef(env, jstr); + } + + return vector; +} + +std::vector<std::string> toVector(JNIEnv& env, jni::Array<jni::String> array) { + std::size_t len = array.Length(env); + std::vector<std::string> vector; + vector.reserve(len); + + for (std::size_t i = 0; i < len; i++) { + jni::String jstr = array.Get(env, i); + vector.push_back(*convert<std::string, jni::String>(env, jstr)); + jni::DeleteLocalRef(env, jstr); + } + + return vector; +} + +} +} +} diff --git a/platform/android/src/conversion/collection.hpp b/platform/android/src/conversion/collection.hpp index 2b953e73f4..973897b212 100644 --- a/platform/android/src/conversion/collection.hpp +++ b/platform/android/src/conversion/collection.hpp @@ -1,9 +1,7 @@ #pragma once #include "conversion.hpp" -#include "constant.hpp" -#include <mbgl/util/optional.hpp> #include <jni/jni.hpp> #include <vector> @@ -16,7 +14,7 @@ namespace conversion { * Convert jarray -> ArrayList */ template <class T> -inline jni::jobject* toArrayList(JNIEnv& env, jni::jarray<T>& array) { +jni::jobject* toArrayList(JNIEnv& env, jni::jarray<T>& array) { static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/util/Arrays")).release(); static jni::jmethodID* asList = &jni::GetStaticMethodID(env, *javaClass, "asList", "([Ljava/lang/Object;)Ljava/util/List;"); return reinterpret_cast<jni::jobject*>(jni::CallStaticMethod<jni::jobject*>(env, *javaClass, *asList, array)); @@ -24,34 +22,8 @@ inline jni::jobject* toArrayList(JNIEnv& env, jni::jarray<T>& array) { // Java -> C++ - -inline std::vector<std::string> toVector(JNIEnv& env, jni::jarray<jni::jobject>& array) { - std::vector<std::string> vector; - std::size_t len = jni::GetArrayLength(env, array); - vector.reserve(len); - - for (std::size_t i = 0; i < len; i++) { - jni::jstring* jstr = reinterpret_cast<jni::jstring*>(jni::GetObjectArrayElement(env, array, i)); - vector.push_back(*convert<std::string, jni::String>(env, jni::String(jstr))); - jni::DeleteLocalRef(env, jstr); - } - - return vector; -} - -inline std::vector<std::string> toVector(JNIEnv& env, jni::Array<jni::String> array) { - std::size_t len = array.Length(env); - std::vector<std::string> vector; - vector.reserve(len); - - for (std::size_t i = 0; i < len; i++) { - jni::String jstr = array.Get(env, i); - vector.push_back(*convert<std::string, jni::String>(env, jstr)); - jni::DeleteLocalRef(env, jstr); - } - - return vector; -} +std::vector<std::string> toVector(JNIEnv& env, jni::jarray<jni::jobject>& array); +std::vector<std::string> toVector(JNIEnv& env, jni::Array<jni::String> array); } } diff --git a/platform/android/src/conversion/color.cpp b/platform/android/src/conversion/color.cpp new file mode 100644 index 0000000000..ce85943e61 --- /dev/null +++ b/platform/android/src/conversion/color.cpp @@ -0,0 +1,17 @@ +#include "color.hpp" + +namespace mbgl { +namespace android { +namespace conversion { + +Result<mbgl::Color> Converter<mbgl::Color, int>::operator()(jni::JNIEnv&, const int& color) const { + float r = (color >> 16) & 0xFF; + float g = (color >> 8) & 0xFF; + float b = (color) & 0xFF; + float a = (color >> 24) & 0xFF; + return { mbgl::Color( r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f ) }; +} + +} // namespace conversion +} // namespace style +} // namespace mbgl diff --git a/platform/android/src/conversion/color.hpp b/platform/android/src/conversion/color.hpp index 40aa68d4a9..2b4144b933 100644 --- a/platform/android/src/conversion/color.hpp +++ b/platform/android/src/conversion/color.hpp @@ -10,13 +10,7 @@ namespace conversion { template <> struct Converter<mbgl::Color, int> { - Result<mbgl::Color> operator()(jni::JNIEnv&, const int& color) const { - float r = (color >> 16) & 0xFF; - float g = (color >> 8) & 0xFF; - float b = (color) & 0xFF; - float a = (color >> 24) & 0xFF; - return { mbgl::Color( r / 255.0f, g / 255.0f, b / 255.0f, a / 255.0f ) }; - } + Result<mbgl::Color> operator()(jni::JNIEnv&, const int& color) const; }; } // namespace conversion diff --git a/platform/android/src/conversion/constant.cpp b/platform/android/src/conversion/constant.cpp new file mode 100644 index 0000000000..cce0796ce5 --- /dev/null +++ b/platform/android/src/conversion/constant.cpp @@ -0,0 +1,86 @@ +#include "constant.hpp" + +#include <sstream> + +namespace mbgl { +namespace android { +namespace conversion { + +Result<jni::jobject*> Converter<jni::jobject*, bool>::operator()(jni::JNIEnv& env, const bool& value) const { + static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Boolean")).release(); + static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(Z)V"); + return {&jni::NewObject(env, *javaClass, *constructor, (jboolean) value)}; +} + +Result<jni::jboolean> Converter<jni::jboolean, bool>::operator()(jni::JNIEnv&, const bool& value) const { + return {(jni::jboolean) value}; +} + +Result<jni::jobject*> Converter<jni::jobject*, float>::operator()(jni::JNIEnv& env, const float& value) const { + static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Float")).release(); + static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(F)V"); + return {&jni::NewObject(env, *javaClass, *constructor, (jfloat) value)}; +} + +Result<jni::jfloat> Converter<jni::jfloat, float>::operator()(jni::JNIEnv&, const float& value) const { + return {(jni::jfloat) value}; +} + +Result<jni::jobject*> Converter<jni::jobject*, double>::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)}; +} + +Result<jni::jdouble> Converter<jni::jdouble, float>::operator()(jni::JNIEnv&, const double& value) const { + return {(jni::jdouble) value}; +} + +Result<jni::jobject*> Converter<jni::jobject*, std::string>::operator()(jni::JNIEnv& env, const std::string& value) const { + return {jni::Make<jni::String>(env, value).Get()}; +} + +Result<jni::jstring*> Converter<jni::jstring*, std::string>::operator()(jni::JNIEnv& env, const std::string& value) const { + return {jni::Make<jni::String>(env, value).Get()}; +} + +Result<jni::jobject*> Converter<jni::jobject*, Color>::operator()(jni::JNIEnv& env, const Color& value) const { + std::stringstream sstream; + sstream << "rgba(" << value.r << ", " << value.g << ", " << value.b << ", " << value.a << ")"; + std::string result = sstream.str(); + return convert<jni::jobject*, std::string>(env, result); +} + +Result<jni::jobject*> Converter<jni::jobject*, std::vector<std::string>>::operator()(jni::JNIEnv& env, const std::vector<std::string>& value) const { + static jni::jclass* stringCass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/String")).release(); + jni::jarray<jni::jobject>& jarray = jni::NewObjectArray(env, value.size(), *stringCass); + + for(size_t i = 0; i < value.size(); i = i + 1) { + Result<jni::jobject*> converted = convert<jni::jobject*, std::string>(env, value.at(i)); + jni::SetObjectArrayElement(env, jarray, i, *converted); + } + + return &jarray; +} + +Result<jni::jobject*> Converter<jni::jobject*, std::vector<float>>::operator()(jni::JNIEnv& env, const std::vector<float>& value) const { + static jni::jclass* floatClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Float")).release(); + jni::jarray<jni::jobject>& jarray = jni::NewObjectArray(env, value.size(), *floatClass); + + for(size_t i = 0; i < value.size(); i = i + 1) { + Result<jni::jobject*> converted = convert<jni::jobject*, float>(env, value.at(i)); + jni::SetObjectArrayElement(env, jarray, i, *converted); + } + + return &jarray; +} + +// Java -> C++ + +Result<std::string> Converter<std::string, jni::String>::operator()(jni::JNIEnv& env, const jni::String& value) const { + return { jni::Make<std::string>(env, value) }; +} + +} // namespace conversion +} // namespace style +} // namespace mbgl diff --git a/platform/android/src/conversion/constant.hpp b/platform/android/src/conversion/constant.hpp index f1c72eb5dd..52395cb9ee 100644 --- a/platform/android/src/conversion/constant.hpp +++ b/platform/android/src/conversion/constant.hpp @@ -2,14 +2,12 @@ #include "conversion.hpp" -#include <mbgl/util/optional.hpp> #include <mbgl/util/color.hpp> #include <jni/jni.hpp> #include <string> #include <array> #include <vector> -#include <sstream> namespace mbgl { namespace android { @@ -17,51 +15,33 @@ namespace conversion { template <> struct Converter<jni::jobject*, bool> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const bool& value) const { - static jni::jclass* javaClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Boolean")).release(); - static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(Z)V"); - return {&jni::NewObject(env, *javaClass, *constructor, (jboolean) value)}; - } + Result<jni::jobject*> operator()(jni::JNIEnv& env, const bool& value) const; }; template <> struct Converter<jni::jboolean, bool> { - Result<jni::jboolean> operator()(jni::JNIEnv&, const bool& value) const { - return {(jni::jboolean) value}; - } + Result<jni::jboolean> operator()(jni::JNIEnv&, const bool& value) const; }; 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(); - static jni::jmethodID* constructor = &jni::GetMethodID(env, *javaClass, "<init>", "(F)V"); - return {&jni::NewObject(env, *javaClass, *constructor, (jfloat) value)}; - } + Result<jni::jobject*> operator()(jni::JNIEnv& env, const float& value) const; }; template <> struct Converter<jni::jfloat, float> { - Result<jni::jfloat> operator()(jni::JNIEnv&, const float& value) const { - return {(jni::jfloat) value}; - } + Result<jni::jfloat> operator()(jni::JNIEnv&, const float& value) const; }; 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)}; - } + Result<jni::jobject*> operator()(jni::JNIEnv& env, const double& value) const; }; template <> struct Converter<jni::jdouble, float> { - Result<jni::jdouble> operator()(jni::JNIEnv&, const double& value) const { - return {(jni::jdouble) value}; - } + Result<jni::jdouble> operator()(jni::JNIEnv&, const double& value) const; }; /** @@ -81,26 +61,17 @@ struct Converter<jni::jobject*, T, typename std::enable_if<std::is_integral<T>:: 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()}; - } + Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::string& value) const; }; 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()}; - } + Result<jni::jstring*> operator()(jni::JNIEnv& env, const std::string& value) const; }; template <> struct Converter<jni::jobject*, Color> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const Color& value) const { - std::stringstream sstream; - sstream << "rgba(" << value.r << ", " << value.g << ", " << value.b << ", " << value.a << ")"; - std::string result = sstream.str(); - return convert<jni::jobject*, std::string>(env, result); - } + Result<jni::jobject*> operator()(jni::JNIEnv& env, const Color& value) const; }; template <std::size_t N> @@ -116,41 +87,19 @@ struct Converter<jni::jobject*, std::array<float, N>> { template <> struct Converter<jni::jobject*, std::vector<std::string>> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::vector<std::string>& value) const { - static jni::jclass* stringCass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/String")).release(); - jni::jarray<jni::jobject>& jarray = jni::NewObjectArray(env, value.size(), *stringCass); - - for(size_t i = 0; i < value.size(); i = i + 1) { - Result<jni::jobject*> converted = convert<jni::jobject*, std::string>(env, value.at(i)); - jni::SetObjectArrayElement(env, jarray, i, *converted); - } - - return &jarray; - } + Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::vector<std::string>& value) const; }; template <> struct Converter<jni::jobject*, std::vector<float>> { - Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::vector<float>& value) const { - static jni::jclass* floatClass = jni::NewGlobalRef(env, &jni::FindClass(env, "java/lang/Float")).release(); - jni::jarray<jni::jobject>& jarray = jni::NewObjectArray(env, value.size(), *floatClass); - - for(size_t i = 0; i < value.size(); i = i + 1) { - Result<jni::jobject*> converted = convert<jni::jobject*, float>(env, value.at(i)); - jni::SetObjectArrayElement(env, jarray, i, *converted); - } - - return &jarray; - } + Result<jni::jobject*> operator()(jni::JNIEnv& env, const std::vector<float>& value) const; }; // 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) }; - } + Result<std::string> operator()(jni::JNIEnv& env, const jni::String& value) const; }; } // namespace conversion |