diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-03-27 16:40:19 +0300 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-03-28 14:43:23 +0300 |
commit | e1a9a468a920ea3dffbac03232b2c51ef46fb815 (patch) | |
tree | 41959bd1dc45b2ed14ecb5c44bd923422ce6abbe /platform/android/src/style | |
parent | 0abaae23b69eec1985bd256c6ee1cf50aabe2439 (diff) | |
download | qtlocation-mapboxgl-e1a9a468a920ea3dffbac03232b2c51ef46fb815.tar.gz |
[android] use more appropriate numeric types for filter conversion
Diffstat (limited to 'platform/android/src/style')
-rw-r--r-- | platform/android/src/style/android_conversion.hpp | 7 | ||||
-rw-r--r-- | platform/android/src/style/value.cpp | 10 | ||||
-rw-r--r-- | platform/android/src/style/value.hpp | 4 |
3 files changed, 16 insertions, 5 deletions
diff --git a/platform/android/src/style/android_conversion.hpp b/platform/android/src/style/android_conversion.hpp index d9b88ab52b..e2b2685928 100644 --- a/platform/android/src/style/android_conversion.hpp +++ b/platform/android/src/style/android_conversion.hpp @@ -59,7 +59,8 @@ inline optional<bool> toBool(const mbgl::android::Value& value) { inline optional<float> toNumber(const mbgl::android::Value& value) { if (value.isNumber()) { - return value.toNumber(); + auto num = value.toFloat(); + return num; } else { return {}; } @@ -81,8 +82,8 @@ inline optional<Value> toValue(const mbgl::android::Value& value) { } else if (value.isString()) { return { value.toString() }; } else if (value.isNumber()) { - // Need to cast to a double here as the float is otherwise considered a bool... - return { (double) value.toNumber() }; + auto doubleVal = value.toDouble(); + return { doubleVal - (int) doubleVal > 0.0 ? doubleVal : value.toLong() }; } else { return {}; } diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp index 0b5d81feb1..da953c14be 100644 --- a/platform/android/src/style/value.cpp +++ b/platform/android/src/style/value.cpp @@ -55,10 +55,18 @@ namespace android { return jni::Make<std::string>(jenv, jni::String(string)); } - float Value::toNumber() const { + float Value::toFloat() const { return jni::CallMethod<jni::jfloat>(jenv, value.get(), *java::Number::floatValueMethodId); } + double Value::toDouble() const { + return jni::CallMethod<jni::jdouble>(jenv, value.get(), *java::Number::doubleValueMethodId); + } + + long Value::toLong() const { + return jni::CallMethod<jni::jlong>(jenv, value.get(), *java::Number::longValueMethodId); + } + bool Value::toBool() const { return jni::CallMethod<jni::jboolean>(jenv, value.get(), *java::Boolean::booleanValueMethodId); } diff --git a/platform/android/src/style/value.hpp b/platform/android/src/style/value.hpp index 461fc1a033..761ce4d730 100644 --- a/platform/android/src/style/value.hpp +++ b/platform/android/src/style/value.hpp @@ -21,7 +21,9 @@ public: bool isNumber() const; std::string toString() const; - float toNumber() const; + float toFloat() const; + double toDouble() const; + long toLong() const; bool toBool() const; Value get(const char* key) const; int getLength() const; |