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