1 /* jni.h - JNI types and data structures
3 Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
4 R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
5 M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
6 P. Tomsich, J. Wenninger
8 This file is part of CACAO.
10 This program is free software; you can redistribute it and/or
11 modify it under the terms of the GNU General Public License as
12 published by the Free Software Foundation; either version 2, or (at
13 your option) any later version.
15 This program is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with this program; if not, write to the Free Software
22 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
25 Contact: cacao@complang.tuwien.ac.at
29 $Id: jni.h 747 2003-12-13 22:10:17Z twisti $
42 #define JNI_VERSION 0x00010002
50 #define jobject java_objectheader*
51 #define jclass struct classinfo*
52 #define jthrowable jobject
54 #define jarray java_arrayheader*
55 #define jlongArray java_longarray*
56 #define jbooleanArray java_booleanarray*
57 #define jintArray java_intarray*
58 #define jcharArray java_chararray*
59 #define jbyteArray java_bytearray*
60 #define jshortArray java_shortarray*
61 #define jdoubleArray java_doublearray*
62 #define jfloatArray java_floatarray*
63 #define jobjectArray java_objectarray*
64 #define jstring jobject
72 #define jdouble double
74 #define jfieldID fieldinfo*
75 #define jmethodID methodinfo*
78 typedef struct _JavaVM* JavaVM;
81 void *(*reserved0) ();
82 void *(*reserved1) ();
83 void *(*reserved2) ();
84 jint (*DestroyJavaVM) (JavaVM *);
85 jint (*AttachCurrentThread) (JavaVM *, void **, void *);
86 jint (*DetachCurrentThread) (JavaVM *);
87 jint (*GetEnv) (JavaVM *, void **, jint);
88 jint (*AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *);
93 typedef union jvalue {
110 /* native method name, signature and function pointer for use in RegisterNatives */
120 JNI function table, contains functions for the following usages:
125 Global and Local References
127 Accessing Fields of Objects
128 Calling Instance Methods
129 Accessing Static Fields
130 Calling Static Methods
133 Registering Native Methods
138 typedef struct JNI_Table *JNIEnv;
142 /* reserverd for future JNI-functions */
148 /* version information */
150 jint (*GetVersion) (JNIEnv*);
152 /* class operations */
154 jclass (*DefineClass) (JNIEnv*, const char *name, jobject loader, const jbyte *buf, jsize len);
155 jclass (*FindClass) (JNIEnv*, const char *name);
157 jmethodID (*FromReflectedMethod) (JNIEnv*, jobject method);
158 jfieldID (*FromReflectedField) (JNIEnv*, jobject field);
160 jobject (*ToReflectedMethod) (JNIEnv*, jclass cls, jmethodID methodID, jboolean isStatic);
162 jclass (*GetSuperclass) (JNIEnv*, jclass sub);
163 jboolean (*IsAssignableForm) (JNIEnv*, jclass sub, jclass sup);
165 jobject (*ToReflectedField) (JNIEnv*, jclass cls, jfieldID fieldID, jboolean isStatic);
169 jint (*Throw) (JNIEnv*, jthrowable obj);
170 jint (*ThrowNew) (JNIEnv*, jclass clazz, const char *msg);
171 jthrowable (*ExceptionOccurred) (JNIEnv*);
172 void (*ExceptionDescribe) (JNIEnv*);
173 void (*ExceptionClear) (JNIEnv*);
174 void (*FatalError) (JNIEnv*, const char *msg);
176 /* global and local references */
178 jint (*PushLocalFrame) (JNIEnv*, jint capacity);
179 jobject (*PopLocalFrame) (JNIEnv*, jobject result);
181 jobject (*NewGlobalRef) (JNIEnv*, jobject lobj);
182 void (*DeleteGlobalRef) (JNIEnv*, jobject gref);
183 void (*DeleteLocalRef) (JNIEnv*, jobject obj);
184 jboolean (*IsSameObject) (JNIEnv*, jobject obj1, jobject obj2);
185 jobject (*NewLocalRef) (JNIEnv*, jobject ref);
186 jint (*EnsureLocalCapacity) (JNIEnv*, jint capacity);
188 /* object operations */
190 jobject (*AllocObject) (JNIEnv*, jclass clazz);
191 jobject (*NewObject) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
192 jobject (*NewObjectV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
193 jobject (*NewObjectA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
195 jclass (*GetObjectClass) (JNIEnv*, jobject obj);
196 jboolean (*IsInstanceOf) (JNIEnv*, jobject obj, jclass clazz);
198 jmethodID (*GetMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
200 /* calling instance methods */
202 jobject (*CallObjectMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
203 jobject (*CallObjectMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
204 jobject (*CallObjectMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
206 jboolean (*CallBooleanMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
207 jboolean (*CallBooleanMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
208 jboolean (*CallBooleanMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
210 jbyte (*CallByteMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
211 jbyte (*CallByteMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
212 jbyte (*CallByteMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
214 jchar (*CallCharMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
215 jchar (*CallCharMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
216 jchar (*CallCharMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
218 jshort (*CallShortMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
219 jshort (*CallShortMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
220 jshort (*CallShortMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
222 jint (*CallIntMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
223 jint (*CallIntMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
224 jint (*CallIntMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
226 jlong (*CallLongMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
227 jlong (*CallLongMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
228 jlong (*CallLongMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
230 jfloat (*CallFloatMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
231 jfloat (*CallFloatMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
232 jfloat (*CallFloatMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
234 jdouble (*CallDoubleMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
235 jdouble (*CallDoubleMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
236 jdouble (*CallDoubleMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
238 void (*CallVoidMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
239 void (*CallVoidMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
240 void (*CallVoidMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
242 jobject (*CallNonvirtualObjectMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
243 jobject (*CallNonvirtualObjectMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
244 jobject (*CallNonvirtualObjectMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
246 jboolean (*CallNonvirtualBooleanMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
247 jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
248 jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
250 jbyte (*CallNonvirtualByteMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
251 jbyte (*CallNonvirtualByteMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
252 jbyte (*CallNonvirtualByteMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
254 jchar (*CallNonvirtualCharMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
255 jchar (*CallNonvirtualCharMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
256 jchar (*CallNonvirtualCharMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
258 jshort (*CallNonvirtualShortMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
259 jshort (*CallNonvirtualShortMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
260 jshort (*CallNonvirtualShortMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
262 jint (*CallNonvirtualIntMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
263 jint (*CallNonvirtualIntMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
264 jint (*CallNonvirtualIntMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
266 jlong (*CallNonvirtualLongMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
267 jlong (*CallNonvirtualLongMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
268 jlong (*CallNonvirtualLongMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
270 jfloat (*CallNonvirtualFloatMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
271 jfloat (*CallNonvirtualFloatMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
272 jfloat (*CallNonvirtualFloatMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
274 jdouble (*CallNonvirtualDoubleMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
275 jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
276 jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
278 void (*CallNonvirtualVoidMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
279 void (*CallNonvirtualVoidMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
280 void (*CallNonvirtualVoidMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
282 /* accessing fields */
284 jfieldID (*GetFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
286 jobject (*GetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID);
287 jboolean (*GetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID);
288 jbyte (*GetByteField) (JNIEnv*, jobject obj, jfieldID fieldID);
289 jchar (*GetCharField) (JNIEnv*, jobject obj, jfieldID fieldID);
290 jshort (*GetShortField) (JNIEnv*, jobject obj, jfieldID fieldID);
291 jint (*GetIntField) (JNIEnv*, jobject obj, jfieldID fieldID);
292 jlong (*GetLongField) (JNIEnv*, jobject obj, jfieldID fieldID);
293 jfloat (*GetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID);
294 jdouble (*GetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID);
296 void (*SetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID, jobject val);
297 void (*SetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID, jboolean val);
298 void (*SetByteField) (JNIEnv*, jobject obj, jfieldID fieldID, jbyte val);
299 void (*SetCharField) (JNIEnv*, jobject obj, jfieldID fieldID, jchar val);
300 void (*SetShortField) (JNIEnv*, jobject obj, jfieldID fieldID, jshort val);
301 void (*SetIntField) (JNIEnv*, jobject obj, jfieldID fieldID, jint val);
302 void (*SetLongField) (JNIEnv*, jobject obj, jfieldID fieldID, jlong val);
303 void (*SetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID, jfloat val);
304 void (*SetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID, jdouble val);
306 /* calling static methods */
308 jmethodID (*GetStaticMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
310 jobject (*CallStaticObjectMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
311 jobject (*CallStaticObjectMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
312 jobject (*CallStaticObjectMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
314 jboolean (*CallStaticBooleanMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
315 jboolean (*CallStaticBooleanMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
316 jboolean (*CallStaticBooleanMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
318 jbyte (*CallStaticByteMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
319 jbyte (*CallStaticByteMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
320 jbyte (*CallStaticByteMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
322 jchar (*CallStaticCharMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
323 jchar (*CallStaticCharMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
324 jchar (*CallStaticCharMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
326 jshort (*CallStaticShortMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
327 jshort (*CallStaticShortMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
328 jshort (*CallStaticShortMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
330 jint (*CallStaticIntMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
331 jint (*CallStaticIntMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
332 jint (*CallStaticIntMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
334 jlong (*CallStaticLongMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
335 jlong (*CallStaticLongMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
336 jlong (*CallStaticLongMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
338 jfloat (*CallStaticFloatMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
339 jfloat (*CallStaticFloatMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
340 jfloat (*CallStaticFloatMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
342 jdouble (*CallStaticDoubleMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
343 jdouble (*CallStaticDoubleMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
344 jdouble (*CallStaticDoubleMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
346 void (*CallStaticVoidMethod) (JNIEnv*, jclass cls, jmethodID methodID, ...);
347 void (*CallStaticVoidMethodV) (JNIEnv*, jclass cls, jmethodID methodID, va_list args);
348 void (*CallStaticVoidMethodA) (JNIEnv*, jclass cls, jmethodID methodID, jvalue * args);
350 /* accessing static fields */
352 jfieldID (*GetStaticFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
353 jobject (*GetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID);
354 jboolean (*GetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID);
355 jbyte (*GetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID);
356 jchar (*GetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID);
357 jshort (*GetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID);
358 jint (*GetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID);
359 jlong (*GetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID);
360 jfloat (*GetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID);
361 jdouble (*GetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID);
363 void (*SetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID, jobject value);
364 void (*SetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID, jboolean value);
365 void (*SetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID, jbyte value);
366 void (*SetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID, jchar value);
367 void (*SetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID, jshort value);
368 void (*SetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID, jint value);
369 void (*SetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID, jlong value);
370 void (*SetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID, jfloat value);
371 void (*SetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID, jdouble value);
373 /* string operations */
375 jstring (*NewString) (JNIEnv*, const jchar *unicode, jsize len);
376 jsize (*GetStringLength) (JNIEnv*, jstring str);
377 const jchar *(*GetStringChars) (JNIEnv*, jstring str, jboolean *isCopy);
378 void (*ReleaseStringChars) (JNIEnv*, jstring str, const jchar *chars);
380 jstring (*NewStringUTF) (JNIEnv*, const char *utf);
381 jsize (*GetStringUTFLength) (JNIEnv*, jstring str);
382 const char* (*GetStringUTFChars) (JNIEnv*, jstring str, jboolean *isCopy);
383 void (*ReleaseStringUTFChars) (JNIEnv*, jstring str, const char* chars);
385 /* array operations */
387 jsize (*GetArrayLength) (JNIEnv*, jarray array);
389 jobjectArray (*NewObjectArray) (JNIEnv*, jsize len, jclass clazz, jobject init);
390 jobject (*GetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index);
391 void (*SetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index, jobject val);
393 jbooleanArray (*NewBooleanArray) (JNIEnv*, jsize len);
394 jbyteArray (*NewByteArray) (JNIEnv*, jsize len);
395 jcharArray (*NewCharArray) (JNIEnv*, jsize len);
396 jshortArray (*NewShortArray) (JNIEnv*, jsize len);
397 jintArray (*NewIntArray) (JNIEnv*, jsize len);
398 jlongArray (*NewLongArray) (JNIEnv*, jsize len);
399 jfloatArray (*NewFloatArray) (JNIEnv*, jsize len);
400 jdoubleArray (*NewDoubleArray) (JNIEnv*, jsize len);
402 jboolean * (*GetBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *isCopy);
403 jbyte * (*GetByteArrayElements) (JNIEnv*, jbyteArray array, jboolean *isCopy);
404 jchar * (*GetCharArrayElements) (JNIEnv*, jcharArray array, jboolean *isCopy);
405 jshort * (*GetShortArrayElements) (JNIEnv*, jshortArray array, jboolean *isCopy);
406 jint * (*GetIntArrayElements) (JNIEnv*, jintArray array, jboolean *isCopy);
407 jlong * (*GetLongArrayElements) (JNIEnv*, jlongArray array, jboolean *isCopy);
408 jfloat * (*GetFloatArrayElements) (JNIEnv*, jfloatArray array, jboolean *isCopy);
409 jdouble * (*GetDoubleArrayElements) (JNIEnv*, jdoubleArray array, jboolean *isCopy);
411 void (*ReleaseBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *elems, jint mode);
412 void (*ReleaseByteArrayElements) (JNIEnv*, jbyteArray array, jbyte *elems, jint mode);
413 void (*ReleaseCharArrayElements) (JNIEnv*, jcharArray array, jchar *elems, jint mode);
414 void (*ReleaseShortArrayElements) (JNIEnv*, jshortArray array, jshort *elems, jint mode);
415 void (*ReleaseIntArrayElements) (JNIEnv*, jintArray array, jint *elems, jint mode);
416 void (*ReleaseLongArrayElements) (JNIEnv*, jlongArray array, jlong *elems, jint mode);
417 void (*ReleaseFloatArrayElements) (JNIEnv*, jfloatArray array, jfloat *elems, jint mode);
418 void (*ReleaseDoubleArrayElements) (JNIEnv*, jdoubleArray array, jdouble *elems, jint mode);
420 void (*GetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
421 void (*GetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
422 void (*GetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
423 void (*GetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
424 void (*GetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
425 void (*GetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
426 void (*GetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
427 void (*GetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
429 void (*SetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
430 void (*SetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
431 void (*SetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
432 void (*SetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
433 void (*SetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
434 void (*SetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
435 void (*SetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
436 void (*SetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
438 /* registering native methods */
440 jint (*RegisterNatives) (JNIEnv*, jclass clazz, const JNINativeMethod *methods, jint nMethods);
441 jint (*UnregisterNatives) (JNIEnv*, jclass clazz);
443 /* monitor operations */
445 jint (*MonitorEnter) (JNIEnv*, jobject obj);
446 jint (*MonitorExit) (JNIEnv*, jobject obj);
448 /* JavaVM interface */
449 jint (*GetJavaVM) (JNIEnv*, JavaVM **vm);
451 void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf);
452 void (*GetStringUTFRegion) (JNIEnv*, jstring str, jsize start, jsize len, char *buf);
454 void * (*GetPrimitiveArrayCritical) (JNIEnv*, jarray array, jboolean *isCopy);
455 void (*ReleasePrimitiveArrayCritical) (JNIEnv*, jarray array, void *carray, jint mode);
457 const jchar * (*GetStringCritical) (JNIEnv*, jstring string, jboolean *isCopy);
458 void (*ReleaseStringCritical) (JNIEnv*, jstring string, const jchar *cstring);
460 jweak (*NewWeakGlobalRef) (JNIEnv*, jobject obj);
461 void (*DeleteWeakGlobalRef) (JNIEnv*, jweak ref);
463 jboolean (*ExceptionCheck) (JNIEnv*);
467 /* the active JNI function table */
470 extern JavaVM javaVM;
471 extern struct JNI_Table envTable;
474 /* function prototypes */
476 jfieldID getFieldID_critical(JNIEnv *env, jclass clazz, char *name, char *sig);
478 jobject GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID);
479 jboolean GetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID);
480 jbyte GetByteField(JNIEnv *env, jobject obj, jfieldID fieldID);
481 jchar GetCharField(JNIEnv *env, jobject obj, jfieldID fieldID);
482 jshort GetShortField(JNIEnv *env, jobject obj, jfieldID fieldID);
483 jint GetIntField(JNIEnv *env, jobject obj, jfieldID fieldID);
484 jlong GetLongField(JNIEnv *env, jobject obj, jfieldID fieldID);
485 jfloat GetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID);
486 jdouble GetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID);
488 void SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
489 void SetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
490 void SetByteField(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
491 void SetCharField(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
492 void SetShortField(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
493 void SetIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
494 void SetLongField(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
495 void SetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
496 void SetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
499 #define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val;
500 #define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset))
501 #define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val);
503 jobject *jni_method_invokeNativeHelper(JNIEnv *env,struct methodinfo *mi,jobject obj, java_objectarray *params);
509 * These are local overrides for various environment variables in Emacs.
510 * Please do not remove this and leave it at the end of the file, where
511 * Emacs will automagically detect them.
512 * ---------------------------------------------------------------------
515 * indent-tabs-mode: t