Print can't find method and exit.
[cacao.git] / jni.h
1 /* jni.h - JNI types and data structures
2
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
7
8    This file is part of CACAO.
9
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.
14
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.
19
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
23    02111-1307, USA.
24
25    Contact: cacao@complang.tuwien.ac.at
26
27    Authors: ?
28
29    $Id: jni.h 557 2003-11-02 22:51:59Z twisti $
30
31 */
32
33
34 #ifndef _JNI_H
35 #define _JNI_H
36
37 #include <stdarg.h>
38
39 #define JNIEXPORT
40 #define JNICALL
41
42 /* JNI datatypes */
43
44 #define jobject         java_objectheader*
45 #define jclass           struct classinfo*
46 #define jthrowable                 jobject
47 #define jweak                      jobject
48 #define jarray           java_arrayheader*
49 #define jlongArray         java_longarray*
50 #define jbooleanArray   java_booleanarray*
51 #define jintArray           java_intarray*
52 #define jcharArray         java_chararray*
53 #define jbyteArray         java_bytearray*
54 #define jshortArray       java_shortarray*
55 #define jdoubleArray     java_doublearray*
56 #define jfloatArray       java_floatarray*
57 #define jobjectArray     java_objectarray*
58 #define jstring                    jobject
59 #define jint                            s4
60 #define jchar                           s2
61 #define jboolean                        u1
62 #define jbyte                           s1
63 #define jshort                          s2
64 #define jlong                           s8
65 #define jfloat                       float
66 #define jdouble                     double
67 #define jsize                         jint
68 #define jfieldID                fieldinfo*
69 #define jmethodID              methodinfo*      
70
71 struct _JavaVM;                              /* opaque structure */
72 typedef struct _JavaVM* JavaVM;
73
74 typedef union jvalue {
75     jboolean z;
76     jbyte    b;
77     jchar    c;
78     jshort   s;
79     jint     i;
80     jlong    j;
81     jfloat   f;
82     jdouble  d;
83     jobject  l;
84 } jvalue;
85
86 /* JNI-Boolean */
87
88 #define JNI_FALSE 0
89 #define JNI_TRUE  1
90
91 /* native method name, signature and function pointer for use in RegisterNatives */
92
93 typedef struct {
94     char *name;
95     char *signature;
96     void *fnPtr;
97 } JNINativeMethod;
98
99
100 /* 
101         JNI function table, contains functions for the following usages:        
102         
103         Version Information 
104         Class Operations 
105         Exceptions 
106         Global and Local References 
107         Object Operations 
108         Accessing Fields of Objects 
109         Calling Instance Methods 
110         Accessing Static Fields 
111         Calling Static Methods 
112         String Operations 
113         Array Operations 
114         Registering Native Methods 
115         Monitor Operations 
116         Java VM Interface 
117 */
118
119 typedef struct JNI_Table JNIEnv;
120
121 struct JNI_Table {
122     
123     /* reserverd for future JNI-functions */
124     void *unused0;
125     void *unused1;
126     void *unused2;
127     void *unused3;
128     
129     /* version information */
130     
131     jint (*GetVersion) (JNIEnv*);
132
133     /* class operations */
134
135     jclass (*DefineClass) (JNIEnv*, const char *name, jobject loader, const jbyte *buf, jsize len);
136     jclass (*FindClass) (JNIEnv*, const char *name);
137
138     jmethodID (*FromReflectedMethod) (JNIEnv*, jobject method);
139     jfieldID (*FromReflectedField) (JNIEnv*, jobject field);
140
141     jobject (*ToReflectedMethod) (JNIEnv*, jclass cls, jmethodID methodID, jboolean isStatic);
142
143     jclass (*GetSuperclass) (JNIEnv*, jclass sub);
144     jboolean (*IsAssignableForm) (JNIEnv*, jclass sub, jclass sup);
145
146     jobject (*ToReflectedField) (JNIEnv*, jclass cls, jfieldID fieldID, jboolean isStatic);
147
148     /* exceptions */ 
149
150     jint (*Throw) (JNIEnv*, jthrowable obj);
151     jint (*ThrowNew) (JNIEnv*, jclass clazz, const char *msg);
152     jthrowable (*ExceptionOccurred) (JNIEnv*);
153     void (*ExceptionDescribe) (JNIEnv*);
154     void (*ExceptionClear) (JNIEnv*);
155     void (*FatalError) (JNIEnv*, const char *msg);
156
157     /* global and local references */
158
159     jint (*PushLocalFrame) (JNIEnv*, jint capacity);
160     jobject (*PopLocalFrame) (JNIEnv*, jobject result);
161     
162     jobject (*NewGlobalRef) (JNIEnv*, jobject lobj);
163     void (*DeleteGlobalRef) (JNIEnv*, jobject gref);
164     void (*DeleteLocalRef) (JNIEnv*, jobject obj);
165     jboolean (*IsSameObject) (JNIEnv*, jobject obj1, jobject obj2);
166     jobject (*NewLocalRef) (JNIEnv*, jobject ref);
167     jint (*EnsureLocalCapacity) (JNIEnv*, jint capacity);
168
169     /* object operations */ 
170
171     jobject (*AllocObject) (JNIEnv*, jclass clazz);
172     jobject (*NewObject) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
173     jobject (*NewObjectV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
174     jobject (*NewObjectA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
175
176     jclass (*GetObjectClass) (JNIEnv*, jobject obj);
177     jboolean (*IsInstanceOf) (JNIEnv*, jobject obj, jclass clazz);
178
179     jmethodID (*GetMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
180
181     /* calling instance methods */ 
182
183     jobject (*CallObjectMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
184     jobject (*CallObjectMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
185     jobject (*CallObjectMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
186
187     jboolean (*CallBooleanMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
188     jboolean (*CallBooleanMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
189     jboolean (*CallBooleanMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
190
191     jbyte (*CallByteMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
192     jbyte (*CallByteMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
193     jbyte (*CallByteMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
194
195     jchar (*CallCharMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
196     jchar (*CallCharMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
197     jchar (*CallCharMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
198
199     jshort (*CallShortMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
200     jshort (*CallShortMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
201     jshort (*CallShortMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
202
203     jint (*CallIntMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
204     jint (*CallIntMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
205     jint (*CallIntMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
206
207     jlong (*CallLongMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
208     jlong (*CallLongMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
209     jlong (*CallLongMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
210
211     jfloat (*CallFloatMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
212     jfloat (*CallFloatMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
213     jfloat (*CallFloatMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
214
215     jdouble (*CallDoubleMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
216     jdouble (*CallDoubleMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
217     jdouble (*CallDoubleMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue *args);
218
219     void (*CallVoidMethod) (JNIEnv*, jobject obj, jmethodID methodID, ...);
220     void (*CallVoidMethodV) (JNIEnv*, jobject obj, jmethodID methodID, va_list args);
221     void (*CallVoidMethodA) (JNIEnv*, jobject obj, jmethodID methodID, jvalue * args);
222
223     jobject (*CallNonvirtualObjectMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
224     jobject (*CallNonvirtualObjectMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
225     jobject (*CallNonvirtualObjectMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
226
227     jboolean (*CallNonvirtualBooleanMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
228     jboolean (*CallNonvirtualBooleanMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
229     jboolean (*CallNonvirtualBooleanMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
230
231     jbyte (*CallNonvirtualByteMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
232     jbyte (*CallNonvirtualByteMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
233     jbyte (*CallNonvirtualByteMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
234
235     jchar (*CallNonvirtualCharMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
236     jchar (*CallNonvirtualCharMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
237     jchar (*CallNonvirtualCharMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
238
239     jshort (*CallNonvirtualShortMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
240     jshort (*CallNonvirtualShortMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
241     jshort (*CallNonvirtualShortMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
242
243     jint (*CallNonvirtualIntMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
244     jint (*CallNonvirtualIntMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
245     jint (*CallNonvirtualIntMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
246
247     jlong (*CallNonvirtualLongMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
248     jlong (*CallNonvirtualLongMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
249     jlong (*CallNonvirtualLongMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
250
251     jfloat (*CallNonvirtualFloatMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
252     jfloat (*CallNonvirtualFloatMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
253     jfloat (*CallNonvirtualFloatMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
254
255     jdouble (*CallNonvirtualDoubleMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
256     jdouble (*CallNonvirtualDoubleMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
257     jdouble (*CallNonvirtualDoubleMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue *args);
258
259     void (*CallNonvirtualVoidMethod) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, ...);
260     void (*CallNonvirtualVoidMethodV) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, va_list args);
261     void (*CallNonvirtualVoidMethodA) (JNIEnv*, jobject obj, jclass clazz, jmethodID methodID, jvalue * args);
262
263     /* accessing fields */
264
265     jfieldID (*GetFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
266
267     jobject (*GetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID);
268     jboolean (*GetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID);
269     jbyte (*GetByteField) (JNIEnv*, jobject obj, jfieldID fieldID);
270     jchar (*GetCharField) (JNIEnv*, jobject obj, jfieldID fieldID);
271     jshort (*GetShortField) (JNIEnv*, jobject obj, jfieldID fieldID);
272     jint (*GetIntField) (JNIEnv*, jobject obj, jfieldID fieldID);
273     jlong (*GetLongField) (JNIEnv*, jobject obj, jfieldID fieldID);
274     jfloat (*GetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID);
275     jdouble (*GetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID);
276
277     void (*SetObjectField) (JNIEnv*, jobject obj, jfieldID fieldID, jobject val);
278     void (*SetBooleanField) (JNIEnv*, jobject obj, jfieldID fieldID, jboolean val);
279     void (*SetByteField) (JNIEnv*, jobject obj, jfieldID fieldID, jbyte val);
280     void (*SetCharField) (JNIEnv*, jobject obj, jfieldID fieldID, jchar val);
281     void (*SetShortField) (JNIEnv*, jobject obj, jfieldID fieldID, jshort val);
282     void (*SetIntField) (JNIEnv*, jobject obj, jfieldID fieldID, jint val);
283     void (*SetLongField) (JNIEnv*, jobject obj, jfieldID fieldID, jlong val);
284     void (*SetFloatField) (JNIEnv*, jobject obj, jfieldID fieldID, jfloat val);
285     void (*SetDoubleField) (JNIEnv*, jobject obj, jfieldID fieldID, jdouble val);
286
287     /* calling static methods */ 
288     
289     jmethodID (*GetStaticMethodID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
290
291     jobject (*CallStaticObjectMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
292     jobject (*CallStaticObjectMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
293     jobject (*CallStaticObjectMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
294
295     jboolean (*CallStaticBooleanMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
296     jboolean (*CallStaticBooleanMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
297     jboolean (*CallStaticBooleanMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
298
299     jbyte (*CallStaticByteMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
300     jbyte (*CallStaticByteMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
301     jbyte (*CallStaticByteMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
302
303     jchar (*CallStaticCharMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
304     jchar (*CallStaticCharMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
305     jchar (*CallStaticCharMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
306
307     jshort (*CallStaticShortMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
308     jshort (*CallStaticShortMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
309     jshort (*CallStaticShortMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
310
311     jint (*CallStaticIntMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
312     jint (*CallStaticIntMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
313     jint (*CallStaticIntMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
314
315     jlong (*CallStaticLongMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
316     jlong (*CallStaticLongMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
317     jlong (*CallStaticLongMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
318
319     jfloat (*CallStaticFloatMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
320     jfloat (*CallStaticFloatMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
321     jfloat (*CallStaticFloatMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
322
323     jdouble (*CallStaticDoubleMethod) (JNIEnv*, jclass clazz, jmethodID methodID, ...);
324     jdouble (*CallStaticDoubleMethodV) (JNIEnv*, jclass clazz, jmethodID methodID, va_list args);
325     jdouble (*CallStaticDoubleMethodA) (JNIEnv*, jclass clazz, jmethodID methodID, jvalue *args);
326
327     void (*CallStaticVoidMethod) (JNIEnv*, jclass cls, jmethodID methodID, ...);
328     void (*CallStaticVoidMethodV) (JNIEnv*, jclass cls, jmethodID methodID, va_list args);
329     void (*CallStaticVoidMethodA) (JNIEnv*, jclass cls, jmethodID methodID, jvalue * args);
330
331     /* accessing static fields */
332
333     jfieldID (*GetStaticFieldID) (JNIEnv*, jclass clazz, const char *name, const char *sig);
334     jobject (*GetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID);
335     jboolean (*GetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID);
336     jbyte (*GetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID);
337     jchar (*GetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID);
338     jshort (*GetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID);
339     jint (*GetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID);
340     jlong (*GetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID);
341     jfloat (*GetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID);
342     jdouble (*GetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID);
343
344     void (*SetStaticObjectField) (JNIEnv*, jclass clazz, jfieldID fieldID, jobject value);
345     void (*SetStaticBooleanField) (JNIEnv*, jclass clazz, jfieldID fieldID, jboolean value);
346     void (*SetStaticByteField) (JNIEnv*, jclass clazz, jfieldID fieldID, jbyte value);
347     void (*SetStaticCharField) (JNIEnv*, jclass clazz, jfieldID fieldID, jchar value);
348     void (*SetStaticShortField) (JNIEnv*, jclass clazz, jfieldID fieldID, jshort value);
349     void (*SetStaticIntField) (JNIEnv*, jclass clazz, jfieldID fieldID, jint value);
350     void (*SetStaticLongField) (JNIEnv*, jclass clazz, jfieldID fieldID, jlong value);
351     void (*SetStaticFloatField) (JNIEnv*, jclass clazz, jfieldID fieldID, jfloat value);
352     void (*SetStaticDoubleField) (JNIEnv*, jclass clazz, jfieldID fieldID, jdouble value);
353
354     /* string operations */ 
355
356     jstring (*NewString) (JNIEnv*, const jchar *unicode, jsize len);
357     jsize (*GetStringLength) (JNIEnv*, jstring str);
358     const jchar *(*GetStringChars) (JNIEnv*, jstring str, jboolean *isCopy);
359     void (*ReleaseStringChars) (JNIEnv*, jstring str, const jchar *chars);
360
361     jstring (*NewStringUTF) (JNIEnv*, const char *utf);
362     jsize (*GetStringUTFLength) (JNIEnv*, jstring str);
363     const char* (*GetStringUTFChars) (JNIEnv*, jstring str, jboolean *isCopy);
364     void (*ReleaseStringUTFChars) (JNIEnv*, jstring str, const char* chars);
365
366     /* array operations */
367
368     jsize (*GetArrayLength) (JNIEnv*, jarray array);
369
370     jobjectArray (*NewObjectArray) (JNIEnv*, jsize len, jclass clazz, jobject init);
371     jobject (*GetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index);
372     void (*SetObjectArrayElement) (JNIEnv*, jobjectArray array, jsize index, jobject val);
373
374     jbooleanArray (*NewBooleanArray) (JNIEnv*, jsize len);
375     jbyteArray (*NewByteArray) (JNIEnv*, jsize len);
376     jcharArray (*NewCharArray) (JNIEnv*, jsize len);
377     jshortArray (*NewShortArray) (JNIEnv*, jsize len);
378     jintArray (*NewIntArray) (JNIEnv*, jsize len);
379     jlongArray (*NewLongArray) (JNIEnv*, jsize len);
380     jfloatArray (*NewFloatArray) (JNIEnv*, jsize len);
381     jdoubleArray (*NewDoubleArray) (JNIEnv*, jsize len);
382
383     jboolean * (*GetBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *isCopy);
384     jbyte * (*GetByteArrayElements) (JNIEnv*, jbyteArray array, jboolean *isCopy);
385     jchar * (*GetCharArrayElements) (JNIEnv*, jcharArray array, jboolean *isCopy);
386     jshort * (*GetShortArrayElements) (JNIEnv*, jshortArray array, jboolean *isCopy);
387     jint * (*GetIntArrayElements) (JNIEnv*, jintArray array, jboolean *isCopy);
388     jlong * (*GetLongArrayElements) (JNIEnv*, jlongArray array, jboolean *isCopy);
389     jfloat * (*GetFloatArrayElements) (JNIEnv*, jfloatArray array, jboolean *isCopy);
390     jdouble * (*GetDoubleArrayElements) (JNIEnv*, jdoubleArray array, jboolean *isCopy);
391
392     void (*ReleaseBooleanArrayElements) (JNIEnv*, jbooleanArray array, jboolean *elems, jint mode);
393     void (*ReleaseByteArrayElements) (JNIEnv*, jbyteArray array, jbyte *elems, jint mode);
394     void (*ReleaseCharArrayElements) (JNIEnv*, jcharArray array, jchar *elems, jint mode);
395     void (*ReleaseShortArrayElements) (JNIEnv*, jshortArray array, jshort *elems, jint mode);
396     void (*ReleaseIntArrayElements) (JNIEnv*, jintArray array, jint *elems, jint mode);
397     void (*ReleaseLongArrayElements) (JNIEnv*, jlongArray array, jlong *elems, jint mode);
398     void (*ReleaseFloatArrayElements) (JNIEnv*, jfloatArray array, jfloat *elems, jint mode);
399     void (*ReleaseDoubleArrayElements) (JNIEnv*, jdoubleArray array, jdouble *elems, jint mode);
400
401     void (*GetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
402     void (*GetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
403     void (*GetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
404     void (*GetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
405     void (*GetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
406     void (*GetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
407     void (*GetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
408     void (*GetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
409
410     void (*SetBooleanArrayRegion) (JNIEnv*, jbooleanArray array, jsize start, jsize l, jboolean *buf);
411     void (*SetByteArrayRegion) (JNIEnv*, jbyteArray array, jsize start, jsize len, jbyte *buf);
412     void (*SetCharArrayRegion) (JNIEnv*, jcharArray array, jsize start, jsize len, jchar *buf);
413     void (*SetShortArrayRegion) (JNIEnv*, jshortArray array, jsize start, jsize len, jshort *buf);
414     void (*SetIntArrayRegion) (JNIEnv*, jintArray array, jsize start, jsize len, jint *buf);
415     void (*SetLongArrayRegion) (JNIEnv*, jlongArray array, jsize start, jsize len, jlong *buf);
416     void (*SetFloatArrayRegion) (JNIEnv*, jfloatArray array, jsize start, jsize len, jfloat *buf);
417     void (*SetDoubleArrayRegion) (JNIEnv*, jdoubleArray array, jsize start, jsize len, jdouble *buf);
418
419     /* registering native methods */
420
421     jint (*RegisterNatives) (JNIEnv*, jclass clazz, const JNINativeMethod *methods, jint nMethods);
422     jint (*UnregisterNatives) (JNIEnv*, jclass clazz);
423
424     /* monitor operations */
425
426     jint (*MonitorEnter) (JNIEnv*, jobject obj);
427     jint (*MonitorExit) (JNIEnv*, jobject obj);
428
429     /* JavaVM interface */
430
431     jint (*GetJavaVM) (JNIEnv*, JavaVM **vm);
432
433     void (*GetStringRegion) (JNIEnv*, jstring str, jsize start, jsize len, jchar *buf);
434     void (*GetStringUTFRegion) (JNIEnv*, jstring str, jsize start, jsize len, char *buf);
435
436     void * (*GetPrimitiveArrayCritical) (JNIEnv*, jarray array, jboolean *isCopy);
437     void (*ReleasePrimitiveArrayCritical) (JNIEnv*, jarray array, void *carray, jint mode);
438
439     const jchar * (*GetStringCritical) (JNIEnv*, jstring string, jboolean *isCopy);
440     void (*ReleaseStringCritical) (JNIEnv*, jstring string, const jchar *cstring);
441
442     jweak (*NewWeakGlobalRef) (JNIEnv*, jobject obj);
443     void (*DeleteWeakGlobalRef) (JNIEnv*, jweak ref);
444
445     jboolean (*ExceptionCheck) (JNIEnv*);
446 };
447
448
449 /* the active JNI function table */
450
451 extern JNIEnv env;
452
453 #endif /* _JNI_H */
454
455
456 /*
457  * These are local overrides for various environment variables in Emacs.
458  * Please do not remove this and leave it at the end of the file, where
459  * Emacs will automagically detect them.
460  * ---------------------------------------------------------------------
461  * Local variables:
462  * mode: c
463  * indent-tabs-mode: t
464  * c-basic-offset: 4
465  * tab-width: 4
466  * End:
467  */