summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKonstantin Käfer <mail@kkaefer.com>2017-04-25 17:29:49 +0200
committerKonstantin Käfer <mail@kkaefer.com>2017-04-25 17:56:46 +0200
commit2aa2f9a6a004de416ee19a91bc30f0220b9a3228 (patch)
tree6ddd283dd68ce0f31c6b7a512fa847feafa39c27
parent52e71bbd1a66729afb634c15401528e8fa674e70 (diff)
downloadqtlocation-mapboxgl-upstream/high-level-jni-hpp.tar.gz
[android] use jni::Make and global cache for constant conversionupstream/high-level-jni-hpp
-rw-r--r--platform/android/src/conversion/constant.hpp69
1 files changed, 26 insertions, 43 deletions
diff --git a/platform/android/src/conversion/constant.hpp b/platform/android/src/conversion/constant.hpp
index eefd197bc8..708983cbc1 100644
--- a/platform/android/src/conversion/constant.hpp
+++ b/platform/android/src/conversion/constant.hpp
@@ -17,50 +17,43 @@ 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, bool value) const {
+ return { jni::Make<java::lang::Boolean>(env, value).Get() };
}
};
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&, 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();
- 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, float value) const {
+ return { jni::Make<java::lang::Float>(env, value).Get() };
}
};
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&, 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)};
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, double value) const {
+ return { jni::Make<java::lang::Double>(env, value).Get() };
}
};
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&, double value) const {
+ return { (jni::jdouble)value };
}
};
@@ -68,12 +61,10 @@ struct Converter<jni::jdouble, float> {
* All integrals. java is limited to 64 bit signed, so...
* TODO: use BigDecimal for > 64 / unsigned?
*/
-template<typename T>
+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)};
+ Result<jni::jobject*> operator()(jni::JNIEnv& env, T value) const {
+ return { jni::Make<java::lang::Long>(env, value).Get() };
}
};
@@ -82,14 +73,14 @@ 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()};
+ return { jni::Make<jni::String>(env, value).Get() };
}
};
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()};
+ return { jni::Make<jni::String>(env, value).Get() };
}
};
@@ -117,30 +108,22 @@ 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);
+ auto array = jni::Make<jni::Array<java::lang::String>>(env, value.size());
+ for (size_t i = 0; i < value.size(); ++i) {
+ array.Set(env, i, jni::Make<java::lang::String>(env, value.at(i)));
}
-
- return &jarray;
+ return { array.Get() };
}
};
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);
+ auto array = jni::Make<jni::Array<java::lang::Float>>(env, value.size());
+ for (size_t i = 0; i < value.size(); ++i) {
+ array.Set(env, i, jni::Make<java::lang::Float>(env, value.at(i)));
}
-
- return &jarray;
+ return { array.Get() };
}
};
@@ -154,5 +137,5 @@ struct Converter<std::string, jni::String> {
};
} // namespace conversion
-} // namespace style
+} // namespace android
} // namespace mbgl