コード例 #1
0
ファイル: djinni_support.cpp プロジェクト: FuegoFro/djinni
LocalRef<jobject> JniEnum::create(JNIEnv * env, jint value) const {
    LocalRef<jobject> values(env, env->CallStaticObjectMethod(m_clazz.get(), m_staticmethValues));
    jniExceptionCheck(env);
    DJINNI_ASSERT(values, env);
    LocalRef<jobject> result(env,
                             env->GetObjectArrayElement(static_cast<jobjectArray>(values.get()),
                                                        value));
    jniExceptionCheck(env);
    return result;
}
コード例 #2
0
ファイル: djinni_support.cpp プロジェクト: FuegoFro/djinni
LocalRef<jobject> JniFlags::create(JNIEnv * env, unsigned flags, int bits) const {
    auto j = LocalRef<jobject>(env, env->CallStaticObjectMethod(m_clazz.get(), m_methNoneOf, enumClass()));
    jniExceptionCheck(env);
    unsigned mask = 1;
    for(int i = 0; i < bits; ++i, mask <<= 1) {
        if((flags & mask) != 0) {
            auto jf = create(env, static_cast<jint>(i));
            jniExceptionCheck(env);
            env->CallBooleanMethod(j, m_methAdd, jf.get());
            jniExceptionCheck(env);
        }
    }
    return j;
}
コード例 #3
0
ファイル: djinni_support.cpp プロジェクト: FuegoFro/djinni
unsigned JniFlags::flags(JNIEnv * env, jobject obj) const {
    DJINNI_ASSERT(obj && env->IsInstanceOf(obj, m_clazz.get()), env);
    auto size = env->CallIntMethod(obj, m_methSize);
    jniExceptionCheck(env);
    unsigned flags = 0;
    auto it = LocalRef<jobject>(env, env->CallObjectMethod(obj, m_methIterator));
    jniExceptionCheck(env);
    for(jint i = 0; i < size; ++i) {
        auto jf = LocalRef<jobject>(env, env->CallObjectMethod(it, m_iterator.methNext));
        jniExceptionCheck(env);
        flags |= (1u << static_cast<unsigned>(ordinal(env, jf)));
    }
    return flags;
}
コード例 #4
0
ファイル: djinni_support.cpp プロジェクト: dbruenig/djinni
size_t JavaIdentityHash::operator() (jobject obj) const {
    JNIEnv * const env = jniGetThreadEnv();
    const SystemClassInfo & sys = JniClass<SystemClassInfo>::get();
    jint res = env->CallStaticIntMethod(sys.clazz.get(), sys.staticmethIdentityHashCode, obj);
    jniExceptionCheck(env);
    return res;
}
コード例 #5
0
ファイル: Primitive.hpp プロジェクト: skabbes/djinni
 static jobject toJava(JNIEnv* jniEnv, CppType c) {
     const auto & data = JniClass<Self>::get();
     UnboxedJniType jni = Primitive::Unboxed::toJava(jniEnv, c);
     jobject j = jniEnv->CallStaticObjectMethod(data.clazz.get(), data.method_box, jni);
     jniExceptionCheck(jniEnv);
     return j;
 }
コード例 #6
0
ファイル: Duration-jni.hpp プロジェクト: comunity/djinni
		static LocalRef<jobject> fromCpp(JNIEnv* jniEnv, CppType c)
		{
			const auto& data = JniClass<DurationJniInfo>::get();
			jlong nanos = std::chrono::duration_cast<std::chrono::duration<jlong, std::nano>>(c).count();
			auto j = LocalRef<JniType>{jniEnv->CallStaticObjectMethod(data.clazz.get(), data.method_ofNanos, nanos)};
			jniExceptionCheck(jniEnv);
			return j;
		}
コード例 #7
0
ファイル: djinni_support.cpp プロジェクト: dbruenig/djinni
GlobalRef<jclass> jniFindClass(const char * name) {
    JNIEnv * env = jniGetThreadEnv();
    GlobalRef<jclass> guard(env, env->FindClass(name));
    jniExceptionCheck(env);
    if (!guard) {
        jniThrowAssertionError(env, __FILE__, __LINE__, "FindClass returned null");
    }
    return guard;
}
コード例 #8
0
ファイル: djinni_support.cpp プロジェクト: dbruenig/djinni
jfieldID jniGetFieldID(jclass clazz, const char * name, const char * sig) {
    JNIEnv * env = jniGetThreadEnv();
    jfieldID id = env->GetFieldID(clazz, name, sig);
    jniExceptionCheck(env);
    if (!id) {
        jniThrowAssertionError(env, __FILE__, __LINE__, "GetFieldID returned null");
    }
    return id;
}
コード例 #9
0
ファイル: Duration-jni.hpp プロジェクト: comunity/djinni
		static CppType toCpp(JNIEnv* jniEnv, JniType j)
		{
			assert(j != nullptr);
			const auto& data = JniClass<DurationJniInfo>::get();
			assert(jniEnv->IsInstanceOf(j, data.clazz.get()));
			jlong nanos = jniEnv->CallLongMethod(j, data.method_toNanos);
			jniExceptionCheck(jniEnv);
			return std::chrono::duration_cast<CppType>(std::chrono::duration<jlong, std::nano>{nanos});
		}
コード例 #10
0
ファイル: djinni_support.cpp プロジェクト: FuegoFro/djinni
jmethodID jniGetMethodID(jclass clazz, const char * name, const char * sig) {
    JNIEnv * env = jniGetThreadEnv();
    DJINNI_ASSERT(clazz, env);
    DJINNI_ASSERT(name, env);
    DJINNI_ASSERT(sig, env);
    jmethodID id = env->GetMethodID(clazz, name, sig);
    jniExceptionCheck(env);
    if (!id) {
        jniThrowAssertionError(env, __FILE__, __LINE__, "GetMethodID returned null");
    }
    return id;
}
コード例 #11
0
ファイル: djinni_support.cpp プロジェクト: dbruenig/djinni
bool JavaIdentityEquals::operator() (jobject obj1, jobject obj2) const {
    JNIEnv * const env = jniGetThreadEnv();
    const bool res = env->IsSameObject(obj1, obj2);
    jniExceptionCheck(env);
    return res;
}
コード例 #12
0
ファイル: Primitive.hpp プロジェクト: skabbes/djinni
inline
jint jniUnboxMethodCall<jint>(JNIEnv* jniEnv, jmethodID method, jobject thiz) {
    jint ret = jniEnv->CallIntMethod(thiz, method);
    jniExceptionCheck(jniEnv);
    return ret;
}
コード例 #13
0
ファイル: Primitive.hpp プロジェクト: skabbes/djinni
inline
jbyte jniUnboxMethodCall<jbyte>(JNIEnv* jniEnv, jmethodID method, jobject thiz) {
    jbyte ret = jniEnv->CallByteMethod(thiz, method);
    jniExceptionCheck(jniEnv);
    return ret;
}
コード例 #14
0
ファイル: Primitive.hpp プロジェクト: skabbes/djinni
inline
jboolean jniUnboxMethodCall<jboolean>(JNIEnv* jniEnv, jmethodID method, jobject thiz) {
    jboolean ret = jniEnv->CallBooleanMethod(thiz, method);
    jniExceptionCheck(jniEnv);
    return ret;
}
コード例 #15
0
ファイル: Primitive.hpp プロジェクト: skabbes/djinni
inline
jlong jniUnboxMethodCall<jlong>(JNIEnv* jniEnv, jmethodID method, jobject thiz) {
    jlong ret = jniEnv->CallLongMethod(thiz, method);
    jniExceptionCheck(jniEnv);
    return ret;
}
コード例 #16
0
ファイル: djinni_support.cpp プロジェクト: dbruenig/djinni
jint JniEnum::ordinal(JNIEnv * env, jobject obj) const {
    const jint res = env->CallIntMethod(obj, m_methOrdinal);
    jniExceptionCheck(env);
    return res;
}
コード例 #17
0
ファイル: Primitive.hpp プロジェクト: skabbes/djinni
inline
jdouble jniUnboxMethodCall<jdouble>(JNIEnv* jniEnv, jmethodID method, jobject thiz) {
    jdouble ret = jniEnv->CallDoubleMethod(thiz, method);
    jniExceptionCheck(jniEnv);
    return ret;
}