blob: 71942ef89469a83cac7a2f1cf4652193fe4d9719 [file] [log] [blame]
#include "j3/j3jni.h"
#include "j3/j3.h"
#include "j3/j3class.h"
#include "j3/j3classloader.h"
#include "j3/j3object.h"
#include "j3/j3method.h"
#include "j3/j3thread.h"
#include "j3/j3utf16.h"
#include "j3/j3lib.h"
#include <stdlib.h>
#define NYI() { J3Thread::get()->vm()->internalError("not yet implemented: '%s'", __PRETTY_FUNCTION__); }
namespace j3 {
jint JNICALL GetVersion(JNIEnv* env) {
return JNI_VERSION_1_8;
}
jclass JNICALL DefineClass(JNIEnv* env, const char* name, jobject loader, const jbyte* buf, jsize len) { enterJVM(); leaveJVM(); NYI(); }
jclass JNICALL FindClass(JNIEnv* env, const char* name) {
jclass res;
enterJVM();
J3Method* m = J3Thread::get()->getJavaCaller();
J3* vm = J3Thread::get()->vm();
J3ClassLoader* loader = m ? m->cl()->loader() :
J3ClassLoader::nativeClassLoader(vm->classLoaderClassGetSystemClassLoader->invokeStatic().valObject);
J3ObjectType* cl = loader->getTypeFromQualified(m ? m->cl() : 0, name);
cl->initialise();
res = cl->javaClass();
leaveJVM();
return res;
}
jmethodID JNICALL FromReflectedMethod(JNIEnv* env, jobject method) { enterJVM(); leaveJVM(); NYI(); }
jfieldID JNICALL FromReflectedField(JNIEnv* env, jobject field) { enterJVM(); leaveJVM(); NYI(); }
jobject JNICALL ToReflectedMethod(JNIEnv* env, jclass cls, jmethodID methodID, jboolean isStatic) { enterJVM(); leaveJVM(); NYI(); }
jclass JNICALL GetSuperclass(JNIEnv* env, jclass sub) {
jclass res;
enterJVM();
J3ObjectType* cl = J3ObjectType::nativeClass(sub);
res = J3Thread::get()->vm()->objectClass ? 0 : cl->javaClass();
leaveJVM();
return res;
}
jboolean JNICALL IsAssignableFrom(JNIEnv* env, jclass sub, jclass sup) {
jboolean res;
enterJVM();
res = J3ObjectType::nativeClass(sub)->isAssignableTo(J3ObjectType::nativeClass(sup));
leaveJVM();
return res;
}
jobject JNICALL ToReflectedField(JNIEnv* env, jclass cls, jfieldID fieldID, jboolean isStatic) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL Throw(JNIEnv* env, jthrowable obj) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL ThrowNew(JNIEnv* env, jclass clazz, const char* msg) { enterJVM(); leaveJVM(); NYI(); }
jthrowable JNICALL ExceptionOccurred(JNIEnv* env) {
return J3Thread::get()->pendingException();
}
void JNICALL ExceptionDescribe(JNIEnv* env) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ExceptionClear(JNIEnv* env) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL FatalError(JNIEnv* env, const char* msg) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL PushLocalFrame(JNIEnv* env, jint capacity) { enterJVM(); leaveJVM(); NYI(); }
jobject JNICALL PopLocalFrame(JNIEnv* env, jobject result) { enterJVM(); leaveJVM(); NYI(); }
jobject JNICALL NewGlobalRef(JNIEnv* env, jobject lobj) {
jobject res;
enterJVM();
J3Method* m = J3Thread::get()->getJavaCaller();
J3ClassLoader* loader = m ? m->cl()->loader() : J3Thread::get()->vm()->initialClassLoader;
res = loader->globalReferences()->add(lobj);
leaveJVM();
return res;
}
void JNICALL DeleteGlobalRef(JNIEnv* env, jobject gref) {
enterJVM();
J3Method* m = J3Thread::get()->getJavaCaller();
J3ClassLoader* loader = m ? m->cl()->loader() : J3Thread::get()->vm()->initialClassLoader;
loader->globalReferences()->del(gref);
leaveJVM();
}
void JNICALL DeleteLocalRef(JNIEnv* env, jobject obj) {
enterJVM();
if(obj) obj->harakiri();
leaveJVM();
}
jboolean JNICALL IsSameObject(JNIEnv* env, jobject obj1, jobject obj2) { enterJVM(); leaveJVM(); NYI(); }
jobject JNICALL NewLocalRef(JNIEnv* env, jobject ref) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL EnsureLocalCapacity(JNIEnv* env, jint capacity) {
enterJVM();
J3Thread::get()->ensureCapacity(capacity);
leaveJVM();
return JNI_OK;
}
jobject JNICALL AllocObject(JNIEnv* env, jclass clazz) { enterJVM(); leaveJVM(); NYI(); }
jobject JNICALL NewObject(JNIEnv* env, jclass clazz, jmethodID methodID, ...) {
jobject res;
enterJVM();
va_list va;
va_start(va, methodID);
res = env->NewObjectV(clazz, methodID, va);
va_end(va);
leaveJVM();
return res;
}
jobject JNICALL NewObjectV(JNIEnv* env, jclass clazz, jmethodID methodID, va_list args) {
jobject res;
enterJVM();
res = J3ObjectHandle::doNewObject(methodID->cl());
methodID->invokeSpecial(res, args);
leaveJVM();
return res;
}
jobject JNICALL NewObjectA(JNIEnv* env, jclass clazz, jmethodID methodID, const jvalue* args) {
jobject res;
enterJVM();
res = J3ObjectHandle::doNewObject(methodID->cl());
methodID->invokeSpecial(res, args);
leaveJVM();
return res;
}
jclass JNICALL GetObjectClass(JNIEnv* env, jobject obj) {
jclass res;
enterJVM();
res = obj->vt()->type()->asObjectType()->javaClass();
leaveJVM();
return res;
}
jboolean JNICALL IsInstanceOf(JNIEnv* env, jobject obj, jclass clazz) { enterJVM(); leaveJVM(); NYI(); }
jmethodID JNICALL GetMethodID(JNIEnv* env, jclass clazz, const char* name, const char* sig) {
jmethodID res;
enterJVM();
J3ObjectType* cl = J3ObjectType::nativeClass(clazz);
cl->initialise();
vmkit::Names* n = J3Thread::get()->vm()->names();
res = cl->findMethod(0, n->get(name), cl->loader()->getSignature(cl, n->get(sig)), 0);
leaveJVM();
return res;
}
jmethodID JNICALL GetStaticMethodID(JNIEnv* env, jclass clazz, const char* name, const char* sig) {
jmethodID res;
enterJVM();
J3ObjectType* cl = J3ObjectType::nativeClass(clazz);
cl->initialise();
vmkit::Names* n = J3Thread::get()->vm()->names();
res = cl->findMethod(J3Cst::ACC_STATIC, n->get(name), cl->loader()->getSignature(cl, n->get(sig)), 0);
leaveJVM();
return res;
}
#define defCall(jtype, id, j3type) \
jtype JNICALL Call##id##Method(JNIEnv* env, jobject obj, jmethodID methodID, ...) { \
va_list va; \
va_start(va, methodID); \
jtype res = env->Call##id##MethodV(obj, methodID, va); \
va_end(va); \
return res; \
} \
\
jtype JNICALL Call##id##MethodV(JNIEnv* env, jobject obj, jmethodID methodID, va_list args) { \
jvalue res; \
\
enterJVM(); \
res = methodID->invokeVirtual(obj, args); \
leaveJVM(); \
\
return res.val##j3type; \
} \
\
jtype JNICALL Call##id##MethodA(JNIEnv* env, jobject obj, jmethodID methodID, const jvalue* args) { \
jvalue res; \
\
enterJVM(); \
res = methodID->invokeVirtual(obj, args); \
leaveJVM(); \
\
return res.val##j3type; \
}
#define defStaticCall(jtype, id, j3type) \
jtype JNICALL CallStatic##id##Method(JNIEnv* env, jclass clazz, jmethodID methodID, ...) { \
va_list va; \
va_start(va, methodID); \
jtype res = env->CallStatic##id##MethodV(clazz, methodID, va); \
va_end(va); \
return res; \
} \
\
jtype JNICALL CallStatic##id##MethodV(JNIEnv* env, jclass clazz, jmethodID methodID, va_list args) { \
jvalue res; \
\
enterJVM(); \
res = methodID->invokeStatic(args); \
leaveJVM(); \
\
return res.val##j3type; \
} \
\
jtype JNICALL CallStatic##id##MethodA(JNIEnv* env, jclass clazz, jmethodID methodID, const jvalue* args) { \
jvalue res; \
\
enterJVM(); \
res = methodID->invokeStatic(args); \
leaveJVM(); \
\
return res.val##j3type; \
}
#define defNonVirtualCall(jtype, id, j3type) \
jtype JNICALL CallNonvirtual##id##Method(JNIEnv* env, jobject obj, jclass clazz, jmethodID methodID, ...) { \
va_list va; \
va_start(va, methodID); \
jtype res = env->CallNonvirtual##id##MethodV(obj, clazz, methodID, va); \
va_end(va); \
return res; \
} \
\
jtype JNICALL CallNonvirtual##id##MethodV(JNIEnv* env, jobject obj, jclass clazz, jmethodID methodID, va_list args) { \
jvalue res; \
\
enterJVM(); \
res = methodID->invokeSpecial(obj, args); \
leaveJVM(); \
\
return res.val##j3type; \
} \
\
jtype JNICALL CallNonvirtual##id##MethodA(JNIEnv* env, jobject obj, jclass clazz, jmethodID methodID, const jvalue* args) { \
jvalue res; \
\
enterJVM(); \
res = methodID->invokeSpecial(obj, args); \
leaveJVM(); \
\
return res.val##j3type; \
}
#define defGetSetField(jtype, id, j3type) \
void JNICALL SetStatic##id##Field(JNIEnv* env, jclass clazz, jfieldID fieldID, jtype value) { \
enterJVM(); \
J3ObjectType::nativeClass(clazz)->asClass()->staticObjectSymbol()->handle()->set##j3type(fieldID, value); \
leaveJVM(); \
} \
\
jtype JNICALL GetStatic##id##Field(JNIEnv* env, jclass clazz, jfieldID fieldID) { \
jtype res; \
enterJVM(); \
res = J3ObjectType::nativeClass(clazz)->asClass()->staticObjectSymbol()->handle()->get##j3type(fieldID); \
leaveJVM(); \
return res; \
} \
\
void JNICALL Set##id##Field(JNIEnv* env, jobject obj, jfieldID fieldID, jtype val) { \
enterJVM(); \
obj->set##j3type(fieldID, val); \
leaveJVM(); \
} \
\
jtype JNICALL Get##id##Field(JNIEnv* env, jobject obj, jfieldID fieldID) { \
jtype res; \
enterJVM(); \
res = obj->get##j3type(fieldID); \
leaveJVM(); \
return res; \
}
#define defNewArray(jtype, id, j3type) \
jtype##Array JNICALL New##id##Array(JNIEnv* env, jsize len) { \
jtype##Array res; \
enterJVM(); \
res = J3ObjectHandle::doNewArray(J3Thread::get()->vm()->type##j3type->getArray(), len); \
leaveJVM(); \
return res; \
}
#define defArrayRegion(jtype, id, j3type) \
void JNICALL Set##id##ArrayRegion(JNIEnv* env, jtype##Array array, jsize start, jsize len, const jtype* buf) { \
enterJVM(); \
array->setRegion##j3type(start, buf, 0, len); \
leaveJVM(); \
} \
void JNICALL Get##id##ArrayRegion(JNIEnv* env, jtype##Array array, jsize start, jsize len, jtype* buf) { \
enterJVM(); \
array->getRegion##j3type(start, buf, 0, len); \
leaveJVM(); \
}
#define defJNIObj(jtype, id, j3type) \
defCall(jtype, id, j3type) \
defNonVirtualCall(jtype, id, j3type) \
defStaticCall(jtype, id, j3type) \
defGetSetField(jtype, id, j3type)
#define defJNI(jtype, id, j3type) \
defJNIObj(jtype, id, j3type) \
defNewArray(jtype, id, j3type) \
defArrayRegion(jtype, id, j3type)
defJNIObj(jobject, Object, Object);
defJNI (jboolean, Boolean, Boolean);
defJNI (jbyte, Byte, Byte);
defJNI (jchar, Char, Character);
defJNI (jshort, Short, Short);
defJNI (jint, Int, Integer);
defJNI (jlong, Long, Long);
defJNI (jfloat, Float, Float);
defJNI (jdouble, Double, Double);
void JNICALL CallVoidMethod(JNIEnv* env, jobject obj, jmethodID methodID, ...) {
va_list va;
va_start(va, methodID);
env->CallVoidMethodV(obj, methodID, va);
va_end(va);
}
void JNICALL CallVoidMethodV(JNIEnv* env, jobject obj, jmethodID methodID, va_list args) {
enterJVM();
methodID->invokeVirtual(obj, args);
leaveJVM();
}
void JNICALL CallVoidMethodA(JNIEnv* env, jobject obj, jmethodID methodID, const jvalue* args) {
enterJVM();
methodID->invokeVirtual(obj, args);
leaveJVM();
}
void JNICALL CallNonvirtualVoidMethod(JNIEnv* env, jobject obj, jclass clazz, jmethodID methodID, ...) {
va_list va;
va_start(va, methodID);
env->CallNonvirtualVoidMethodV(obj, clazz, methodID, va);
va_end(va);
}
void JNICALL CallNonvirtualVoidMethodV(JNIEnv* env, jobject obj, jclass clazz, jmethodID methodID, va_list args) {
enterJVM();
methodID->invokeSpecial(obj, args);
leaveJVM();
}
void JNICALL CallNonvirtualVoidMethodA(JNIEnv* env, jobject obj, jclass clazz, jmethodID methodID, const jvalue* args) {
enterJVM();
methodID->invokeSpecial(obj, args);
leaveJVM();
}
void JNICALL CallStaticVoidMethod(JNIEnv* env, jclass cls, jmethodID methodID, ...) {
va_list va;
va_start(va, methodID);
env->CallStaticVoidMethodV(cls, methodID, va);
va_end(va);
}
void JNICALL CallStaticVoidMethodV(JNIEnv* env, jclass cls, jmethodID methodID, va_list args) {
enterJVM();
methodID->invokeStatic(args);
leaveJVM();
}
void JNICALL CallStaticVoidMethodA(JNIEnv* env, jclass cls, jmethodID methodID, const jvalue* args) {
enterJVM();
methodID->invokeStatic(args);
leaveJVM();
}
jfieldID JNICALL GetFieldID(JNIEnv* env, jclass clazz, const char* name, const char* sig) {
jfieldID res;
enterJVM();
J3* vm = J3Thread::get()->vm();
J3Class* cl = J3ObjectType::nativeClass(clazz)->asClass();
res = cl->findField(0, vm->names()->get(name), cl->loader()->getTypeFromDescriptor(cl, vm->names()->get(sig)), 0);
leaveJVM();
return res;
}
jfieldID JNICALL GetStaticFieldID(JNIEnv* env, jclass clazz, const char* name, const char* sig) {
jfieldID res;
enterJVM();
J3* vm = J3Thread::get()->vm();
J3Class* cl = J3ObjectType::nativeClass(clazz)->asClass();
res = cl->findField(J3Cst::ACC_STATIC, vm->names()->get(name), cl->loader()->getTypeFromDescriptor(cl, vm->names()->get(sig)), 0);
leaveJVM();
return res;
}
jstring JNICALL NewString(JNIEnv* env, const jchar* unicode, jsize len) {
jstring res;
enterJVM();
J3* vm = J3Thread::get()->vm();
J3ObjectHandle* content = J3ObjectHandle::doNewArray(vm->typeCharacter->getArray(), len);
content->setRegionCharacter(0, unicode, 0, len);
res = J3ObjectHandle::doNewObject(vm->stringClass);
vm->stringClassInit->invokeSpecial(res, content, 0);
leaveJVM();
return res;
}
jsize JNICALL GetStringLength(JNIEnv* env, jstring str) {
jsize res;
enterJVM();
res = str->getObject(J3Thread::get()->vm()->stringClassValue)->arrayLength();
leaveJVM();
return res;
}
const jchar* JNICALL GetStringChars(JNIEnv* env, jstring str, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseStringChars(JNIEnv* env, jstring str, const jchar* chars) { enterJVM(); leaveJVM(); NYI(); }
jstring JNICALL NewStringUTF(JNIEnv* env, const char* utf) {
jstring res;
enterJVM();
res = J3Thread::get()->vm()->utfToString(utf);
leaveJVM();
return res;
}
jsize JNICALL GetStringUTFLength(JNIEnv* env, jstring str) {
jsize res;
enterJVM();
jobject content = str->getObject(J3Thread::get()->vm()->stringClassValue);
char buf[J3Utf16Decoder::maxSize(content)];
res = J3Utf16Decoder::decode(content, buf);
leaveJVM();
return res;
}
const char* JNICALL GetStringUTFChars(JNIEnv* env, jstring str, jboolean* isCopy) {
char* res;
enterJVM();
J3* vm = J3Thread::get()->vm();
jobject content = str->getObject(vm->stringClassValue);
res = new char[J3Utf16Decoder::maxSize(content)];
J3Utf16Decoder::decode(content, res);
if(isCopy)
*isCopy = JNI_TRUE;
leaveJVM();
return res;
}
void JNICALL ReleaseStringUTFChars(JNIEnv* env, jstring str, const char* chars) {
enterJVM();
delete[] chars;
leaveJVM();
}
jsize JNICALL GetArrayLength(JNIEnv* env, jarray array) {
jsize res;
enterJVM();
res = array->arrayLength();
leaveJVM();
return res;
}
jobjectArray JNICALL NewObjectArray(JNIEnv* env, jsize length, jclass elementClass, jobject initialElement) {
jobjectArray res;
enterJVM();
if((signed)length < 0) J3::negativeArraySizeException(length);
res = J3ObjectHandle::doNewArray(J3ObjectType::nativeClass(elementClass)->getArray(), length);
if(initialElement)
for(jsize i=0; i<length; i++)
res->setObjectAt(i, initialElement);
leaveJVM();
return res;
}
jobject JNICALL GetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index) {
jobject res;
enterJVM();
if(index >= array->arrayLength())
J3::arrayIndexOutOfBoundsException();
res = array->getObjectAt(index);
leaveJVM();
return res;
}
void JNICALL SetObjectArrayElement(JNIEnv* env, jobjectArray array, jsize index, jobject val) {
enterJVM();
if(index >= array->arrayLength())
J3::arrayIndexOutOfBoundsException();
if(!val->vt()->type()->isAssignableTo(array->vt()->type()->asArrayClass()->component()))
J3::arrayStoreException();
array->setObjectAt(index, val);
leaveJVM();
}
jboolean* JNICALL GetBooleanArrayElements(JNIEnv* env, jbooleanArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
jbyte* JNICALL GetByteArrayElements(JNIEnv* env, jbyteArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
jchar* JNICALL GetCharArrayElements(JNIEnv* env, jcharArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
jshort* JNICALL GetShortArrayElements(JNIEnv* env, jshortArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
jint* JNICALL GetIntArrayElements(JNIEnv* env, jintArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
jlong* JNICALL GetLongArrayElements(JNIEnv* env, jlongArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
jfloat* JNICALL GetFloatArrayElements(JNIEnv* env, jfloatArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
jdouble* JNICALL GetDoubleArrayElements(JNIEnv* env, jdoubleArray array, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseBooleanArrayElements(JNIEnv* env, jbooleanArray array, jboolean* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseByteArrayElements(JNIEnv* env, jbyteArray array, jbyte* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseCharArrayElements(JNIEnv* env, jcharArray array, jchar* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseShortArrayElements(JNIEnv* env, jshortArray array, jshort* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseIntArrayElements(JNIEnv* env, jintArray array, jint* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseLongArrayElements(JNIEnv* env, jlongArray array, jlong* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseFloatArrayElements(JNIEnv* env, jfloatArray array, jfloat* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseDoubleArrayElements(JNIEnv* env, jdoubleArray array, jdouble* elems, jint mode) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL RegisterNatives(JNIEnv* env, jclass clazz, const JNINativeMethod* methods, jint nMethods) {
enterJVM();
J3Class* cl = J3Class::nativeClass(clazz)->asClass();
J3* j3 = J3Thread::get()->vm();
for(jint i=0; i<nMethods; i++)
cl->registerNative(j3->names()->get(methods[i].name), j3->names()->get(methods[i].signature), methods[i].fnPtr);
leaveJVM();
return 0;
}
jint JNICALL UnregisterNatives(JNIEnv* env, jclass clazz) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL MonitorEnter(JNIEnv* env, jobject obj) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL MonitorExit(JNIEnv* env, jobject obj) { enterJVM(); leaveJVM(); NYI(); }
jint JNICALL GetJavaVM(JNIEnv* env, JavaVM** vm) {
*vm = J3Thread::get()->javaVM();
return 0;
}
void JNICALL GetStringRegion(JNIEnv* env, jstring str, jsize start, jsize len, jchar* buf) {
enterJVM();
str->getObject(J3Thread::get()->vm()->stringClassValue)->getRegionCharacter(start, buf, 0, len);
leaveJVM();
}
void JNICALL GetStringUTFRegion(JNIEnv* env, jstring str, jsize start, jsize len, char* buf) {
enterJVM();
J3* vm = J3Thread::get()->vm();
jobject content = str->getObject(vm->stringClassValue);
J3Utf16Decoder::decode(content, buf);
leaveJVM();
}
void* JNICALL GetPrimitiveArrayCritical(JNIEnv* env, jarray array, jboolean* isCopy) {
//GC::disable(); ?
if(isCopy)
*isCopy = JNI_FALSE;
return array ? array->array()->content() : 0;
}
void JNICALL ReleasePrimitiveArrayCritical(JNIEnv* env, jarray array, void* carray, jint mode) {
}
const jchar* JNICALL GetStringCritical(JNIEnv* env, jstring string, jboolean* isCopy) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL ReleaseStringCritical(JNIEnv* env, jstring string, const jchar* cstring) { enterJVM(); leaveJVM(); NYI(); }
jweak JNICALL NewWeakGlobalRef(JNIEnv* env, jobject obj) { enterJVM(); leaveJVM(); NYI(); }
void JNICALL DeleteWeakGlobalRef(JNIEnv* env, jweak ref) { enterJVM(); leaveJVM(); NYI(); }
jboolean JNICALL ExceptionCheck(JNIEnv* env) {
return J3Thread::get()->hasPendingException();
}
jobject JNICALL NewDirectByteBuffer(JNIEnv* env, void* address, jlong capacity) {
jobject res;
enterJVM();
res = J3Lib::newDirectByteBuffer(address, capacity);
leaveJVM();
return res;
}
void* JNICALL GetDirectBufferAddress(JNIEnv* env, jobject buf) { enterJVM(); leaveJVM(); NYI(); }
jlong JNICALL GetDirectBufferCapacity(JNIEnv* env, jobject buf) { enterJVM(); leaveJVM(); NYI(); }
jobjectRefType JNICALL GetObjectRefType(JNIEnv* env, jobject obj) { enterJVM(); leaveJVM(); NYI(); }
struct JNINativeInterface_ jniEnvTable = {
0,
0,
0,
0,
GetVersion,
DefineClass,
FindClass,
FromReflectedMethod,
FromReflectedField,
ToReflectedMethod,
GetSuperclass,
IsAssignableFrom,
ToReflectedField,
Throw,
ThrowNew,
ExceptionOccurred,
ExceptionDescribe,
ExceptionClear,
FatalError,
PushLocalFrame,
PopLocalFrame,
NewGlobalRef,
DeleteGlobalRef,
DeleteLocalRef,
IsSameObject,
NewLocalRef,
EnsureLocalCapacity,
AllocObject,
NewObject,
NewObjectV,
NewObjectA,
GetObjectClass,
IsInstanceOf,
GetMethodID,
CallObjectMethod,
CallObjectMethodV,
CallObjectMethodA,
CallBooleanMethod,
CallBooleanMethodV,
CallBooleanMethodA,
CallByteMethod,
CallByteMethodV,
CallByteMethodA,
CallCharMethod,
CallCharMethodV,
CallCharMethodA,
CallShortMethod,
CallShortMethodV,
CallShortMethodA,
CallIntMethod,
CallIntMethodV,
CallIntMethodA,
CallLongMethod,
CallLongMethodV,
CallLongMethodA,
CallFloatMethod,
CallFloatMethodV,
CallFloatMethodA,
CallDoubleMethod,
CallDoubleMethodV,
CallDoubleMethodA,
CallVoidMethod,
CallVoidMethodV,
CallVoidMethodA,
CallNonvirtualObjectMethod,
CallNonvirtualObjectMethodV,
CallNonvirtualObjectMethodA,
CallNonvirtualBooleanMethod,
CallNonvirtualBooleanMethodV,
CallNonvirtualBooleanMethodA,
CallNonvirtualByteMethod,
CallNonvirtualByteMethodV,
CallNonvirtualByteMethodA,
CallNonvirtualCharMethod,
CallNonvirtualCharMethodV,
CallNonvirtualCharMethodA,
CallNonvirtualShortMethod,
CallNonvirtualShortMethodV,
CallNonvirtualShortMethodA,
CallNonvirtualIntMethod,
CallNonvirtualIntMethodV,
CallNonvirtualIntMethodA,
CallNonvirtualLongMethod,
CallNonvirtualLongMethodV,
CallNonvirtualLongMethodA,
CallNonvirtualFloatMethod,
CallNonvirtualFloatMethodV,
CallNonvirtualFloatMethodA,
CallNonvirtualDoubleMethod,
CallNonvirtualDoubleMethodV,
CallNonvirtualDoubleMethodA,
CallNonvirtualVoidMethod,
CallNonvirtualVoidMethodV,
CallNonvirtualVoidMethodA,
GetFieldID,
GetObjectField,
GetBooleanField,
GetByteField,
GetCharField,
GetShortField,
GetIntField,
GetLongField,
GetFloatField,
GetDoubleField,
SetObjectField,
SetBooleanField,
SetByteField,
SetCharField,
SetShortField,
SetIntField,
SetLongField,
SetFloatField,
SetDoubleField,
GetStaticMethodID,
CallStaticObjectMethod,
CallStaticObjectMethodV,
CallStaticObjectMethodA,
CallStaticBooleanMethod,
CallStaticBooleanMethodV,
CallStaticBooleanMethodA,
CallStaticByteMethod,
CallStaticByteMethodV,
CallStaticByteMethodA,
CallStaticCharMethod,
CallStaticCharMethodV,
CallStaticCharMethodA,
CallStaticShortMethod,
CallStaticShortMethodV,
CallStaticShortMethodA,
CallStaticIntMethod,
CallStaticIntMethodV,
CallStaticIntMethodA,
CallStaticLongMethod,
CallStaticLongMethodV,
CallStaticLongMethodA,
CallStaticFloatMethod,
CallStaticFloatMethodV,
CallStaticFloatMethodA,
CallStaticDoubleMethod,
CallStaticDoubleMethodV,
CallStaticDoubleMethodA,
CallStaticVoidMethod,
CallStaticVoidMethodV,
CallStaticVoidMethodA,
GetStaticFieldID,
GetStaticObjectField,
GetStaticBooleanField,
GetStaticByteField,
GetStaticCharField,
GetStaticShortField,
GetStaticIntField,
GetStaticLongField,
GetStaticFloatField,
GetStaticDoubleField,
SetStaticObjectField,
SetStaticBooleanField,
SetStaticByteField,
SetStaticCharField,
SetStaticShortField,
SetStaticIntField,
SetStaticLongField,
SetStaticFloatField,
SetStaticDoubleField,
NewString,
GetStringLength,
GetStringChars,
ReleaseStringChars,
NewStringUTF,
GetStringUTFLength,
GetStringUTFChars,
ReleaseStringUTFChars,
GetArrayLength,
NewObjectArray,
GetObjectArrayElement,
SetObjectArrayElement,
NewBooleanArray,
NewByteArray,
NewCharArray,
NewShortArray,
NewIntArray,
NewLongArray,
NewFloatArray,
NewDoubleArray,
GetBooleanArrayElements,
GetByteArrayElements,
GetCharArrayElements,
GetShortArrayElements,
GetIntArrayElements,
GetLongArrayElements,
GetFloatArrayElements,
GetDoubleArrayElements,
ReleaseBooleanArrayElements,
ReleaseByteArrayElements,
ReleaseCharArrayElements,
ReleaseShortArrayElements,
ReleaseIntArrayElements,
ReleaseLongArrayElements,
ReleaseFloatArrayElements,
ReleaseDoubleArrayElements,
GetBooleanArrayRegion,
GetByteArrayRegion,
GetCharArrayRegion,
GetShortArrayRegion,
GetIntArrayRegion,
GetLongArrayRegion,
GetFloatArrayRegion,
GetDoubleArrayRegion,
SetBooleanArrayRegion,
SetByteArrayRegion,
SetCharArrayRegion,
SetShortArrayRegion,
SetIntArrayRegion,
SetLongArrayRegion,
SetFloatArrayRegion,
SetDoubleArrayRegion,
RegisterNatives,
UnregisterNatives,
MonitorEnter,
MonitorExit,
GetJavaVM,
GetStringRegion,
GetStringUTFRegion,
GetPrimitiveArrayCritical,
ReleasePrimitiveArrayCritical,
GetStringCritical,
ReleaseStringCritical,
NewWeakGlobalRef,
DeleteWeakGlobalRef,
ExceptionCheck,
NewDirectByteBuffer,
GetDirectBufferAddress,
GetDirectBufferCapacity,
GetObjectRefType
};
}