1 /* native/jni.h - JNI types and data structures
3 Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
4 R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
5 C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
6 Institut f. Computersprachen - TU Wien
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
27 Authors: Reinhard Grafl
30 Changes: Christian Thalinger
32 $Id: jni.h 1921 2005-02-10 10:34:40Z twisti $
44 #include "vm/global.h"
49 #define JNI_VERSION_1_1 0x00010001
50 #define JNI_VERSION_1_2 0x00010002
51 #define JNI_VERSION_1_4 0x00010004
67 #define JNI_EDETACHED (-2) /* thread detached from the VM */
68 #define JNI_EVERSION (-3) /* JNI version error */
80 #define jdouble double
82 #define jobject java_objectheader*
83 #define jclass struct classinfo*
84 #define jthrowable jobject
86 #define jarray java_arrayheader*
87 #define jlongArray java_longarray*
88 #define jbooleanArray java_booleanarray*
89 #define jintArray java_intarray*
90 #define jcharArray java_chararray*
91 #define jbyteArray java_bytearray*
92 #define jshortArray java_shortarray*
93 #define jdoubleArray java_doublearray*
94 #define jfloatArray java_floatarray*
95 #define jobjectArray java_objectarray*
96 #define jstring jobject
99 #define jfieldID fieldinfo*
100 #define jmethodID methodinfo*
103 typedef union jvalue {
116 typedef struct JDK1_1InitArgs JDK1_1InitArgs;
118 struct JDK1_1InitArgs {
119 /* The first two fields were reserved in JDK 1.1, and
120 formally introduced in JDK 1.1.2. */
121 /* Java VM version */
124 /* System properties. */
127 /* whether to check the Java source files are newer than
128 * compiled class files. */
131 /* maximum native stack size of Java-created threads. */
132 jint nativeStackSize;
134 /* maximum Java stack size. */
137 /* initial heap size. */
140 /* maximum heap size. */
143 /* controls whether Java byte code should be verified:
144 * 0 -- none, 1 -- remotely loaded code, 2 -- all code. */
147 /* the local directory path for class loading. */
148 const char *classpath;
150 /* a hook for a function that redirects all VM messages. */
151 jint (*vfprintf)(FILE *fp, const char *format,
154 /* a VM exit hook. */
155 void (*exit)(jint code);
157 /* a VM abort hook. */
160 /* whether to enable class GC. */
163 /* whether GC messages will appear. */
164 jint enableVerboseGC;
166 /* whether asynchronous GC is allowed. */
169 /* Three reserved fields. */
176 typedef struct JDK1_1AttachArgs {
178 * JDK 1.1 does not need any arguments to attach a
179 * native thread. The padding is here to satisfy the C
180 * compiler which does not permit empty structures.
186 typedef struct JNIInvokeInterface *JavaVM;
187 /* typedef struct _JavaVM *JavaVM; */
189 /* struct _JavaVM { */
190 struct JNIInvokeInterface {
191 void *(*reserved0) ();
192 void *(*reserved1) ();
193 void *(*reserved2) ();
194 jint (*DestroyJavaVM) (JavaVM *);
195 jint (*AttachCurrentThread) (JavaVM *, void **, void *);
196 jint (*DetachCurrentThread) (JavaVM *);
197 jint (*GetEnv) (JavaVM *, void **, jint);
198 jint (*AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *);
202 /* native method name, signature and function pointer for use in RegisterNatives */
212 JNI function table, contains functions for the following usages:
217 Global and Local References
219 Accessing Fields of Objects
220 Calling Instance Methods
221 Accessing Static Fields
222 Calling Static Methods
225 Registering Native Methods
230 typedef struct JNINativeInterface *JNIEnv;
231 /* typedef struct JNI_Table *JNIEnv; */
233 /* struct JNI_Table { */
234 struct JNINativeInterface {
235 /* reserverd for future JNI-functions */
241 /* version information */
243 jint (*GetVersion) (JNIEnv*);
245 /* class operations */
247 jclass (*DefineClass) (JNIEnv*, const char *name, jobject loader, const jbyte *buf, jsize len);
248 jclass (*FindClass) (JNIEnv*, const char *name);
250 jmethodID (*FromReflectedMethod) (JNIEnv*, jobject method);
251 jfieldID (*FromReflectedField) (JNIEnv*, jobject field);
253 jobject (*ToReflectedMethod) (JNIEnv*, jclass cls, jmethodID methodID, jboolean isStatic);
255 jclass (*GetSuperclass) (JNIEnv*, jclass sub);
256 jboolean (*IsAssignableFrom) (JNIEnv*, jclass sub, jclass sup);
258 jobject (*ToReflectedField) (JNIEnv*, jclass cls, jfieldID fieldID, jboolean isStatic);
262 jint (*Throw) (JNIEnv*, jthrowable obj);
263 jint (*ThrowNew) (JNIEnv*, jclass clazz, const char *msg);
264 jthrowable (*ExceptionOccurred) (JNIEnv*);
265 void (*ExceptionDescribe) (JNIEnv*);
266 void (*ExceptionClear) (JNIEnv*);
267 void (*FatalError) (JNIEnv*, const char *msg);
269 /* global and local references */
271 jint (*PushLocalFrame) (JNIEnv*, jint capacity);
272 jobject (*PopLocalFrame) (JNIEnv*, jobject result);
274 jobject (*NewGlobalRef) (JNIEnv*, jobject lobj);
275 void (*DeleteGlobalRef) (JNIEnv*, jobject gref);
276 void (*DeleteLocalRef) (JNIEnv*, jobject obj);
277 jboolean (*IsSameObject) (JNIEnv*, jobject obj1, jobject obj2);
278 jobject (*NewLocalRef) (JNIEnv*, jobject ref);
279 jint (*EnsureLocalCapacity) (JNIEnv*, jint capacity);
281 /* object operations */
283 jobject (*AllocObject) (JNIEnv*, jclass clazz);
284 jobject (*NewObject) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
285 jobject (*NewObjectV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
286 jobject (*NewObjectA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
288 jclass (*GetObjectClass) (JNIEnv*, jobject obj);
289 jboolean (*IsInstanceOf) (JNIEnv*, jobject obj, jclass clazz);
291 jmethodID (*GetMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
293 /* calling instance methods */
295 jobject (*CallObjectMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
296 jobject (*CallObjectMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
297 jobject (*CallObjectMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
299 jboolean (*CallBooleanMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
300 jboolean (*CallBooleanMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
301 jboolean (*CallBooleanMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
303 jbyte (*CallByteMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
304 jbyte (*CallByteMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
305 jbyte (*CallByteMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
307 jchar (*CallCharMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
308 jchar (*CallCharMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
309 jchar (*CallCharMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
311 jshort (*CallShortMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
312 jshort (*CallShortMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
313 jshort (*CallShortMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
315 jint (*CallIntMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
316 jint (*CallIntMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
317 jint (*CallIntMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
319 jlong (*CallLongMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
320 jlong (*CallLongMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
321 jlong (*CallLongMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
323 jfloat (*CallFloatMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
324 jfloat (*CallFloatMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
325 jfloat (*CallFloatMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
327 jdouble (*CallDoubleMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
328 jdouble (*CallDoubleMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
329 jdouble (*CallDoubleMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
331 void (*CallVoidMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
332 void (*CallVoidMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
333 void (*CallVoidMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
335 jobject (*CallNonvirtualObjectMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
336 jobject (*CallNonvirtualObjectMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
337 jobject (*CallNonvirtualObjectMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
339 jboolean (*CallNonvirtualBooleanMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
340 jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
341 jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
343 jbyte (*CallNonvirtualByteMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
344 jbyte (*CallNonvirtualByteMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
345 jbyte (*CallNonvirtualByteMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
347 jchar (*CallNonvirtualCharMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
348 jchar (*CallNonvirtualCharMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
349 jchar (*CallNonvirtualCharMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
351 jshort (*CallNonvirtualShortMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
352 jshort (*CallNonvirtualShortMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
353 jshort (*CallNonvirtualShortMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
355 jint (*CallNonvirtualIntMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
356 jint (*CallNonvirtualIntMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
357 jint (*CallNonvirtualIntMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
359 jlong (*CallNonvirtualLongMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
360 jlong (*CallNonvirtualLongMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
361 jlong (*CallNonvirtualLongMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
363 jfloat (*CallNonvirtualFloatMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
364 jfloat (*CallNonvirtualFloatMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
365 jfloat (*CallNonvirtualFloatMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
367 jdouble (*CallNonvirtualDoubleMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
368 jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
369 jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
371 void (*CallNonvirtualVoidMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
372 void (*CallNonvirtualVoidMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
373 void (*CallNonvirtualVoidMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
375 /* accessing fields */
377 jfieldID (*GetFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
379 jobject (*GetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID);
380 jboolean (*GetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID);
381 jbyte (*GetByteField) (JNIEnv*, jobject obj, jfieldID fieldID);
382 jchar (*GetCharField) (JNIEnv*, jobject obj, jfieldID fieldID);
383 jshort (*GetShortField) (JNIEnv*, jobject obj, jfieldID fieldID);
384 jint (*GetIntField) (JNIEnv*, jobject obj, jfieldID fieldID);
385 jlong (*GetLongField) (JNIEnv*, jobject obj, jfieldID fieldID);
386 jfloat (*GetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID);
387 jdouble (*GetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID);
389 void (*SetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID, jobject val);
390 void (*SetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID, jboolean val);
391 void (*SetByteField) (JNIEnv*, jobject obj, jfieldID fieldID, jbyte val);
392 void (*SetCharField) (JNIEnv*, jobject obj, jfieldID fieldID, jchar val);
393 void (*SetShortField) (JNIEnv*, jobject obj, jfieldID fieldID, jshort val);
394 void (*SetIntField) (JNIEnv*, jobject obj, jfieldID fieldID, jint val);
395 void (*SetLongField) (JNIEnv*, jobject obj, jfieldID fieldID, jlong val);
396 void (*SetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID, jfloat val);
397 void (*SetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID, jdouble val);
399 /* calling static methods */
401 jmethodID (*GetStaticMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
403 jobject (*CallStaticObjectMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
404 jobject (*CallStaticObjectMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
405 jobject (*CallStaticObjectMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
407 jboolean (*CallStaticBooleanMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
408 jboolean (*CallStaticBooleanMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
409 jboolean (*CallStaticBooleanMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
411 jbyte (*CallStaticByteMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
412 jbyte (*CallStaticByteMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
413 jbyte (*CallStaticByteMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
415 jchar (*CallStaticCharMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
416 jchar (*CallStaticCharMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
417 jchar (*CallStaticCharMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
419 jshort (*CallStaticShortMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
420 jshort (*CallStaticShortMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
421 jshort (*CallStaticShortMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
423 jint (*CallStaticIntMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
424 jint (*CallStaticIntMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
425 jint (*CallStaticIntMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
427 jlong (*CallStaticLongMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
428 jlong (*CallStaticLongMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
429 jlong (*CallStaticLongMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
431 jfloat (*CallStaticFloatMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
432 jfloat (*CallStaticFloatMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
433 jfloat (*CallStaticFloatMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
435 jdouble (*CallStaticDoubleMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
436 jdouble (*CallStaticDoubleMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
437 jdouble (*CallStaticDoubleMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
439 void (*CallStaticVoidMethod) (JNIEnv*, jclass cls, jmethodID methodID, ...);
440 void (*CallStaticVoidMethodV) (JNIEnv*, jclass cls, jmethodID methodID, va_list args);
441 void (*CallStaticVoidMethodA) (JNIEnv*, jclass cls, jmethodID methodID, jvalue * args);
443 /* accessing static fields */
445 jfieldID (*GetStaticFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
446 jobject (*GetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID);
447 jboolean (*GetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID);
448 jbyte (*GetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID);
449 jchar (*GetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID);
450 jshort (*GetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID);
451 jint (*GetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID);
452 jlong (*GetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID);
453 jfloat (*GetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID);
454 jdouble (*GetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID);
456 void (*SetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID, jobject value);
457 void (*SetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID, jboolean value);
458 void (*SetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID, jbyte value);
459 void (*SetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID, jchar value);
460 void (*SetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID, jshort value);
461 void (*SetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID, jint value);
462 void (*SetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID, jlong value);
463 void (*SetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID, jfloat value);
464 void (*SetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID, jdouble value);
466 /* string operations */
468 jstring (*NewString) (JNIEnv*, const jchar *unicode, jsize len);
469 jsize (*GetStringLength) (JNIEnv*, jstring str);
470 const jchar *(*GetStringChars) (JNIEnv*, jstring str, jboolean *isCopy);
471 void (*ReleaseStringChars) (JNIEnv*, jstring str, const jchar *chars);
473 jstring (*NewStringUTF) (JNIEnv*, const char *bytes);
474 jsize (*GetStringUTFLength) (JNIEnv*, jstring str);
475 const char* (*GetStringUTFChars) (JNIEnv*, jstring str, jboolean *isCopy);
476 void (*ReleaseStringUTFChars) (JNIEnv*, jstring str, const char* chars);
478 /* array operations */
480 jsize (*GetArrayLength) (JNIEnv*, jarray array);
482 jobjectArray (*NewObjectArray) (JNIEnv*, jsize len, jclass clazz, jobject init);
483 jobject (*GetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index);
484 void (*SetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index, jobject val);
486 jbooleanArray (*NewBooleanArray) (JNIEnv*, jsize len);
487 jbyteArray (*NewByteArray) (JNIEnv*, jsize len);
488 jcharArray (*NewCharArray) (JNIEnv*, jsize len);
489 jshortArray (*NewShortArray) (JNIEnv*, jsize len);
490 jintArray (*NewIntArray) (JNIEnv*, jsize len);
491 jlongArray (*NewLongArray) (JNIEnv*, jsize len);
492 jfloatArray (*NewFloatArray) (JNIEnv*, jsize len);
493 jdoubleArray (*NewDoubleArray) (JNIEnv*, jsize len);
495 jboolean * (*GetBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *isCopy);
496 jbyte * (*GetByteArrayElements) (JNIEnv*, jbyteArray array, jboolean *isCopy);
497 jchar * (*GetCharArrayElements) (JNIEnv*, jcharArray array, jboolean *isCopy);
498 jshort * (*GetShortArrayElements) (JNIEnv*, jshortArray array, jboolean *isCopy);
499 jint * (*GetIntArrayElements) (JNIEnv*, jintArray array, jboolean *isCopy);
500 jlong * (*GetLongArrayElements) (JNIEnv*, jlongArray array, jboolean *isCopy);
501 jfloat * (*GetFloatArrayElements) (JNIEnv*, jfloatArray array, jboolean *isCopy);
502 jdouble * (*GetDoubleArrayElements) (JNIEnv*, jdoubleArray array, jboolean *isCopy);
504 void (*ReleaseBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *elems, jint mode);
505 void (*ReleaseByteArrayElements) (JNIEnv*, jbyteArray array, jbyte *elems, jint mode);
506 void (*ReleaseCharArrayElements) (JNIEnv*, jcharArray array, jchar *elems, jint mode);
507 void (*ReleaseShortArrayElements) (JNIEnv*, jshortArray array, jshort *elems, jint mode);
508 void (*ReleaseIntArrayElements) (JNIEnv*, jintArray array, jint *elems, jint mode);
509 void (*ReleaseLongArrayElements) (JNIEnv*, jlongArray array, jlong *elems, jint mode);
510 void (*ReleaseFloatArrayElements) (JNIEnv*, jfloatArray array, jfloat *elems, jint mode);
511 void (*ReleaseDoubleArrayElements) (JNIEnv*, jdoubleArray array, jdouble *elems, jint mode);
513 void (*GetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
514 void (*GetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
515 void (*GetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
516 void (*GetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
517 void (*GetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
518 void (*GetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
519 void (*GetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
520 void (*GetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
522 void (*SetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
523 void (*SetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
524 void (*SetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
525 void (*SetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
526 void (*SetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
527 void (*SetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
528 void (*SetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
529 void (*SetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
531 /* registering native methods */
533 jint (*RegisterNatives) (JNIEnv*, jclass clazz, const JNINativeMethod *methods, jint nMethods);
534 jint (*UnregisterNatives) (JNIEnv*, jclass clazz);
536 /* monitor operations */
538 jint (*MonitorEnter) (JNIEnv*, jobject obj);
539 jint (*MonitorExit) (JNIEnv*, jobject obj);
541 /* JavaVM interface */
543 jint (*GetJavaVM) (JNIEnv*, JavaVM **vm);
545 /* new JNI 1.2 functions */
547 void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf);
548 void (*GetStringUTFRegion) (JNIEnv*, jstring str, jsize start, jsize len, char *buf);
550 void * (*GetPrimitiveArrayCritical) (JNIEnv*, jarray array, jboolean *isCopy);
551 void (*ReleasePrimitiveArrayCritical) (JNIEnv*, jarray array, void *carray, jint mode);
553 const jchar * (*GetStringCritical) (JNIEnv*, jstring string, jboolean *isCopy);
554 void (*ReleaseStringCritical) (JNIEnv*, jstring string, const jchar *cstring);
556 jweak (*NewWeakGlobalRef) (JNIEnv*, jobject obj);
557 void (*DeleteWeakGlobalRef) (JNIEnv*, jweak ref);
559 jboolean (*ExceptionCheck) (JNIEnv*);
561 /* new JNI 1.4 functions */
563 jobject (*NewDirectByteBuffer) (JNIEnv *env, void* address, jlong capacity);
564 void* (*GetDirectBufferAddress) (JNIEnv *env, jobject buf);
565 jlong (*GetDirectBufferCapacity) (JNIEnv *env, jobject buf);
569 /* function prototypes ********************************************************/
571 jint JNI_GetDefaultJavaVMInitArgs(void *vm_args);
572 jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs);
573 jint JNI_CreateJavaVM(JavaVM **p_vm, JNIEnv **p_env, void *vm_args);
575 jfieldID getFieldID_critical(JNIEnv *env, jclass clazz, char *name, char *sig);
577 jobject GetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID);
578 jboolean GetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID);
579 jbyte GetByteField(JNIEnv *env, jobject obj, jfieldID fieldID);
580 jchar GetCharField(JNIEnv *env, jobject obj, jfieldID fieldID);
581 jshort GetShortField(JNIEnv *env, jobject obj, jfieldID fieldID);
582 jint GetIntField(JNIEnv *env, jobject obj, jfieldID fieldID);
583 jlong GetLongField(JNIEnv *env, jobject obj, jfieldID fieldID);
584 jfloat GetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID);
585 jdouble GetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID);
587 void SetObjectField(JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
588 void SetBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
589 void SetByteField(JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
590 void SetCharField(JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
591 void SetShortField(JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
592 void SetIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
593 void SetLongField(JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
594 void SetFloatField(JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
595 void SetDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
598 #define setField(obj,typ,var,val) *((typ*) ((long int) obj + (long int) var->offset))=val;
599 #define getField(obj,typ,var) *((typ*) ((long int) obj + (long int) var->offset))
600 #define setfield_critical(clazz,obj,name,sig,jdatatype,val) setField(obj,jdatatype,getFieldID_critical(env,clazz,name,sig),val);
602 jobject *jni_method_invokeNativeHelper(JNIEnv *env,struct methodinfo *mi,jobject obj, java_objectarray *params);
610 * These are local overrides for various environment variables in Emacs.
611 * Please do not remove this and leave it at the end of the file, where
612 * Emacs will automagically detect them.
613 * ---------------------------------------------------------------------
616 * indent-tabs-mode: t