1 /* Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
3 This file is part of libgcj.
5 This software is copyrighted work licensed under the terms of the
6 Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
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
18 #define _Jv_va_list va_list
22 /* This is wrong, because it pollutes the name-space too much! */
23 #include <gcj/javaprims.h>
25 typedef struct _Jv_JNIEnv JNIEnv;
28 #define JNI_FALSE false
30 #else /* __cplusplus */
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__)));
39 typedef double jdouble;
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;
58 typedef void *jfieldID;
59 typedef void *jmethodID;
61 typedef const struct JNINativeInterface *JNIEnv;
66 #endif /* __cplusplus */
68 /* Version numbers. */
69 #define JNI_VERSION_1_1 0x00010001
70 #define JNI_VERSION_1_2 0x00010002
72 /* Used when releasing array elements. */
89 typedef void * (*_Jv_func)(...);
91 struct JNINativeInterface
97 jint (*GetVersion) (JNIEnv*);
103 jclass (*GetSuperclass) (JNIEnv*, jclass);
104 jboolean (*IsAssignableFrom) (JNIEnv*, jclass, jclass);
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 *);
114 _Jv_func NewGlobalRef;
115 _Jv_func DeleteGlobalRef;
116 _Jv_func DeleteLocalRef;
117 jboolean (*IsSameObject) (JNIEnv *, jobject, jobject);
121 jobject (*AllocObject) (JNIEnv *, jclass);
122 jobject (*NewObject) (JNIEnv *, jclass, jmethodID, ...);
123 jobject (*NewObjectV) (JNIEnv *, jclass, jmethodID,
125 jobject (*NewObjectA) (JNIEnv *, jclass, jmethodID,
128 jclass (*GetObjectClass) (JNIEnv *, jobject);
129 jboolean (*IsInstanceOf) (JNIEnv *, jobject, jclass);
130 jmethodID (*GetMethodID) (JNIEnv *, jclass, const char *,
133 jobject (*CallObjectMethod) (JNIEnv *, jobject, jmethodID,
135 jobject (*CallObjectMethodV) (JNIEnv *, jobject, jmethodID,
137 jobject (*CallObjectMethodA) (JNIEnv *, jobject, jmethodID,
139 jboolean (*CallBooleanMethod) (JNIEnv *, jobject, jmethodID,
141 jboolean (*CallBooleanMethodV) (JNIEnv *, jobject, jmethodID,
143 jboolean (*CallBooleanMethodA) (JNIEnv *, jobject, jmethodID,
145 jbyte (*CallByteMethod) (JNIEnv *, jobject, jmethodID,
147 jbyte (*CallByteMethodV) (JNIEnv *, jobject, jmethodID,
149 jbyte (*CallByteMethodA) (JNIEnv *, jobject, jmethodID,
151 jchar (*CallCharMethod) (JNIEnv *, jobject, jmethodID,
153 jchar (*CallCharMethodV) (JNIEnv *, jobject, jmethodID,
155 jchar (*CallCharMethodA) (JNIEnv *, jobject, jmethodID,
157 jshort (*CallShortMethod) (JNIEnv *, jobject, jmethodID,
159 jshort (*CallShortMethodV) (JNIEnv *, jobject, jmethodID,
161 jshort (*CallShortMethodA) (JNIEnv *, jobject, jmethodID,
163 jint (*CallIntMethod) (JNIEnv *, jobject, jmethodID,
165 jint (*CallIntMethodV) (JNIEnv *, jobject, jmethodID,
167 jint (*CallIntMethodA) (JNIEnv *, jobject, jmethodID,
169 jlong (*CallLongMethod) (JNIEnv *, jobject, jmethodID,
171 jlong (*CallLongMethodV) (JNIEnv *, jobject, jmethodID,
173 jlong (*CallLongMethodA) (JNIEnv *, jobject, jmethodID,
175 jfloat (*CallFloatMethod) (JNIEnv *, jobject, jmethodID,
177 jfloat (*CallFloatMethodV) (JNIEnv *, jobject, jmethodID,
179 jfloat (*CallFloatMethodA) (JNIEnv *, jobject, jmethodID,
181 jdouble (*CallDoubleMethod) (JNIEnv *, jobject, jmethodID,
183 jdouble (*CallDoubleMethodV) (JNIEnv *, jobject, jmethodID,
185 jdouble (*CallDoubleMethodA) (JNIEnv *, jobject, jmethodID,
187 void (*CallVoidMethod) (JNIEnv *, jobject, jmethodID,
189 void (*CallVoidMethodV) (JNIEnv *, jobject, jmethodID,
191 void (*CallVoidMethodA) (JNIEnv *, jobject, jmethodID,
194 jobject (*CallNonvirtualObjectMethod) (JNIEnv *, jobject, jclass,
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,
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,
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,
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,
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,
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,
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,
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,
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,
250 void (*CallNonvirtualVoidMethodV) (JNIEnv *, jobject, jclass,
251 jmethodID, _Jv_va_list);
252 void (*CallNonvirtualVoidMethodA) (JNIEnv *, jobject, jclass,
253 jmethodID, jvalue *);
255 jfieldID (*GetFieldID) (JNIEnv *, jclass, const char *,
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);
268 void (*SetObjectField) (JNIEnv *, jobject,
270 void (*SetBooleanField) (JNIEnv *, jobject,
272 void (*SetByteField) (JNIEnv *, jobject,
274 void (*SetCharField) (JNIEnv *, jobject,
276 void (*SetShortField) (JNIEnv *, jobject,
278 void (*SetIntField) (JNIEnv *, jobject,
280 void (*SetLongField) (JNIEnv *, jobject,
282 void (*SetFloatField) (JNIEnv *, jobject,
284 void (*SetDoubleField) (JNIEnv *, jobject,
287 jmethodID (*GetStaticMethodID) (JNIEnv *, jclass, const char *,
290 jobject (*CallStaticObjectMethod) (JNIEnv *, jclass, jmethodID,
292 jobject (*CallStaticObjectMethodV) (JNIEnv *, jclass, jmethodID,
294 jobject (*CallStaticObjectMethodA) (JNIEnv *, jclass, jmethodID,
296 jboolean (*CallStaticBooleanMethod) (JNIEnv *, jclass, jmethodID,
298 jboolean (*CallStaticBooleanMethodV) (JNIEnv *, jclass, jmethodID,
300 jboolean (*CallStaticBooleanMethodA) (JNIEnv *, jclass, jmethodID,
302 jbyte (*CallStaticByteMethod) (JNIEnv *, jclass, jmethodID,
304 jbyte (*CallStaticByteMethodV) (JNIEnv *, jclass, jmethodID,
306 jbyte (*CallStaticByteMethodA) (JNIEnv *, jclass, jmethodID,
308 jchar (*CallStaticCharMethod) (JNIEnv *, jclass, jmethodID,
310 jchar (*CallStaticCharMethodV) (JNIEnv *, jclass, jmethodID,
312 jchar (*CallStaticCharMethodA) (JNIEnv *, jclass, jmethodID,
314 jshort (*CallStaticShortMethod) (JNIEnv *, jclass, jmethodID,
316 jshort (*CallStaticShortMethodV) (JNIEnv *, jclass, jmethodID,
318 jshort (*CallStaticShortMethodA) (JNIEnv *, jclass, jmethodID,
320 jint (*CallStaticIntMethod) (JNIEnv *, jclass, jmethodID,
322 jint (*CallStaticIntMethodV) (JNIEnv *, jclass, jmethodID,
324 jint (*CallStaticIntMethodA) (JNIEnv *, jclass, jmethodID,
326 jlong (*CallStaticLongMethod) (JNIEnv *, jclass, jmethodID,
328 jlong (*CallStaticLongMethodV) (JNIEnv *, jclass, jmethodID,
330 jlong (*CallStaticLongMethodA) (JNIEnv *, jclass, jmethodID,
332 jfloat (*CallStaticFloatMethod) (JNIEnv *, jclass, jmethodID,
334 jfloat (*CallStaticFloatMethodV) (JNIEnv *, jclass, jmethodID,
336 jfloat (*CallStaticFloatMethodA) (JNIEnv *, jclass, jmethodID,
338 jdouble (*CallStaticDoubleMethod) (JNIEnv *, jclass, jmethodID,
340 jdouble (*CallStaticDoubleMethodV) (JNIEnv *, jclass, jmethodID,
342 jdouble (*CallStaticDoubleMethodA) (JNIEnv *, jclass, jmethodID,
344 void (*CallStaticVoidMethod) (JNIEnv *, jclass, jmethodID,
346 void (*CallStaticVoidMethodV) (JNIEnv *, jclass, jmethodID,
348 void (*CallStaticVoidMethodA) (JNIEnv *, jclass, jmethodID,
351 jfieldID (*GetStaticFieldID) (JNIEnv *, jclass, const char *,
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);
364 void (*SetStaticObjectField) (JNIEnv *, jclass,
366 void (*SetStaticBooleanField) (JNIEnv *, jclass,
368 void (*SetStaticByteField) (JNIEnv *, jclass,
370 void (*SetStaticCharField) (JNIEnv *, jclass,
372 void (*SetStaticShortField) (JNIEnv *, jclass,
374 void (*SetStaticIntField) (JNIEnv *, jclass,
376 void (*SetStaticLongField) (JNIEnv *, jclass,
378 void (*SetStaticFloatField) (JNIEnv *, jclass,
380 void (*SetStaticDoubleField) (JNIEnv *, jclass,
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,
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);
406 jboolean * (*GetBooleanArrayElements) (JNIEnv *, jbooleanArray,
408 jbyte * (*GetByteArrayElements) (JNIEnv *, jbyteArray,
410 jchar * (*GetCharArrayElements) (JNIEnv *, jcharArray,
412 jshort * (*GetShortArrayElements) (JNIEnv *, jshortArray,
414 jint * (*GetIntArrayElements) (JNIEnv *, jintArray,
416 jlong * (*GetLongArrayElements) (JNIEnv *, jlongArray,
418 jfloat * (*GetFloatArrayElements) (JNIEnv *, jfloatArray,
420 jdouble * (*GetDoubleArrayElements) (JNIEnv *, jdoubleArray,
423 void (*ReleaseBooleanArrayElements) (JNIEnv *, jbooleanArray,
425 void (*ReleaseByteArrayElements) (JNIEnv *, jbyteArray,
427 void (*ReleaseCharArrayElements) (JNIEnv *, jcharArray,
429 void (*ReleaseShortArrayElements) (JNIEnv *, jshortArray,
431 void (*ReleaseIntArrayElements) (JNIEnv *, jintArray,
433 void (*ReleaseLongArrayElements) (JNIEnv *, jlongArray,
435 void (*ReleaseFloatArrayElements) (JNIEnv *, jfloatArray,
437 void (*ReleaseDoubleArrayElements) (JNIEnv *, jdoubleArray,
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 *);
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 *);
474 _Jv_func RegisterNatives;
475 _Jv_func UnregisterNatives;
476 jint (*MonitorEnter) (JNIEnv *, jobject);
477 jint (*MonitorExit) (JNIEnv *, jobject);
481 /* This structure is used when registering native methods. */
486 void *fnPtr; /* Sigh. */
494 /* The method table. */
495 struct JNINativeInterface *p;
498 /* The current exception. */
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;
509 jclass GetSuperclass (jclass cl)
510 { return p->GetSuperclass (this, cl); }
512 jsize GetStringLength (jstring str)
513 { return p->GetStringLength (this, str); }
516 #endif /* __cplusplus */
518 #endif /* __GCJ_JNI_H__ */