Rework expression conversion (#11490)

* [android] - rework expression conversion
This commit is contained in:
Tobrun
2018-04-10 11:09:42 +02:00
committed by GitHub
parent 351ac83c75
commit 44ce5ab087
26 changed files with 318 additions and 157 deletions

View File

@@ -0,0 +1,76 @@
#include "lang.hpp"
namespace mbgl {
namespace android {
namespace java {
namespace lang {
// Float
jni::Object<Float> Float::valueOf(JNIEnv &env, jfloat value) {
static auto method = javaClass.GetStaticMethod<jni::Object<Float> (jni::jfloat)>(env, "valueOf");
return javaClass.Call(env, method, value);
}
void Float::registerNative(jni::JNIEnv &env) {
// Lookup the class
javaClass = *jni::Class<Float>::Find(env).NewGlobalRef(env).release();
}
jni::Class<Float> Float::javaClass;
// Long
jni::Object<Long> Long::valueOf(JNIEnv &env, jlong value) {
static auto method = javaClass.GetStaticMethod<jni::Object<Long> (jni::jlong)>(env, "valueOf");
return javaClass.Call(env, method, value);
}
void Long::registerNative(jni::JNIEnv &env) {
// Lookup the class
javaClass = *jni::Class<Long>::Find(env).NewGlobalRef(env).release();
}
jni::Class<Long> Long::javaClass;
// Double
jni::Object<Double> Double::valueOf(JNIEnv &env, jdouble value) {
static auto method = javaClass.GetStaticMethod<jni::Object<Double> (jni::jdouble)>(env, "valueOf");
return javaClass.Call(env, method, value);
}
void Double::registerNative(jni::JNIEnv &env) {
// Lookup the class
javaClass = *jni::Class<Double>::Find(env).NewGlobalRef(env).release();
}
jni::Class<Double> Double::javaClass;
// Boolean
jni::Object<Boolean> Boolean::valueOf(JNIEnv &env, jboolean value) {
static auto method = javaClass.GetStaticMethod<jni::Object<Boolean> (jni::jboolean)>(env, "valueOf");
return javaClass.Call(env, method, value);
}
void Boolean::registerNative(jni::JNIEnv &env) {
// Lookup the class
javaClass = *jni::Class<Boolean>::Find(env).NewGlobalRef(env).release();
}
jni::Class<Boolean> Boolean::javaClass;
// Number
void Number::registerNative(jni::JNIEnv &env) {
// Lookup the class
javaClass = *jni::Class<Number>::Find(env).NewGlobalRef(env).release();
}
jni::Class<Number> Number::javaClass;
} // namespace lang
} // namespace java
} // namespace android
} // namespace mbgl

View File

@@ -1,18 +1,64 @@
#pragma once
#include <jni/jni.hpp>
#include <mbgl/util/noncopyable.hpp>
namespace mbgl {
namespace android {
namespace java {
namespace lang {
class Float {
class Float : private mbgl::util::noncopyable {
public:
static constexpr auto Name() { return "java/lang/Float"; };
static jni::Object<Float> valueOf(JNIEnv&, jfloat);
static jni::Class<Float> javaClass;
static void registerNative(jni::JNIEnv&);
};
class Number {
class Double : private mbgl::util::noncopyable {
public:
static constexpr auto Name() { return "java/lang/Double"; };
static jni::Object<Double> valueOf(JNIEnv&, jdouble);
static jni::Class<Double> javaClass;
static void registerNative(jni::JNIEnv&);
};
class Long : private mbgl::util::noncopyable {
public:
static constexpr auto Name() { return "java/lang/Long"; };
static jni::Object<Long> valueOf(JNIEnv&, jlong);
static jni::Class<Long> javaClass;
static void registerNative(jni::JNIEnv&);
};
class Boolean : private mbgl::util::noncopyable {
public:
static constexpr auto Name() { return "java/lang/Boolean"; };
static jni::Object<Boolean> valueOf(JNIEnv&, jboolean);
static jni::Class<Boolean> javaClass;
static void registerNative(jni::JNIEnv&);
};
class Number : private mbgl::util::noncopyable {
public:
static constexpr auto Name() { return "java/lang/Number"; };
static jni::Class<Number> javaClass;
static void registerNative(jni::JNIEnv&);
};
} // namespace lang