[android] jni.hpp 4.0.0

This commit is contained in:
John Firebaugh
2018-08-22 12:27:43 -07:00
parent 5911e3b13f
commit 79bf0e8af6
156 changed files with 1765 additions and 2161 deletions

View File

@@ -7,35 +7,30 @@ namespace mbgl {
namespace android {
namespace gson {
jni::Object<JsonElement> JsonElement::New(jni::JNIEnv& env, const mbgl::Value& value) {
static auto primitive = jni::Class<JsonPrimitive>::Singleton(env);
jni::Local<jni::Object<JsonElement>> JsonElement::New(jni::JNIEnv& env, const mbgl::Value& value) {
static auto& primitive = jni::Class<JsonPrimitive>::Singleton(env);
static auto stringConstructor = primitive.GetConstructor<jni::String>(env);
static auto numberConstructor = primitive.GetConstructor<jni::Number>(env);
static auto booleanConstructor = primitive.GetConstructor<jni::Boolean>(env);
return value.match(
[&] (const mbgl::NullValue&) {
return jni::Object<JsonElement>();
return jni::Local<jni::Object<JsonElement>>();
},
[&] (const std::string& value) {
return primitive.New(env, stringConstructor,
*jni::SeizeLocal(env, jni::Make<jni::String>(env, value)));
return primitive.New(env, stringConstructor, jni::Make<jni::String>(env, value));
},
[&] (const double value) {
return primitive.New(env, numberConstructor,
*jni::SeizeLocal(env, jni::Number(jni::Box(env, value))));
return primitive.New(env, numberConstructor, jni::Box(env, value));
},
[&] (const int64_t value) {
return primitive.New(env, numberConstructor,
*jni::SeizeLocal(env, jni::Number(jni::Box(env, value))));
return primitive.New(env, numberConstructor, jni::Box(env, value));
},
[&] (const uint64_t value) {
return primitive.New(env, numberConstructor,
*jni::SeizeLocal(env, jni::Number(jni::Box(env, int64_t(value))))); // TODO: should use BigInteger
return primitive.New(env, numberConstructor, jni::Box(env, int64_t(value))); // TODO: should use BigInteger
},
[&] (const bool value) {
return primitive.New(env, booleanConstructor,
*jni::SeizeLocal(env, jni::Box(env, value ? jni::jni_true : jni::jni_false)));
return primitive.New(env, booleanConstructor, jni::Box(env, value ? jni::jni_true : jni::jni_false));
},
[&] (const std::vector<mbgl::Value>& values) {
return JsonArray::New(env, values);
@@ -46,17 +41,17 @@ jni::Object<JsonElement> JsonElement::New(jni::JNIEnv& env, const mbgl::Value& v
);
}
mbgl::Value JsonElement::convert(jni::JNIEnv &env, jni::Object<JsonElement> jsonElement) {
mbgl::Value JsonElement::convert(jni::JNIEnv &env, const jni::Object<JsonElement>& jsonElement) {
if (!jsonElement) {
return mbgl::NullValue();
}
static auto elementClass = jni::Class<JsonElement>::Singleton(env);
static auto& elementClass = jni::Class<JsonElement>::Singleton(env);
static auto isJsonObject = elementClass.GetMethod<jni::jboolean ()>(env, "isJsonObject");
static auto isJsonArray = elementClass.GetMethod<jni::jboolean ()>(env, "isJsonArray");
static auto isJsonPrimitive = elementClass.GetMethod<jni::jboolean ()>(env, "isJsonPrimitive");
static auto primitiveClass = jni::Class<JsonPrimitive>::Singleton(env);
static auto& primitiveClass = jni::Class<JsonPrimitive>::Singleton(env);
static auto isBoolean = primitiveClass.GetMethod<jni::jboolean ()>(env, "isBoolean");
static auto isString = primitiveClass.GetMethod<jni::jboolean ()>(env, "isString");
static auto isNumber = primitiveClass.GetMethod<jni::jboolean ()>(env, "isNumber");
@@ -71,7 +66,7 @@ mbgl::Value JsonElement::convert(jni::JNIEnv &env, jni::Object<JsonElement> json
} else if (primitive.Call(env, isNumber)) {
return primitive.Call(env, getAsDouble); // TODO: how to differentiate types here?
} else if (primitive.Call(env, isString)) {
return jni::Make<std::string>(env, *jni::SeizeLocal(env, primitive.Call(env, getAsString)));
return jni::Make<std::string>(env, primitive.Call(env, getAsString));
} else {
return mbgl::NullValue();
}