diff options
Diffstat (limited to 'platform/android/src/style/value.cpp')
-rw-r--r-- | platform/android/src/style/value.cpp | 52 |
1 files changed, 19 insertions, 33 deletions
diff --git a/platform/android/src/style/value.cpp b/platform/android/src/style/value.cpp index 70bdea6677..6cdf134931 100644 --- a/platform/android/src/style/value.cpp +++ b/platform/android/src/style/value.cpp @@ -4,84 +4,70 @@ namespace mbgl { namespace android { - - class ObjectDeleter { - public: - ObjectDeleter() = default; - ObjectDeleter(JNIEnv& e) : env(e) {} - - void operator()(jni::jobject* p) const { - if (p) { - jni::DeleteLocalRef(env, p); - } - } - - private: - JNIEnv& env; - }; - // Instance - Value::Value(jni::JNIEnv& _env, jni::jobject* _value) : env(_env), value(_value, ObjectDeleter(env)) {} + Value::Value(jni::JNIEnv& _env, jni::Local<jni::Object<>> _value) + : env(_env), + value(std::move(_value)) {} bool Value::isNull() const { - return value == nullptr; + return !value; } bool Value::isArray() const { - return jni::IsInstanceOf(env, value.get(), *java::ObjectArray::jclass); + return jni::IsInstanceOf(env, value->Get(), *java::ObjectArray::jclass); } bool Value::isObject() const { - return jni::IsInstanceOf(env, value.get(), *java::Map::jclass);; + return jni::IsInstanceOf(env, value->Get(), *java::Map::jclass); } bool Value::isString() const { - return jni::IsInstanceOf(env, value.get(), *java::String::jclass); + return jni::IsInstanceOf(env, value->Get(), *java::String::jclass); } bool Value::isBool() const { - return jni::IsInstanceOf(env, value.get(), *java::Boolean::jclass); + return jni::IsInstanceOf(env, value->Get(), *java::Boolean::jclass); } bool Value::isNumber() const { - return jni::IsInstanceOf(env, value.get(), *java::Number::jclass); + return jni::IsInstanceOf(env, value->Get(), *java::Number::jclass); } std::string Value::toString() const { - jni::jstring* string = reinterpret_cast<jni::jstring*>(value.get()); + jni::jstring* string = reinterpret_cast<jni::jstring*>(value->Get()); return jni::Make<std::string>(env, jni::String(string)); } float Value::toFloat() const { - return jni::CallMethod<jni::jfloat>(env, value.get(), *java::Number::floatValueMethodId); + return jni::CallMethod<jni::jfloat>(env, value->Get(), *java::Number::floatValueMethodId); } double Value::toDouble() const { - return jni::CallMethod<jni::jdouble>(env, value.get(), *java::Number::doubleValueMethodId); + return jni::CallMethod<jni::jdouble>(env, value->Get(), *java::Number::doubleValueMethodId); } long Value::toLong() const { - return jni::CallMethod<jni::jlong>(env, value.get(), *java::Number::longValueMethodId); + return jni::CallMethod<jni::jlong>(env, value->Get(), *java::Number::longValueMethodId); } bool Value::toBool() const { - return jni::CallMethod<jni::jboolean>(env, value.get(), *java::Boolean::booleanValueMethodId); + return jni::CallMethod<jni::jboolean>(env, value->Get(), *java::Boolean::booleanValueMethodId); } Value Value::get(const char* key) const { - jni::jobject* member = jni::CallMethod<jni::jobject*>(env, value.get(), *java::Map::getMethodId, jni::Make<jni::String>(env, std::string(key)).Get()); - return Value(env, member); + jni::jobject* member = jni::CallMethod<jni::jobject*>(env, value->Get(), *java::Map::getMethodId, jni::Make<jni::String>(env, std::string(key)).Get()); + return Value(env, jni::SeizeLocal(env, jni::Object<>(member))); } int Value::getLength() const { - auto array = (jni::jarray<jni::jobject>*) value.get(); + auto array = (jni::jarray<jni::jobject>*) value->Get(); return jni::GetArrayLength(env, *array); } Value Value::get(const int index) const { - auto array = (jni::jarray<jni::jobject>*) value.get(); - return Value(env, jni::GetObjectArrayElement(env, *array, index)); + auto array = (jni::jarray<jni::jobject>*) value->Get(); + return Value(env, jni::SeizeLocal(env, jni::Object<>(jni::GetObjectArrayElement(env, *array, index)))); } } } |