OSDN Git Service

* include/config.h.in: Rebuilt.
[pf3gnuchains/gcc-fork.git] / libjava / include / jni.h
1 /* Copyright (C) 1998, 1999, 2000  Red Hat, Inc.
2
3    This file is part of libgcj.
4
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
7 details.  */
8
9 /* Note: this file must be compilable by the C compiler (for now,
10    assuming GNU C is ok).  This means you must never use `//'
11    comments, and all C++-specific code must be conditional on
12    __cplusplus.  */
13
14 #ifndef __GCJ_JNI_H__
15 #define __GCJ_JNI_H__
16
17 #include <stdarg.h>
18 #define _Jv_va_list va_list
19
20 #ifdef __cplusplus
21
22 /* This is wrong, because it pollutes the name-space too much! */
23 #include <gcj/javaprims.h>
24
25 typedef struct _Jv_JNIEnv JNIEnv;
26
27 #define JNI_TRUE true
28 #define JNI_FALSE false
29
30 #else /* __cplusplus */
31
32 typedef int    jbyte  __attribute__((__mode__(__QI__)));
33 typedef int    jshort __attribute__((__mode__(__HI__)));
34 typedef int    jint   __attribute__((__mode__(__SI__)));
35 typedef int    jlong  __attribute__((__mode__(__DI__)));
36 typedef bool   jboolean __attribute__((__mode__(__QI__)));
37 typedef unsigned short jchar __attribute__((__mode__(__HI__)));
38 typedef float  jfloat;
39 typedef double jdouble;
40 typedef jint jsize;
41
42 typedef void *jobject;
43 typedef jobject jclass;
44 typedef jobject jstring;
45 typedef jobject jarray;
46 typedef jobject jthrowable;
47 typedef jobject jobjectArray;
48 typedef jobject jbyteArray;
49 typedef jobject jshortArray;
50 typedef jobject jintArray;
51 typedef jobject jlongArray;
52 typedef jobject jbooleanArray;
53 typedef jobject jcharArray;
54 typedef jobject jfloatArray;
55 typedef jobject jdoubleArray;
56
57 /* Dummy defines.  */
58 typedef void *jfieldID;
59 typedef void *jmethodID;
60
61 typedef const struct JNINativeInterface *JNIEnv;
62
63 #define JNI_TRUE 1
64 #define JNI_TRUE 0
65
66 #endif /* __cplusplus */
67
68 /* Version numbers.  */
69 #define JNI_VERSION_1_1 0x00010001
70 #define JNI_VERSION_1_2 0x00010002
71
72 /* Used when releasing array elements.  */
73 #define JNI_COMMIT 1
74 #define JNI_ABORT  2
75
76 typedef union jvalue
77 {
78   jboolean z;
79   jbyte    b;
80   jchar    c;
81   jshort   s;
82   jint     i;
83   jlong    j;
84   jfloat   f;
85   jdouble  d;
86   jobject  l;
87 } jvalue;
88
89 typedef void * (*_Jv_func)(...);
90
91 struct JNINativeInterface
92 {
93   _Jv_func reserved0;
94   _Jv_func reserved1;
95   _Jv_func reserved2;
96   _Jv_func reserved3;
97   jint     (*GetVersion)                   (JNIEnv*);
98   _Jv_func DefineClass;
99   _Jv_func FindClass;
100   _Jv_func reserved4;
101   _Jv_func reserved5;
102   _Jv_func reserved6;
103   jclass   (*GetSuperclass)                (JNIEnv*, jclass);
104   jboolean (*IsAssignableFrom)             (JNIEnv*, jclass, jclass);
105   _Jv_func reserved7;
106   jint     (*Throw)                        (JNIEnv*, jthrowable);
107   jint     (*ThrowNew)                     (JNIEnv*, jclass, const char *);
108   jthrowable (*ExceptionOccurred)          (JNIEnv *);
109   void     (*ExceptionDescribe)            (JNIEnv *);
110   void     (*ExceptionClear)               (JNIEnv *);
111   void     (*FatalError)                   (JNIEnv *, const char *);
112   _Jv_func reserved8;
113   _Jv_func reserved9;
114   _Jv_func NewGlobalRef;
115   _Jv_func DeleteGlobalRef;
116   _Jv_func DeleteLocalRef;
117   jboolean (*IsSameObject)                 (JNIEnv *, jobject, jobject);
118   _Jv_func reserved10;
119   _Jv_func reserved11;
120
121   jobject  (*AllocObject)                  (JNIEnv *, jclass);
122   jobject (*NewObject)                     (JNIEnv *, jclass, jmethodID, ...);
123   jobject (*NewObjectV)                    (JNIEnv *, jclass, jmethodID,
124                                             _Jv_va_list);
125   jobject (*NewObjectA)                    (JNIEnv *, jclass, jmethodID,
126                                             jvalue *);
127
128   jclass   (*GetObjectClass)               (JNIEnv *, jobject);
129   jboolean (*IsInstanceOf)                 (JNIEnv *, jobject, jclass);
130   jmethodID (*GetMethodID)                 (JNIEnv *, jclass, const char *,
131                                             const char *);
132
133   jobject       (*CallObjectMethod)        (JNIEnv *, jobject, jmethodID,
134                                             ...);
135   jobject       (*CallObjectMethodV)       (JNIEnv *, jobject, jmethodID,
136                                             _Jv_va_list);
137   jobject       (*CallObjectMethodA)       (JNIEnv *, jobject, jmethodID,
138                                             jvalue *);
139   jboolean      (*CallBooleanMethod)       (JNIEnv *, jobject, jmethodID,
140                                             ...);
141   jboolean      (*CallBooleanMethodV)      (JNIEnv *, jobject, jmethodID,
142                                             _Jv_va_list);
143   jboolean      (*CallBooleanMethodA)      (JNIEnv *, jobject, jmethodID,
144                                             jvalue *);
145   jbyte         (*CallByteMethod)          (JNIEnv *, jobject, jmethodID,
146                                             ...);
147   jbyte         (*CallByteMethodV)         (JNIEnv *, jobject, jmethodID,
148                                             _Jv_va_list);
149   jbyte         (*CallByteMethodA)         (JNIEnv *, jobject, jmethodID,
150                                             jvalue *);
151   jchar         (*CallCharMethod)          (JNIEnv *, jobject, jmethodID,
152                                             ...);
153   jchar         (*CallCharMethodV)         (JNIEnv *, jobject, jmethodID,
154                                             _Jv_va_list);
155   jchar         (*CallCharMethodA)         (JNIEnv *, jobject, jmethodID,
156                                             jvalue *);
157   jshort        (*CallShortMethod)         (JNIEnv *, jobject, jmethodID,
158                                             ...);
159   jshort        (*CallShortMethodV)        (JNIEnv *, jobject, jmethodID,
160                                             _Jv_va_list);
161   jshort        (*CallShortMethodA)        (JNIEnv *, jobject, jmethodID,
162                                             jvalue *);
163   jint          (*CallIntMethod)           (JNIEnv *, jobject, jmethodID,
164                                             ...);
165   jint          (*CallIntMethodV)          (JNIEnv *, jobject, jmethodID,
166                                             _Jv_va_list);
167   jint          (*CallIntMethodA)          (JNIEnv *, jobject, jmethodID,
168                                             jvalue *);
169   jlong         (*CallLongMethod)          (JNIEnv *, jobject, jmethodID,
170                                             ...);
171   jlong         (*CallLongMethodV)         (JNIEnv *, jobject, jmethodID,
172                                             _Jv_va_list);
173   jlong         (*CallLongMethodA)         (JNIEnv *, jobject, jmethodID,
174                                             jvalue *);
175   jfloat        (*CallFloatMethod)         (JNIEnv *, jobject, jmethodID,
176                                             ...);
177   jfloat        (*CallFloatMethodV)        (JNIEnv *, jobject, jmethodID,
178                                             _Jv_va_list);
179   jfloat        (*CallFloatMethodA)        (JNIEnv *, jobject, jmethodID,
180                                             jvalue *);
181   jdouble       (*CallDoubleMethod)        (JNIEnv *, jobject, jmethodID,
182                                             ...);
183   jdouble       (*CallDoubleMethodV)       (JNIEnv *, jobject, jmethodID,
184                                             _Jv_va_list);
185   jdouble       (*CallDoubleMethodA)       (JNIEnv *, jobject, jmethodID,
186                                             jvalue *);
187   void          (*CallVoidMethod)          (JNIEnv *, jobject, jmethodID,
188                                             ...);
189   void          (*CallVoidMethodV)         (JNIEnv *, jobject, jmethodID,
190                                             _Jv_va_list);
191   void          (*CallVoidMethodA)         (JNIEnv *, jobject, jmethodID,
192                                             jvalue *);
193
194   jobject   (*CallNonvirtualObjectMethod)  (JNIEnv *, jobject, jclass,
195                                             jmethodID, ...);
196   jobject   (*CallNonvirtualObjectMethodV) (JNIEnv *, jobject, jclass,
197                                             jmethodID, _Jv_va_list);
198   jobject   (*CallNonvirtualObjectMethodA) (JNIEnv *, jobject, jclass,
199                                             jmethodID, jvalue *);
200   jboolean  (*CallNonvirtualBooleanMethod) (JNIEnv *, jobject, jclass,
201                                             jmethodID, ...);
202   jboolean  (*CallNonvirtualBooleanMethodV) (JNIEnv *, jobject, jclass,
203                                              jmethodID, _Jv_va_list);
204   jboolean  (*CallNonvirtualBooleanMethodA) (JNIEnv *, jobject, jclass,
205                                              jmethodID, jvalue *);
206   jbyte     (*CallNonvirtualByteMethod)    (JNIEnv *, jobject, jclass,
207                                             jmethodID, ...);
208   jbyte     (*CallNonvirtualByteMethodV)   (JNIEnv *, jobject, jclass,
209                                             jmethodID, _Jv_va_list);
210   jbyte     (*CallNonvirtualByteMethodA)   (JNIEnv *, jobject, jclass,
211                                             jmethodID, jvalue *);
212   jchar     (*CallNonvirtualCharMethod)    (JNIEnv *, jobject, jclass,
213                                             jmethodID, ...);
214   jchar     (*CallNonvirtualCharMethodV)   (JNIEnv *, jobject, jclass,
215                                             jmethodID, _Jv_va_list);
216   jchar     (*CallNonvirtualCharMethodA)   (JNIEnv *, jobject, jclass,
217                                             jmethodID, jvalue *);
218   jshort    (*CallNonvirtualShortMethod)   (JNIEnv *, jobject, jclass,
219                                             jmethodID, ...);
220   jshort    (*CallNonvirtualShortMethodV)  (JNIEnv *, jobject, jclass,
221                                             jmethodID, _Jv_va_list);
222   jshort    (*CallNonvirtualShortMethodA)  (JNIEnv *, jobject, jclass,
223                                             jmethodID, jvalue *);
224   jint      (*CallNonvirtualIntMethod)     (JNIEnv *, jobject, jclass,
225                                             jmethodID, ...);
226   jint      (*CallNonvirtualIntMethodV)    (JNIEnv *, jobject, jclass,
227                                             jmethodID, _Jv_va_list);
228   jint      (*CallNonvirtualIntMethodA)    (JNIEnv *, jobject, jclass,
229                                             jmethodID, jvalue *);
230   jlong     (*CallNonvirtualLongMethod)    (JNIEnv *, jobject, jclass,
231                                             jmethodID, ...);
232   jlong     (*CallNonvirtualLongMethodV)   (JNIEnv *, jobject, jclass,
233                                             jmethodID, _Jv_va_list);
234   jlong     (*CallNonvirtualLongMethodA)   (JNIEnv *, jobject, jclass,
235                                             jmethodID, jvalue *);
236   jfloat    (*CallNonvirtualFloatMethod)   (JNIEnv *, jobject, jclass,
237                                             jmethodID, ...);
238   jfloat    (*CallNonvirtualFloatMethodV)  (JNIEnv *, jobject, jclass,
239                                             jmethodID, _Jv_va_list);
240   jfloat    (*CallNonvirtualFloatMethodA)  (JNIEnv *, jobject, jclass,
241                                             jmethodID, jvalue *);
242   jdouble   (*CallNonvirtualDoubleMethod)  (JNIEnv *, jobject, jclass,
243                                             jmethodID, ...);
244   jdouble   (*CallNonvirtualDoubleMethodV) (JNIEnv *, jobject, jclass,
245                                             jmethodID, _Jv_va_list);
246   jdouble   (*CallNonvirtualDoubleMethodA) (JNIEnv *, jobject, jclass,
247                                             jmethodID, jvalue *);
248   void      (*CallNonvirtualVoidMethod)    (JNIEnv *, jobject, jclass,
249                                             jmethodID, ...);
250   void      (*CallNonvirtualVoidMethodV)   (JNIEnv *, jobject, jclass,
251                                             jmethodID, _Jv_va_list);
252   void      (*CallNonvirtualVoidMethodA)   (JNIEnv *, jobject, jclass,
253                                             jmethodID, jvalue *);
254
255   jfieldID      (*GetFieldID)              (JNIEnv *, jclass, const char *,
256                                             const char *);
257
258   jobject  (*GetObjectField)               (JNIEnv *, jobject, jfieldID);
259   jboolean (*GetBooleanField)              (JNIEnv *, jobject, jfieldID);
260   jbyte    (*GetByteField)                 (JNIEnv *, jobject, jfieldID);
261   jchar    (*GetCharField)                 (JNIEnv *, jobject, jfieldID);
262   jshort   (*GetShortField)                (JNIEnv *, jobject, jfieldID);
263   jint     (*GetIntField)                  (JNIEnv *, jobject, jfieldID);
264   jlong    (*GetLongField)                 (JNIEnv *, jobject, jfieldID);
265   jfloat   (*GetFloatField)                (JNIEnv *, jobject, jfieldID);
266   jdouble  (*GetDoubleField)               (JNIEnv *, jobject, jfieldID);
267
268   void          (*SetObjectField)          (JNIEnv *, jobject,
269                                             jfieldID, jobject);
270   void          (*SetBooleanField)         (JNIEnv *, jobject,
271                                             jfieldID, jboolean);
272   void          (*SetByteField)            (JNIEnv *, jobject,
273                                             jfieldID, jbyte);
274   void          (*SetCharField)            (JNIEnv *, jobject,
275                                             jfieldID, jchar);
276   void          (*SetShortField)           (JNIEnv *, jobject,
277                                             jfieldID, jshort);
278   void          (*SetIntField)             (JNIEnv *, jobject,
279                                             jfieldID, jint);
280   void          (*SetLongField)            (JNIEnv *, jobject,
281                                             jfieldID, jlong);
282   void          (*SetFloatField)           (JNIEnv *, jobject,
283                                             jfieldID, jfloat);
284   void          (*SetDoubleField)          (JNIEnv *, jobject,
285                                             jfieldID, jdouble);
286
287   jmethodID (*GetStaticMethodID)           (JNIEnv *, jclass, const char *,
288                                             const char *);
289
290   jobject       (*CallStaticObjectMethod)  (JNIEnv *, jclass, jmethodID,
291                                             ...);
292   jobject       (*CallStaticObjectMethodV) (JNIEnv *, jclass, jmethodID,
293                                             _Jv_va_list);
294   jobject       (*CallStaticObjectMethodA) (JNIEnv *, jclass, jmethodID,
295                                             jvalue *);
296   jboolean      (*CallStaticBooleanMethod) (JNIEnv *, jclass, jmethodID,
297                                             ...);
298   jboolean      (*CallStaticBooleanMethodV) (JNIEnv *, jclass, jmethodID,
299                                              _Jv_va_list);
300   jboolean      (*CallStaticBooleanMethodA) (JNIEnv *, jclass, jmethodID,
301                                              jvalue *);
302   jbyte         (*CallStaticByteMethod)    (JNIEnv *, jclass, jmethodID,
303                                             ...);
304   jbyte         (*CallStaticByteMethodV)   (JNIEnv *, jclass, jmethodID,
305                                             _Jv_va_list);
306   jbyte         (*CallStaticByteMethodA)   (JNIEnv *, jclass, jmethodID,
307                                             jvalue *);
308   jchar         (*CallStaticCharMethod)    (JNIEnv *, jclass, jmethodID,
309                                             ...);
310   jchar         (*CallStaticCharMethodV)   (JNIEnv *, jclass, jmethodID,
311                                             _Jv_va_list);
312   jchar         (*CallStaticCharMethodA)   (JNIEnv *, jclass, jmethodID,
313                                             jvalue *);
314   jshort        (*CallStaticShortMethod)   (JNIEnv *, jclass, jmethodID,
315                                             ...);
316   jshort        (*CallStaticShortMethodV)  (JNIEnv *, jclass, jmethodID,
317                                             _Jv_va_list);
318   jshort        (*CallStaticShortMethodA)  (JNIEnv *, jclass, jmethodID,
319                                             jvalue *);
320   jint          (*CallStaticIntMethod)     (JNIEnv *, jclass, jmethodID,
321                                             ...);
322   jint          (*CallStaticIntMethodV)    (JNIEnv *, jclass, jmethodID,
323                                             _Jv_va_list);
324   jint          (*CallStaticIntMethodA)    (JNIEnv *, jclass, jmethodID,
325                                             jvalue *);
326   jlong         (*CallStaticLongMethod)    (JNIEnv *, jclass, jmethodID,
327                                             ...);
328   jlong         (*CallStaticLongMethodV)   (JNIEnv *, jclass, jmethodID,
329                                             _Jv_va_list);
330   jlong         (*CallStaticLongMethodA)   (JNIEnv *, jclass, jmethodID,
331                                             jvalue *);
332   jfloat        (*CallStaticFloatMethod)   (JNIEnv *, jclass, jmethodID,
333                                             ...);
334   jfloat        (*CallStaticFloatMethodV)  (JNIEnv *, jclass, jmethodID,
335                                             _Jv_va_list);
336   jfloat        (*CallStaticFloatMethodA)  (JNIEnv *, jclass, jmethodID,
337                                             jvalue *);
338   jdouble       (*CallStaticDoubleMethod)  (JNIEnv *, jclass, jmethodID,
339                                             ...);
340   jdouble       (*CallStaticDoubleMethodV) (JNIEnv *, jclass, jmethodID,
341                                             _Jv_va_list);
342   jdouble       (*CallStaticDoubleMethodA) (JNIEnv *, jclass, jmethodID,
343                                             jvalue *);
344   void          (*CallStaticVoidMethod)    (JNIEnv *, jclass, jmethodID,
345                                             ...);
346   void          (*CallStaticVoidMethodV)   (JNIEnv *, jclass, jmethodID,
347                                             _Jv_va_list);
348   void          (*CallStaticVoidMethodA)   (JNIEnv *, jclass, jmethodID,
349                                             jvalue *);
350
351   jfieldID      (*GetStaticFieldID)        (JNIEnv *, jclass, const char *,
352                                             const char *);
353
354   jobject       (*GetStaticObjectField)    (JNIEnv *, jclass, jfieldID);
355   jboolean      (*GetStaticBooleanField)   (JNIEnv *, jclass, jfieldID);
356   jbyte         (*GetStaticByteField)      (JNIEnv *, jclass, jfieldID);
357   jchar         (*GetStaticCharField)      (JNIEnv *, jclass, jfieldID);
358   jshort        (*GetStaticShortField)     (JNIEnv *, jclass, jfieldID);
359   jint          (*GetStaticIntField)       (JNIEnv *, jclass, jfieldID);
360   jlong         (*GetStaticLongField)      (JNIEnv *, jclass, jfieldID);
361   jfloat        (*GetStaticFloatField)     (JNIEnv *, jclass, jfieldID);
362   jdouble       (*GetStaticDoubleField)    (JNIEnv *, jclass, jfieldID);
363
364   void          (*SetStaticObjectField)    (JNIEnv *, jclass,
365                                             jfieldID, jobject);
366   void          (*SetStaticBooleanField)   (JNIEnv *, jclass,
367                                             jfieldID, jboolean);
368   void          (*SetStaticByteField)      (JNIEnv *, jclass,
369                                             jfieldID, jbyte);
370   void          (*SetStaticCharField)      (JNIEnv *, jclass,
371                                             jfieldID, jchar);
372   void          (*SetStaticShortField)     (JNIEnv *, jclass,
373                                             jfieldID, jshort);
374   void          (*SetStaticIntField)       (JNIEnv *, jclass,
375                                             jfieldID, jint);
376   void          (*SetStaticLongField)      (JNIEnv *, jclass,
377                                             jfieldID, jlong);
378   void          (*SetStaticFloatField)     (JNIEnv *, jclass,
379                                             jfieldID, jfloat);
380   void          (*SetStaticDoubleField)    (JNIEnv *, jclass,
381                                             jfieldID, jdouble);
382
383   jstring  (*NewString)                    (JNIEnv *, const jchar *, jsize);
384   jint     (*GetStringLength)              (JNIEnv *, jstring);
385   const jchar * (*GetStringChars)          (JNIEnv *, jstring, jboolean *);
386   void     (*ReleaseStringChars)           (JNIEnv *, jstring, const jchar *);
387   jstring  (*NewStringUTF)                 (JNIEnv *, const char *);
388   jsize    (*GetStringUTFLength)           (JNIEnv *, jstring);
389   const char * (*GetStringUTFChars)        (JNIEnv *, jstring, jboolean *);
390   void     (*ReleaseStringUTFChars)        (JNIEnv *, jstring, const char *);
391   jsize    (*GetArrayLength)               (JNIEnv *, jarray);
392   jarray   (*NewObjectArray)               (JNIEnv *, jsize, jclass, jobject);
393   jobject  (*GetObjectArrayElement)        (JNIEnv *, jobjectArray, jsize);
394   void     (*SetObjectArrayElement)        (JNIEnv *, jobjectArray, jsize,
395                                             jobject);
396
397   jbooleanArray (*NewBooleanArray)         (JNIEnv *, jsize);
398   jbyteArray    (*NewByteArray)            (JNIEnv *, jsize);
399   jcharArray    (*NewCharArray)            (JNIEnv *, jsize);
400   jshortArray   (*NewShortArray)           (JNIEnv *, jsize);
401   jintArray     (*NewIntArray)             (JNIEnv *, jsize);
402   jlongArray    (*NewLongArray)            (JNIEnv *, jsize);
403   jfloatArray   (*NewFloatArray)           (JNIEnv *, jsize);
404   jdoubleArray  (*NewDoubleArray)          (JNIEnv *, jsize);
405
406   jboolean *    (*GetBooleanArrayElements) (JNIEnv *, jbooleanArray,
407                                             jboolean *);
408   jbyte *       (*GetByteArrayElements)    (JNIEnv *, jbyteArray,
409                                             jboolean *);
410   jchar *       (*GetCharArrayElements)    (JNIEnv *, jcharArray,
411                                             jboolean *);
412   jshort *      (*GetShortArrayElements)   (JNIEnv *, jshortArray,
413                                             jboolean *);
414   jint *        (*GetIntArrayElements)     (JNIEnv *, jintArray,
415                                             jboolean *);
416   jlong *       (*GetLongArrayElements)    (JNIEnv *, jlongArray,
417                                             jboolean *);
418   jfloat *      (*GetFloatArrayElements)   (JNIEnv *, jfloatArray,
419                                             jboolean *);
420   jdouble *     (*GetDoubleArrayElements)  (JNIEnv *, jdoubleArray,
421                                             jboolean *);
422
423   void          (*ReleaseBooleanArrayElements) (JNIEnv *, jbooleanArray,
424                                                 jboolean *, jint);
425   void          (*ReleaseByteArrayElements)    (JNIEnv *, jbyteArray,
426                                                 jbyte *, jint);
427   void          (*ReleaseCharArrayElements)    (JNIEnv *, jcharArray,
428                                                 jchar *, jint);
429   void          (*ReleaseShortArrayElements)   (JNIEnv *, jshortArray,
430                                                 jshort *, jint);
431   void          (*ReleaseIntArrayElements)     (JNIEnv *, jintArray,
432                                                 jint *, jint);
433   void          (*ReleaseLongArrayElements)    (JNIEnv *, jlongArray,
434                                                 jlong *, jint);
435   void          (*ReleaseFloatArrayElements)   (JNIEnv *, jfloatArray,
436                                                 jfloat *, jint);
437   void          (*ReleaseDoubleArrayElements)  (JNIEnv *, jdoubleArray,
438                                                 jdouble *, jint);
439
440   void          (*GetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
441                                             jsize, jsize, jboolean *);
442   void          (*GetByteArrayRegion)      (JNIEnv *, jbooleanArray,
443                                             jsize, jsize, jboolean *);
444   void          (*GetCharArrayRegion)      (JNIEnv *, jbooleanArray,
445                                             jsize, jsize, jboolean *);
446   void          (*GetShortArrayRegion)     (JNIEnv *, jbooleanArray,
447                                             jsize, jsize, jboolean *);
448   void          (*GetIntArrayRegion)       (JNIEnv *, jbooleanArray,
449                                             jsize, jsize, jboolean *);
450   void          (*GetLongArrayRegion)      (JNIEnv *, jbooleanArray,
451                                             jsize, jsize, jboolean *);
452   void          (*GetFloatArrayRegion)     (JNIEnv *, jbooleanArray,
453                                             jsize, jsize, jboolean *);
454   void          (*GetDoubleArrayRegion)    (JNIEnv *, jbooleanArray,
455                                             jsize, jsize, jboolean *);
456
457   void          (*SetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
458                                             jsize, jsize, jboolean *);
459   void          (*SetByteArrayRegion)      (JNIEnv *, jbooleanArray,
460                                             jsize, jsize, jboolean *);
461   void          (*SetCharArrayRegion)      (JNIEnv *, jbooleanArray,
462                                             jsize, jsize, jboolean *);
463   void          (*SetShortArrayRegion)     (JNIEnv *, jbooleanArray,
464                                             jsize, jsize, jboolean *);
465   void          (*SetIntArrayRegion)       (JNIEnv *, jbooleanArray,
466                                             jsize, jsize, jboolean *);
467   void          (*SetLongArrayRegion)      (JNIEnv *, jbooleanArray,
468                                             jsize, jsize, jboolean *);
469   void          (*SetFloatArrayRegion)     (JNIEnv *, jbooleanArray,
470                                             jsize, jsize, jboolean *);
471   void          (*SetDoubleArrayRegion)    (JNIEnv *, jbooleanArray,
472                                             jsize, jsize, jboolean *);
473
474   _Jv_func RegisterNatives;
475   _Jv_func UnregisterNatives;
476   jint     (*MonitorEnter)                 (JNIEnv *, jobject);
477   jint     (*MonitorExit)                  (JNIEnv *, jobject);
478   _Jv_func GetJavaVM;
479 };
480
481 /* This structure is used when registering native methods.  */
482 typedef struct
483 {
484   char *name;
485   char *signature;
486   void *fnPtr;                  /* Sigh.  */
487 } JNINativeMethod;
488
489 #ifdef __cplusplus
490
491 class _Jv_JNIEnv
492 {
493 public:
494   /* The method table.  */
495   struct JNINativeInterface *p;
496
497 private:
498   /* The current exception.  */
499   jthrowable ex;
500
501   /* This doesn't really protect the private contents, because anybody
502      can set this macro.  However, if they do set it then they at
503      least know they are doing something unportable.  */
504 #ifdef GCJ_JV_JNIENV_FRIEND
505   GCJ_JV_JNIENV_FRIEND;
506 #endif
507
508 public:
509   jclass GetSuperclass (jclass cl)
510   { return p->GetSuperclass (this, cl); }
511
512   jsize GetStringLength (jstring str)
513   { return p->GetStringLength (this, str); }
514 };
515
516 #endif /* __cplusplus */
517
518 #endif /* __GCJ_JNI_H__ */