Created
July 20, 2012 20:26
-
-
Save aji/3153029 to your computer and use it in GitHub Desktop.
putting the JNI into no-bullshit mode
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* The C JNIEnv typedef looks like this: */ | |
typedef const struct JNINativeInterface_ *JNIEnv; | |
/* These are the useful members of the struct JNINativeInterface_ with a | |
smidge of sed to clear away the clutter. Additionally, each /(.*)V/ | |
method has matching "\1A" and "\1" alternatives, i.e., if you see this: | |
jobject (*NewObjectV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
Then it really means this: | |
jobject (*NewObject) (JNIEnv *env, jclass clazz, jmethodID methodID, ...); | |
jobject (*NewObjectV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jobject (*NewObjectA) (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args); | |
This was done for clarity/brevity. | |
*/ | |
jint (*GetVersion)(JNIEnv *env); | |
jclass (*DefineClass) (JNIEnv *env, const char *name, jobject loader, const jbyte *buf, jsize len); | |
jclass (*FindClass) (JNIEnv *env, const char *name); | |
jmethodID (*FromReflectedMethod) (JNIEnv *env, jobject method); | |
jfieldID (*FromReflectedField) (JNIEnv *env, jobject field); | |
jobject (*ToReflectedMethod) (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic); | |
jclass (*GetSuperclass) (JNIEnv *env, jclass sub); | |
jboolean (*IsAssignableFrom) (JNIEnv *env, jclass sub, jclass sup); | |
jobject (*ToReflectedField) (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic); | |
jint (*Throw) (JNIEnv *env, jthrowable obj); | |
jint (*ThrowNew) (JNIEnv *env, jclass clazz, const char *msg); | |
jthrowable (*ExceptionOccurred) (JNIEnv *env); | |
void (*ExceptionDescribe) (JNIEnv *env); | |
void (*ExceptionClear) (JNIEnv *env); | |
void (*FatalError) (JNIEnv *env, const char *msg); | |
jint (*PushLocalFrame) (JNIEnv *env, jint capacity); | |
jobject (*PopLocalFrame) (JNIEnv *env, jobject result); | |
jobject (*NewGlobalRef) (JNIEnv *env, jobject lobj); | |
void (*DeleteGlobalRef) (JNIEnv *env, jobject gref); | |
void (*DeleteLocalRef) (JNIEnv *env, jobject obj); | |
jboolean (*IsSameObject) (JNIEnv *env, jobject obj1, jobject obj2); | |
jobject (*NewLocalRef) (JNIEnv *env, jobject ref); | |
jint (*EnsureLocalCapacity) (JNIEnv *env, jint capacity); | |
jobject (*AllocObject) (JNIEnv *env, jclass clazz); | |
jobject (*NewObjectV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jclass (*GetObjectClass) (JNIEnv *env, jobject obj); | |
jboolean (*IsInstanceOf) (JNIEnv *env, jobject obj, jclass clazz); | |
jmethodID (*GetMethodID) (JNIEnv *env, jclass clazz, const char *name, const char *sig); | |
jobject (*CallObjectMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jboolean (*CallBooleanMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jbyte (*CallByteMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jchar (*CallCharMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jshort (*CallShortMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jint (*CallIntMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jlong (*CallLongMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jfloat (*CallFloatMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jdouble (*CallDoubleMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
void (*CallVoidMethodV) (JNIEnv *env, jobject obj, jmethodID methodID, va_list args); | |
jobject (*CallNonvirtualObjectMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jbyte (*CallNonvirtualByteMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jchar (*CallNonvirtualCharMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jshort (*CallNonvirtualShortMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jint (*CallNonvirtualIntMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jlong (*CallNonvirtualLongMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jfloat (*CallNonvirtualFloatMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
void (*CallNonvirtualVoidMethodV) (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, va_list args); | |
jfieldID (*GetFieldID) (JNIEnv *env, jclass clazz, const char *name, const char *sig); | |
jobject (*GetObjectField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jboolean (*GetBooleanField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jbyte (*GetByteField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jchar (*GetCharField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jshort (*GetShortField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jint (*GetIntField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jlong (*GetLongField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jfloat (*GetFloatField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
jdouble (*GetDoubleField) (JNIEnv *env, jobject obj, jfieldID fieldID); | |
void (*SetObjectField) (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val); | |
void (*SetBooleanField) (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val); | |
void (*SetByteField) (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val); | |
void (*SetCharField) (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val); | |
void (*SetShortField) (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val); | |
void (*SetIntField) (JNIEnv *env, jobject obj, jfieldID fieldID, jint val); | |
void (*SetLongField) (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val); | |
void (*SetFloatField) (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val); | |
void (*SetDoubleField) (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val); | |
jmethodID (*GetStaticMethodID) (JNIEnv *env, jclass clazz, const char *name, const char *sig); | |
jobject (*CallStaticObjectMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jboolean (*CallStaticBooleanMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jbyte (*CallStaticByteMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jchar (*CallStaticCharMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jshort (*CallStaticShortMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jint (*CallStaticIntMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jlong (*CallStaticLongMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jfloat (*CallStaticFloatMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
jdouble (*CallStaticDoubleMethodV) (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args); | |
void (*CallStaticVoidMethodV) (JNIEnv *env, jclass cls, jmethodID methodID, va_list args); | |
jfieldID (*GetStaticFieldID) (JNIEnv *env, jclass clazz, const char *name, const char *sig); | |
jobject (*GetStaticObjectField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jboolean (*GetStaticBooleanField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jbyte (*GetStaticByteField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jchar (*GetStaticCharField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jshort (*GetStaticShortField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jint (*GetStaticIntField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jlong (*GetStaticLongField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jfloat (*GetStaticFloatField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
jdouble (*GetStaticDoubleField) (JNIEnv *env, jclass clazz, jfieldID fieldID); | |
void (*SetStaticObjectField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value); | |
void (*SetStaticBooleanField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value); | |
void (*SetStaticByteField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value); | |
void (*SetStaticCharField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value); | |
void (*SetStaticShortField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value); | |
void (*SetStaticIntField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value); | |
void (*SetStaticLongField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value); | |
void (*SetStaticFloatField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value); | |
void (*SetStaticDoubleField) (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value); | |
jstring (*NewString) (JNIEnv *env, const jchar *unicode, jsize len); | |
jsize (*GetStringLength) (JNIEnv *env, jstring str); | |
const jchar *(*GetStringChars) (JNIEnv *env, jstring str, jboolean *isCopy); | |
void (*ReleaseStringChars) (JNIEnv *env, jstring str, const jchar *chars); | |
jstring (*NewStringUTF) (JNIEnv *env, const char *utf); | |
jsize (*GetStringUTFLength) (JNIEnv *env, jstring str); | |
const char* (*GetStringUTFChars) (JNIEnv *env, jstring str, jboolean *isCopy); | |
void (*ReleaseStringUTFChars) (JNIEnv *env, jstring str, const char* chars); | |
jsize (*GetArrayLength) (JNIEnv *env, jarray array); | |
jobjectArray (*NewObjectArray) (JNIEnv *env, jsize len, jclass clazz, jobject init); | |
jobject (*GetObjectArrayElement) (JNIEnv *env, jobjectArray array, jsize index); | |
void (*SetObjectArrayElement) (JNIEnv *env, jobjectArray array, jsize index, jobject val); | |
jbooleanArray (*NewBooleanArray) (JNIEnv *env, jsize len); | |
jbyteArray (*NewByteArray) (JNIEnv *env, jsize len); | |
jcharArray (*NewCharArray) (JNIEnv *env, jsize len); | |
jshortArray (*NewShortArray) (JNIEnv *env, jsize len); | |
jintArray (*NewIntArray) (JNIEnv *env, jsize len); | |
jlongArray (*NewLongArray) (JNIEnv *env, jsize len); | |
jfloatArray (*NewFloatArray) (JNIEnv *env, jsize len); | |
jdoubleArray (*NewDoubleArray) (JNIEnv *env, jsize len); | |
jboolean * (*GetBooleanArrayElements) (JNIEnv *env, jbooleanArray array, jboolean *isCopy); | |
jbyte * (*GetByteArrayElements) (JNIEnv *env, jbyteArray array, jboolean *isCopy); | |
jchar * (*GetCharArrayElements) (JNIEnv *env, jcharArray array, jboolean *isCopy); | |
jshort * (*GetShortArrayElements) (JNIEnv *env, jshortArray array, jboolean *isCopy); | |
jint * (*GetIntArrayElements) (JNIEnv *env, jintArray array, jboolean *isCopy); | |
jlong * (*GetLongArrayElements) (JNIEnv *env, jlongArray array, jboolean *isCopy); | |
jfloat * (*GetFloatArrayElements) (JNIEnv *env, jfloatArray array, jboolean *isCopy); | |
jdouble * (*GetDoubleArrayElements) (JNIEnv *env, jdoubleArray array, jboolean *isCopy); | |
void (*ReleaseBooleanArrayElements) (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode); | |
void (*ReleaseByteArrayElements) (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode); | |
void (*ReleaseCharArrayElements) (JNIEnv *env, jcharArray array, jchar *elems, jint mode); | |
void (*ReleaseShortArrayElements) (JNIEnv *env, jshortArray array, jshort *elems, jint mode); | |
void (*ReleaseIntArrayElements) (JNIEnv *env, jintArray array, jint *elems, jint mode); | |
void (*ReleaseLongArrayElements) (JNIEnv *env, jlongArray array, jlong *elems, jint mode); | |
void (*ReleaseFloatArrayElements) (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode); | |
void (*ReleaseDoubleArrayElements) (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode); | |
void (*GetBooleanArrayRegion) (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf); | |
void (*GetByteArrayRegion) (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf); | |
void (*GetCharArrayRegion) (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf); | |
void (*GetShortArrayRegion) (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf); | |
void (*GetIntArrayRegion) (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf); | |
void (*GetLongArrayRegion) (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf); | |
void (*GetFloatArrayRegion) (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf); | |
void (*GetDoubleArrayRegion) (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf); | |
void (*SetBooleanArrayRegion) (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf); | |
void (*SetByteArrayRegion) (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf); | |
void (*SetCharArrayRegion) (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf); | |
void (*SetShortArrayRegion) (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf); | |
void (*SetIntArrayRegion) (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf); | |
void (*SetLongArrayRegion) (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf); | |
void (*SetFloatArrayRegion) (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf); | |
void (*SetDoubleArrayRegion) (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf); | |
jint (*RegisterNatives) (JNIEnv *env, jclass clazz, const JNINativeMethod *methods, jint nMethods); | |
jint (*UnregisterNatives) (JNIEnv *env, jclass clazz); | |
jint (*MonitorEnter) (JNIEnv *env, jobject obj); | |
jint (*MonitorExit) (JNIEnv *env, jobject obj); | |
jint (*GetJavaVM) (JNIEnv *env, JavaVM **vm); | |
void (*GetStringRegion) (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf); | |
void (*GetStringUTFRegion) (JNIEnv *env, jstring str, jsize start, jsize len, char *buf); | |
void * (*GetPrimitiveArrayCritical) (JNIEnv *env, jarray array, jboolean *isCopy); | |
void (*ReleasePrimitiveArrayCritical) (JNIEnv *env, jarray array, void *carray, jint mode); | |
const jchar * (*GetStringCritical) (JNIEnv *env, jstring string, jboolean *isCopy); | |
void (*ReleaseStringCritical) (JNIEnv *env, jstring string, const jchar *cstring); | |
jweak (*NewWeakGlobalRef) (JNIEnv *env, jobject obj); | |
void (*DeleteWeakGlobalRef) (JNIEnv *env, jweak ref); | |
jboolean (*ExceptionCheck) (JNIEnv *env); | |
jobject (*NewDirectByteBuffer) (JNIEnv* env, void* address, jlong capacity); | |
void* (*GetDirectBufferAddress) (JNIEnv* env, jobject buf); | |
jlong (*GetDirectBufferCapacity) (JNIEnv* env, jobject buf); | |
/* New JNI 1.6 Features */ | |
jobjectRefType (*GetObjectRefType) (JNIEnv* env, jobject obj); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment