/* jni.h - JNI types and data structures Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser, M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, J. Wenninger This file is part of CACAO. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. Contact: cacao@complang.tuwien.ac.at Authors: ? $Id: jni.h 747 2003-12-13 22:10:17Z twisti $ */ #ifndef _JNI_H #define _JNI_H #include #include "global.h" #include "types.h" #define JNI_VERSION 0x00010002 #define JNIEXPORT #define JNICALL /* JNI datatypes */ #define jobject java_objectheader* #define jclass struct classinfo* #define jthrowable jobject #define jweak jobject #define jarray java_arrayheader* #define jlongArray java_longarray* #define jbooleanArray java_booleanarray* #define jintArray java_intarray* #define jcharArray java_chararray* #define jbyteArray java_bytearray* #define jshortArray java_shortarray* #define jdoubleArray java_doublearray* #define jfloatArray java_floatarray* #define jobjectArray java_objectarray* #define jstring jobject #define jint s4 #define jchar s2 #define jboolean u1 #define jbyte s1 #define jshort s2 #define jlong s8 #define jfloat float #define jdouble double #define jsize jint #define jfieldID fieldinfo* #define jmethodID methodinfo* typedef struct _JavaVM* JavaVM; struct _JavaVM{ void *(*reserved0) (); void *(*reserved1) (); void *(*reserved2) (); jint (*DestroyJavaVM) (JavaVM *); jint (*AttachCurrentThread) (JavaVM *, void **, void *); jint (*DetachCurrentThread) (JavaVM *); jint (*GetEnv) (JavaVM *, void **, jint); jint (*AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *); }; typedef union jvalue { jboolean z; jbyte b; jchar c; jshort s; jint i; jlong j; jfloat f; jdouble d; jobject l; } jvalue; /* JNI-Boolean */ #define JNI_FALSE 0 #define JNI_TRUE 1 /* native method name, signature and function pointer for use in RegisterNatives */ typedef struct { char *name; char *signature; void *fnPtr; } JNINativeMethod; /* JNI function table, contains functions for the following usages: Version Information Class Operations Exceptions Global and Local References Object Operations Accessing Fields of Objects Calling Instance Methods Accessing Static Fields Calling Static Methods String Operations Array Operations Registering Native Methods Monitor Operations Java VM Interface */ typedef struct JNI_Table *JNIEnv; struct JNI_Table { /* reserverd for future JNI-functions */ void *unused0; void *unused1; void *unused2; void *unused3; /* version information */ jint (*GetVersion) (JNIEnv*); /* class operations */ jclass (*DefineClass) (JNIEnv*, const char *name, jobject loader, const jbyte *buf, jsize len); jclass (*FindClass) (JNIEnv*, const char *name); jmethodID (*FromReflectedMethod) (JNIEnv*, jobject method); jfieldID (*FromReflectedField) (JNIEnv*, jobject field); jobject (*ToReflectedMethod) (JNIEnv*, jclass cls, jmethodID methodID, jboolean isStatic); jclass (*GetSuperclass) (JNIEnv*, jclass sub); jboolean (*IsAssignableForm) (JNIEnv*, jclass sub, jclass sup); jobject (*ToReflectedField) (JNIEnv*, jclass cls, jfieldID fieldID, jboolean isStatic); /* exceptions */ jint (*Throw) (JNIEnv*, jthrowable obj); jint (*ThrowNew) (JNIEnv*, jclass clazz, const char *msg); jthrowable (*ExceptionOccurred) (JNIEnv*); void (*ExceptionDescribe) (JNIEnv*); void (*ExceptionClear) (JNIEnv*); void (*FatalError) (JNIEnv*, const char *msg); /* global and local references */ jint (*PushLocalFrame) (JNIEnv*, jint capacity); jobject (*PopLocalFrame) (JNIEnv*, jobject result); jobject (*NewGlobalRef) (JNIEnv*, jobject lobj); void (*DeleteGlobalRef) (JNIEnv*, jobject gref); void (*DeleteLocalRef) (JNIEnv*, jobject obj); jboolean (*IsSameObject) (JNIEnv*, jobject obj1, jobject obj2); jobject (*NewLocalRef) (JNIEnv*, jobject ref); jint (*EnsureLocalCapacity) (JNIEnv*, jint capacity); /* object operations */ jobject (*AllocObject) (JNIEnv*, jclass clazz); jobject (*NewObject) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jobject (*NewObjectV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jobject (*NewObjectA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jclass (*GetObjectClass) (JNIEnv*, jobject obj); jboolean (*IsInstanceOf) (JNIEnv*, jobject obj, jclass clazz); jmethodID (*GetMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig); /* calling instance methods */ jobject (*CallObjectMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jobject (*CallObjectMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jobject (*CallObjectMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args); jboolean (*CallBooleanMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jboolean (*CallBooleanMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jboolean (*CallBooleanMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args); jbyte (*CallByteMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jbyte (*CallByteMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jbyte (*CallByteMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args); jchar (*CallCharMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jchar (*CallCharMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jchar (*CallCharMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args); jshort (*CallShortMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jshort (*CallShortMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jshort (*CallShortMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args); jint (*CallIntMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jint (*CallIntMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jint (*CallIntMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args); jlong (*CallLongMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jlong (*CallLongMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jlong (*CallLongMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args); jfloat (*CallFloatMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jfloat (*CallFloatMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jfloat (*CallFloatMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args); jdouble (*CallDoubleMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); jdouble (*CallDoubleMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); jdouble (*CallDoubleMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args); void (*CallVoidMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...); void (*CallVoidMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args); void (*CallVoidMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args); jobject (*CallNonvirtualObjectMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jobject (*CallNonvirtualObjectMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jobject (*CallNonvirtualObjectMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args); jboolean (*CallNonvirtualBooleanMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args); jbyte (*CallNonvirtualByteMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jbyte (*CallNonvirtualByteMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jbyte (*CallNonvirtualByteMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); jchar (*CallNonvirtualCharMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jchar (*CallNonvirtualCharMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jchar (*CallNonvirtualCharMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); jshort (*CallNonvirtualShortMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jshort (*CallNonvirtualShortMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jshort (*CallNonvirtualShortMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); jint (*CallNonvirtualIntMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jint (*CallNonvirtualIntMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jint (*CallNonvirtualIntMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); jlong (*CallNonvirtualLongMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jlong (*CallNonvirtualLongMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jlong (*CallNonvirtualLongMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); jfloat (*CallNonvirtualFloatMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jfloat (*CallNonvirtualFloatMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jfloat (*CallNonvirtualFloatMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); jdouble (*CallNonvirtualDoubleMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args); void (*CallNonvirtualVoidMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...); void (*CallNonvirtualVoidMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args); void (*CallNonvirtualVoidMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args); /* accessing fields */ jfieldID (*GetFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig); jobject (*GetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID); jboolean (*GetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID); jbyte (*GetByteField) (JNIEnv*, jobject obj, jfieldID fieldID); jchar (*GetCharField) (JNIEnv*, jobject obj, jfieldID fieldID); jshort (*GetShortField) (JNIEnv*, jobject obj, jfieldID fieldID); jint (*GetIntField) (JNIEnv*, jobject obj, jfieldID fieldID); jlong (*GetLongField) (JNIEnv*, jobject obj, jfieldID fieldID); jfloat (*GetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID); jdouble (*GetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID); void (*SetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID, jobject val); void (*SetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID, jboolean val); void (*SetByteField) (JNIEnv*, jobject obj, jfieldID fieldID, jbyte val); void (*SetCharField) (JNIEnv*, jobject obj, jfieldID fieldID, jchar val); void (*SetShortField) (JNIEnv*, jobject obj, jfieldID fieldID, jshort val); void (*SetIntField) (JNIEnv*, jobject obj, jfieldID fieldID, jint val); void (*SetLongField) (JNIEnv*, jobject obj, jfieldID fieldID, jlong val); void (*SetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID, jfloat val); void (*SetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID, jdouble val); /* calling static methods */ jmethodID (*GetStaticMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig); jobject (*CallStaticObjectMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jobject (*CallStaticObjectMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jobject (*CallStaticObjectMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jboolean (*CallStaticBooleanMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jboolean (*CallStaticBooleanMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jboolean (*CallStaticBooleanMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jbyte (*CallStaticByteMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jbyte (*CallStaticByteMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jbyte (*CallStaticByteMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jchar (*CallStaticCharMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jchar (*CallStaticCharMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jchar (*CallStaticCharMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jshort (*CallStaticShortMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jshort (*CallStaticShortMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jshort (*CallStaticShortMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jint (*CallStaticIntMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jint (*CallStaticIntMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jint (*CallStaticIntMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jlong (*CallStaticLongMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jlong (*CallStaticLongMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jlong (*CallStaticLongMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jfloat (*CallStaticFloatMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jfloat (*CallStaticFloatMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jfloat (*CallStaticFloatMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); jdouble (*CallStaticDoubleMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...); jdouble (*CallStaticDoubleMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args); jdouble (*CallStaticDoubleMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args); void (*CallStaticVoidMethod) (JNIEnv*, jclass cls, jmethodID methodID, ...); void (*CallStaticVoidMethodV) (JNIEnv*, jclass cls, jmethodID methodID, va_list args); void (*CallStaticVoidMethodA) (JNIEnv*, jclass cls, jmethodID methodID, jvalue * args); /* accessing static fields */ jfieldID (*GetStaticFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig); jobject (*GetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID); jboolean (*GetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID); jbyte (*GetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID); jchar (*GetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID); jshort (*GetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID); jint (*GetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID); jlong (*GetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID); jfloat (*GetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID); jdouble (*GetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID); void (*SetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID, jobject value); void (*SetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID, jboolean value); void (*SetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID, jbyte value); void (*SetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID, jchar value); void (*SetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID, jshort value); void (*SetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID, jint value); void (*SetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID, jlong value); void (*SetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID, jfloat value); void (*SetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID, jdouble value); /* string operations */ jstring (*NewString) (JNIEnv*, const jchar *unicode, jsize len); jsize (*GetStringLength) (JNIEnv*, jstring str); const jchar *(*GetStringChars) (JNIEnv*, jstring str, jboolean *isCopy); void (*ReleaseStringChars) (JNIEnv*, jstring str, const jchar *chars); jstring (*NewStringUTF) (JNIEnv*, const char *utf); jsize (*GetStringUTFLength) (JNIEnv*, jstring str); const char* (*GetStringUTFChars) (JNIEnv*, jstring str, jboolean *isCopy); void (*ReleaseStringUTFChars) (JNIEnv*, jstring str, const char* chars); /* array operations */ jsize (*GetArrayLength) (JNIEnv*, jarray array); jobjectArray (*NewObjectArray) (JNIEnv*, jsize len, jclass clazz, jobject init); jobject (*GetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index); void (*SetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index, jobject val); jbooleanArray (*NewBooleanArray) (JNIEnv*, jsize len); jbyteArray (*NewByteArray) (JNIEnv*, jsize len); jcharArray (*NewCharArray) (JNIEnv*, jsize len); jshortArray (*NewShortArray) (JNIEnv*, jsize len); jintArray (*NewIntArray) (JNIEnv*, jsize len); jlongArray (*NewLongArray) (JNIEnv*, jsize len); jfloatArray (*NewFloatArray) (JNIEnv*, jsize len); jdoubleArray (*NewDoubleArray) (JNIEnv*, jsize len); jboolean * (*GetBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *isCopy); jbyte * (*GetByteArrayElements) (JNIEnv*, jbyteArray array, jboolean *isCopy); jchar * (*GetCharArrayElements) (JNIEnv*, jcharArray array, jboolean *isCopy); jshort * (*GetShortArrayElements) (JNIEnv*, jshortArray array, jboolean *isCopy); jint * (*GetIntArrayElements) (JNIEnv*, jintArray array, jboolean *isCopy); jlong * (*GetLongArrayElements) (JNIEnv*, jlongArray array, jboolean *isCopy); jfloat * (*GetFloatArrayElements) (JNIEnv*, jfloatArray array, jboolean *isCopy); jdouble * (*GetDoubleArrayElements) (JNIEnv*, jdoubleArray array, jboolean *isCopy); void (*ReleaseBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *elems, jint mode); void (*ReleaseByteArrayElements) (JNIEnv*, jbyteArray array, jbyte *elems, jint mode); void (*ReleaseCharArrayElements) (JNIEnv*, jcharArray array, jchar *elems, jint mode); void (*ReleaseShortArrayElements) (JNIEnv*, jshortArray array, jshort *elems, jint mode); void (*ReleaseIntArrayElements) (JNIEnv*, jintArray array, jint *elems, jint mode); void (*ReleaseLongArrayElements) (JNIEnv*, jlongArray array, jlong *elems, jint mode); void (*ReleaseFloatArrayElements) (JNIEnv*, jfloatArray array, jfloat *elems, jint mode); void (*ReleaseDoubleArrayElements) (JNIEnv*, jdoubleArray array, jdouble *elems, jint mode); void (*GetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf); void (*GetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf); void (*GetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf); void (*GetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf); void (*GetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf); void (*GetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf); void (*GetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf); void (*GetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf); void (*SetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf); void (*SetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf); void (*SetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf); void (*SetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf); void (*SetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf); void (*SetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf); void (*SetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf); void (*SetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf); /* registering native methods */ jint (*RegisterNatives) (JNIEnv*, jclass clazz, const JNINativeMethod *methods, jint nMethods); jint (*UnregisterNatives) (JNIEnv*, jclass clazz); /* monitor operations */ jint (*MonitorEnter) (JNIEnv*, jobject obj); jint (*MonitorExit) (JNIEnv*, jobject obj); /* JavaVM interface */ jint (*GetJavaVM) (JNIEnv*, JavaVM **vm); void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf); void (*GetStringUTFRegion) (JNIEnv*, jstring str, jsize start, jsize len, char *buf); void * (*GetPrimitiveArrayCritical) (JNIEnv*, jarray array, jboolean *isCopy); void (*ReleasePrimitiveArrayCritical) (JNIEnv*, jarray array, void *carray, jint mode); const jchar * (*GetStringCritical) (JNIEnv*, jstring string, jboolean *isCopy); void (*ReleaseStringCritical) (JNIEnv*, jstring string, const jchar *cstring); jweak (*NewWeakGlobalRef) (JNIEnv*, jobject obj); void (*DeleteWeakGlobalRef) (JNIEnv*, jweak ref); jboolean (*ExceptionCheck) (JNIEnv*); }; /* the active JNI function table */ extern JNIEnv env; extern JavaVM javaVM; extern struct JNI_Table envTable; /* function prototypes */ jfieldID getFieldID_critical(JNIEnv *env, jclass clazz, char *name, 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); #define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val; #define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset)) #define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val); jobject *jni_method_invokeNativeHelper(JNIEnv *env,struct methodinfo *mi,jobject obj, java_objectarray *params); #endif /* _JNI_H */ /* * These are local overrides for various environment variables in Emacs. * Please do not remove this and leave it at the end of the file, where * Emacs will automagically detect them. * --------------------------------------------------------------------- * Local variables: * mode: c * indent-tabs-mode: t * c-basic-offset: 4 * tab-width: 4 * End: */