1 /*
2  * @(#)jni.h	1.62 06/02/02
3  *
4  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
5  * SUN PROPRIETARY/CONFIDENTIAL.  Use is subject to license terms.
6  */
7 
8 /*
9  * We used part of Netscape's Java Runtime Interface (JRI) as the starting
10  * point of our design and implementation.
11  */
12 
13 /******************************************************************************
14  * Java Runtime Interface
15  * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
16  *****************************************************************************/
17 
18 #ifndef _JAVASOFT_JNI_H_
19 #define _JAVASOFT_JNI_H_
20 
21 #include <stdio.h>
22 #include <stdarg.h>
23 
24 /* jni_md.h contains the machine-dependent typedefs for jbyte, jint
25    and jlong */
26 
27 #include "jni_md.h"
28 
29 #ifdef __cplusplus
30 extern "C" {
31 #endif
32 
33 /*
34  * JNI Types
35  */
36 
37 #ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H
38 
39 typedef unsigned char	jboolean;
40 typedef unsigned short	jchar;
41 typedef short		jshort;
42 typedef float		jfloat;
43 typedef double		jdouble;
44 
45 typedef jint            jsize;
46 
47 #ifdef __cplusplus
48 
49 class _jobject {};
50 class _jclass : public _jobject {};
51 class _jthrowable : public _jobject {};
52 class _jstring : public _jobject {};
53 class _jarray : public _jobject {};
54 class _jbooleanArray : public _jarray {};
55 class _jbyteArray : public _jarray {};
56 class _jcharArray : public _jarray {};
57 class _jshortArray : public _jarray {};
58 class _jintArray : public _jarray {};
59 class _jlongArray : public _jarray {};
60 class _jfloatArray : public _jarray {};
61 class _jdoubleArray : public _jarray {};
62 class _jobjectArray : public _jarray {};
63 
64 typedef _jobject *jobject;
65 typedef _jclass *jclass;
66 typedef _jthrowable *jthrowable;
67 typedef _jstring *jstring;
68 typedef _jarray *jarray;
69 typedef _jbooleanArray *jbooleanArray;
70 typedef _jbyteArray *jbyteArray;
71 typedef _jcharArray *jcharArray;
72 typedef _jshortArray *jshortArray;
73 typedef _jintArray *jintArray;
74 typedef _jlongArray *jlongArray;
75 typedef _jfloatArray *jfloatArray;
76 typedef _jdoubleArray *jdoubleArray;
77 typedef _jobjectArray *jobjectArray;
78 
79 #else
80 
81 struct _jobject;
82 
83 typedef struct _jobject *jobject;
84 typedef jobject jclass;
85 typedef jobject jthrowable;
86 typedef jobject jstring;
87 typedef jobject jarray;
88 typedef jarray jbooleanArray;
89 typedef jarray jbyteArray;
90 typedef jarray jcharArray;
91 typedef jarray jshortArray;
92 typedef jarray jintArray;
93 typedef jarray jlongArray;
94 typedef jarray jfloatArray;
95 typedef jarray jdoubleArray;
96 typedef jarray jobjectArray;
97 
98 #endif
99 
100 typedef jobject jweak;
101 
102 typedef union jvalue {
103     jboolean z;
104     jbyte    b;
105     jchar    c;
106     jshort   s;
107     jint     i;
108     jlong    j;
109     jfloat   f;
110     jdouble  d;
111     jobject  l;
112 } jvalue;
113 
114 struct _jfieldID;
115 typedef struct _jfieldID *jfieldID;
116 
117 struct _jmethodID;
118 typedef struct _jmethodID *jmethodID;
119 
120 /* Return values from jobjectRefType */
121 typedef enum _jobjectType {
122      JNIInvalidRefType    = 0,
123      JNILocalRefType      = 1,
124      JNIGlobalRefType     = 2,
125      JNIWeakGlobalRefType = 3
126 } jobjectRefType;
127 
128 
129 #endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */
130 
131 /*
132  * jboolean constants
133  */
134 
135 #define JNI_FALSE 0
136 #define JNI_TRUE 1
137 
138 /*
139  * possible return values for JNI functions.
140  */
141 
142 #define JNI_OK           0                 /* success */
143 #define JNI_ERR          (-1)              /* unknown error */
144 #define JNI_EDETACHED    (-2)              /* thread detached from the VM */
145 #define JNI_EVERSION     (-3)              /* JNI version error */
146 #define JNI_ENOMEM       (-4)              /* not enough memory */
147 #define JNI_EEXIST       (-5)              /* VM already created */
148 #define JNI_EINVAL       (-6)              /* invalid arguments */
149 
150 /*
151  * used in ReleaseScalarArrayElements
152  */
153 
154 #define JNI_COMMIT 1
155 #define JNI_ABORT 2
156 
157 /*
158  * used in RegisterNatives to describe native method name, signature,
159  * and function pointer.
160  */
161 
162 typedef struct {
163     char *name;
164     char *signature;
165     void *fnPtr;
166 } JNINativeMethod;
167 
168 /*
169  * JNI Native Method Interface.
170  */
171 
172 struct JNINativeInterface_;
173 
174 struct JNIEnv_;
175 
176 #ifdef __cplusplus
177 typedef JNIEnv_ JNIEnv;
178 #else
179 typedef const struct JNINativeInterface_ *JNIEnv;
180 #endif
181 
182 /*
183  * JNI Invocation Interface.
184  */
185 
186 struct JNIInvokeInterface_;
187 
188 struct JavaVM_;
189 
190 #ifdef __cplusplus
191 typedef JavaVM_ JavaVM;
192 #else
193 typedef const struct JNIInvokeInterface_ *JavaVM;
194 #endif
195 
196 struct JNINativeInterface_ {
197     void *reserved0;
198     void *reserved1;
199     void *reserved2;
200 
201     void *reserved3;
202 
203 #if !TARGET_RT_MAC_CFM && defined(__ppc__)
204     void* cfm_vectors[225];
205 #endif /* !TARGET_RT_MAC_CFM && defined(__ppc__) */
206 
207     jint (JNICALL *GetVersion)(JNIEnv *env);
208 
209     jclass (JNICALL *DefineClass)
210       (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
211        jsize len);
212     jclass (JNICALL *FindClass)
213       (JNIEnv *env, const char *name);
214 
215     jmethodID (JNICALL *FromReflectedMethod)
216       (JNIEnv *env, jobject method);
217     jfieldID (JNICALL *FromReflectedField)
218       (JNIEnv *env, jobject field);
219 
220     jobject (JNICALL *ToReflectedMethod)
221       (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);
222 
223     jclass (JNICALL *GetSuperclass)
224       (JNIEnv *env, jclass sub);
225     jboolean (JNICALL *IsAssignableFrom)
226       (JNIEnv *env, jclass sub, jclass sup);
227 
228     jobject (JNICALL *ToReflectedField)
229       (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
230 
231     jint (JNICALL *Throw)
232       (JNIEnv *env, jthrowable obj);
233     jint (JNICALL *ThrowNew)
234       (JNIEnv *env, jclass clazz, const char *msg);
235     jthrowable (JNICALL *ExceptionOccurred)
236       (JNIEnv *env);
237     void (JNICALL *ExceptionDescribe)
238       (JNIEnv *env);
239     void (JNICALL *ExceptionClear)
240       (JNIEnv *env);
241     void (JNICALL *FatalError)
242       (JNIEnv *env, const char *msg);
243 
244     jint (JNICALL *PushLocalFrame)
245       (JNIEnv *env, jint capacity);
246     jobject (JNICALL *PopLocalFrame)
247       (JNIEnv *env, jobject result);
248 
249     jobject (JNICALL *NewGlobalRef)
250       (JNIEnv *env, jobject lobj);
251     void (JNICALL *DeleteGlobalRef)
252       (JNIEnv *env, jobject gref);
253     void (JNICALL *DeleteLocalRef)
254       (JNIEnv *env, jobject obj);
255     jboolean (JNICALL *IsSameObject)
256       (JNIEnv *env, jobject obj1, jobject obj2);
257     jobject (JNICALL *NewLocalRef)
258       (JNIEnv *env, jobject ref);
259     jint (JNICALL *EnsureLocalCapacity)
260       (JNIEnv *env, jint capacity);
261 
262     jobject (JNICALL *AllocObject)
263       (JNIEnv *env, jclass clazz);
264     jobject (JNICALL *NewObject)
265       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
266     jobject (JNICALL *NewObjectV)
267       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
268     jobject (JNICALL *NewObjectA)
269       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
270 
271     jclass (JNICALL *GetObjectClass)
272       (JNIEnv *env, jobject obj);
273     jboolean (JNICALL *IsInstanceOf)
274       (JNIEnv *env, jobject obj, jclass clazz);
275 
276     jmethodID (JNICALL *GetMethodID)
277       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
278 
279     jobject (JNICALL *CallObjectMethod)
280       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
281     jobject (JNICALL *CallObjectMethodV)
282       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
283     jobject (JNICALL *CallObjectMethodA)
284       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
285 
286     jboolean (JNICALL *CallBooleanMethod)
287       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
288     jboolean (JNICALL *CallBooleanMethodV)
289       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
290     jboolean (JNICALL *CallBooleanMethodA)
291       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
292 
293     jbyte (JNICALL *CallByteMethod)
294       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
295     jbyte (JNICALL *CallByteMethodV)
296       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
297     jbyte (JNICALL *CallByteMethodA)
298       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
299 
300     jchar (JNICALL *CallCharMethod)
301       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
302     jchar (JNICALL *CallCharMethodV)
303       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
304     jchar (JNICALL *CallCharMethodA)
305       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
306 
307     jshort (JNICALL *CallShortMethod)
308       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
309     jshort (JNICALL *CallShortMethodV)
310       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
311     jshort (JNICALL *CallShortMethodA)
312       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
313 
314     jint (JNICALL *CallIntMethod)
315       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
316     jint (JNICALL *CallIntMethodV)
317       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
318     jint (JNICALL *CallIntMethodA)
319       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
320 
321     jlong (JNICALL *CallLongMethod)
322       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
323     jlong (JNICALL *CallLongMethodV)
324       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
325     jlong (JNICALL *CallLongMethodA)
326       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
327 
328     jfloat (JNICALL *CallFloatMethod)
329       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
330     jfloat (JNICALL *CallFloatMethodV)
331       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
332     jfloat (JNICALL *CallFloatMethodA)
333       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
334 
335     jdouble (JNICALL *CallDoubleMethod)
336       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
337     jdouble (JNICALL *CallDoubleMethodV)
338       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
339     jdouble (JNICALL *CallDoubleMethodA)
340       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
341 
342     void (JNICALL *CallVoidMethod)
343       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
344     void (JNICALL *CallVoidMethodV)
345       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
346     void (JNICALL *CallVoidMethodA)
347       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
348 
349     jobject (JNICALL *CallNonvirtualObjectMethod)
350       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
351     jobject (JNICALL *CallNonvirtualObjectMethodV)
352       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
353        va_list args);
354     jobject (JNICALL *CallNonvirtualObjectMethodA)
355       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
356        const jvalue * args);
357 
358     jboolean (JNICALL *CallNonvirtualBooleanMethod)
359       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
360     jboolean (JNICALL *CallNonvirtualBooleanMethodV)
361       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
362        va_list args);
363     jboolean (JNICALL *CallNonvirtualBooleanMethodA)
364       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
365        const jvalue * args);
366 
367     jbyte (JNICALL *CallNonvirtualByteMethod)
368       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
369     jbyte (JNICALL *CallNonvirtualByteMethodV)
370       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
371        va_list args);
372     jbyte (JNICALL *CallNonvirtualByteMethodA)
373       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
374        const jvalue *args);
375 
376     jchar (JNICALL *CallNonvirtualCharMethod)
377       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
378     jchar (JNICALL *CallNonvirtualCharMethodV)
379       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
380        va_list args);
381     jchar (JNICALL *CallNonvirtualCharMethodA)
382       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
383        const jvalue *args);
384 
385     jshort (JNICALL *CallNonvirtualShortMethod)
386       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
387     jshort (JNICALL *CallNonvirtualShortMethodV)
388       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
389        va_list args);
390     jshort (JNICALL *CallNonvirtualShortMethodA)
391       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
392        const jvalue *args);
393 
394     jint (JNICALL *CallNonvirtualIntMethod)
395       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
396     jint (JNICALL *CallNonvirtualIntMethodV)
397       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
398        va_list args);
399     jint (JNICALL *CallNonvirtualIntMethodA)
400       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
401        const jvalue *args);
402 
403     jlong (JNICALL *CallNonvirtualLongMethod)
404       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
405     jlong (JNICALL *CallNonvirtualLongMethodV)
406       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
407        va_list args);
408     jlong (JNICALL *CallNonvirtualLongMethodA)
409       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
410        const jvalue *args);
411 
412     jfloat (JNICALL *CallNonvirtualFloatMethod)
413       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
414     jfloat (JNICALL *CallNonvirtualFloatMethodV)
415       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
416        va_list args);
417     jfloat (JNICALL *CallNonvirtualFloatMethodA)
418       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
419        const jvalue *args);
420 
421     jdouble (JNICALL *CallNonvirtualDoubleMethod)
422       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
423     jdouble (JNICALL *CallNonvirtualDoubleMethodV)
424       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
425        va_list args);
426     jdouble (JNICALL *CallNonvirtualDoubleMethodA)
427       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
428        const jvalue *args);
429 
430     void (JNICALL *CallNonvirtualVoidMethod)
431       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
432     void (JNICALL *CallNonvirtualVoidMethodV)
433       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
434        va_list args);
435     void (JNICALL *CallNonvirtualVoidMethodA)
436       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
437        const jvalue * args);
438 
439     jfieldID (JNICALL *GetFieldID)
440       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
441 
442     jobject (JNICALL *GetObjectField)
443       (JNIEnv *env, jobject obj, jfieldID fieldID);
444     jboolean (JNICALL *GetBooleanField)
445       (JNIEnv *env, jobject obj, jfieldID fieldID);
446     jbyte (JNICALL *GetByteField)
447       (JNIEnv *env, jobject obj, jfieldID fieldID);
448     jchar (JNICALL *GetCharField)
449       (JNIEnv *env, jobject obj, jfieldID fieldID);
450     jshort (JNICALL *GetShortField)
451       (JNIEnv *env, jobject obj, jfieldID fieldID);
452     jint (JNICALL *GetIntField)
453       (JNIEnv *env, jobject obj, jfieldID fieldID);
454     jlong (JNICALL *GetLongField)
455       (JNIEnv *env, jobject obj, jfieldID fieldID);
456     jfloat (JNICALL *GetFloatField)
457       (JNIEnv *env, jobject obj, jfieldID fieldID);
458     jdouble (JNICALL *GetDoubleField)
459       (JNIEnv *env, jobject obj, jfieldID fieldID);
460 
461     void (JNICALL *SetObjectField)
462       (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
463     void (JNICALL *SetBooleanField)
464       (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
465     void (JNICALL *SetByteField)
466       (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
467     void (JNICALL *SetCharField)
468       (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
469     void (JNICALL *SetShortField)
470       (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
471     void (JNICALL *SetIntField)
472       (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
473     void (JNICALL *SetLongField)
474       (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
475     void (JNICALL *SetFloatField)
476       (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
477     void (JNICALL *SetDoubleField)
478       (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
479 
480     jmethodID (JNICALL *GetStaticMethodID)
481       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
482 
483     jobject (JNICALL *CallStaticObjectMethod)
484       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
485     jobject (JNICALL *CallStaticObjectMethodV)
486       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
487     jobject (JNICALL *CallStaticObjectMethodA)
488       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
489 
490     jboolean (JNICALL *CallStaticBooleanMethod)
491       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
492     jboolean (JNICALL *CallStaticBooleanMethodV)
493       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
494     jboolean (JNICALL *CallStaticBooleanMethodA)
495       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
496 
497     jbyte (JNICALL *CallStaticByteMethod)
498       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
499     jbyte (JNICALL *CallStaticByteMethodV)
500       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
501     jbyte (JNICALL *CallStaticByteMethodA)
502       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
503 
504     jchar (JNICALL *CallStaticCharMethod)
505       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
506     jchar (JNICALL *CallStaticCharMethodV)
507       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
508     jchar (JNICALL *CallStaticCharMethodA)
509       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
510 
511     jshort (JNICALL *CallStaticShortMethod)
512       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
513     jshort (JNICALL *CallStaticShortMethodV)
514       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
515     jshort (JNICALL *CallStaticShortMethodA)
516       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
517 
518     jint (JNICALL *CallStaticIntMethod)
519       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
520     jint (JNICALL *CallStaticIntMethodV)
521       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
522     jint (JNICALL *CallStaticIntMethodA)
523       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
524 
525     jlong (JNICALL *CallStaticLongMethod)
526       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
527     jlong (JNICALL *CallStaticLongMethodV)
528       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
529     jlong (JNICALL *CallStaticLongMethodA)
530       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
531 
532     jfloat (JNICALL *CallStaticFloatMethod)
533       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
534     jfloat (JNICALL *CallStaticFloatMethodV)
535       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
536     jfloat (JNICALL *CallStaticFloatMethodA)
537       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
538 
539     jdouble (JNICALL *CallStaticDoubleMethod)
540       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
541     jdouble (JNICALL *CallStaticDoubleMethodV)
542       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
543     jdouble (JNICALL *CallStaticDoubleMethodA)
544       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
545 
546     void (JNICALL *CallStaticVoidMethod)
547       (JNIEnv *env, jclass cls, jmethodID methodID, ...);
548     void (JNICALL *CallStaticVoidMethodV)
549       (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
550     void (JNICALL *CallStaticVoidMethodA)
551       (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);
552 
553     jfieldID (JNICALL *GetStaticFieldID)
554       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
555     jobject (JNICALL *GetStaticObjectField)
556       (JNIEnv *env, jclass clazz, jfieldID fieldID);
557     jboolean (JNICALL *GetStaticBooleanField)
558       (JNIEnv *env, jclass clazz, jfieldID fieldID);
559     jbyte (JNICALL *GetStaticByteField)
560       (JNIEnv *env, jclass clazz, jfieldID fieldID);
561     jchar (JNICALL *GetStaticCharField)
562       (JNIEnv *env, jclass clazz, jfieldID fieldID);
563     jshort (JNICALL *GetStaticShortField)
564       (JNIEnv *env, jclass clazz, jfieldID fieldID);
565     jint (JNICALL *GetStaticIntField)
566       (JNIEnv *env, jclass clazz, jfieldID fieldID);
567     jlong (JNICALL *GetStaticLongField)
568       (JNIEnv *env, jclass clazz, jfieldID fieldID);
569     jfloat (JNICALL *GetStaticFloatField)
570       (JNIEnv *env, jclass clazz, jfieldID fieldID);
571     jdouble (JNICALL *GetStaticDoubleField)
572       (JNIEnv *env, jclass clazz, jfieldID fieldID);
573 
574     void (JNICALL *SetStaticObjectField)
575       (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
576     void (JNICALL *SetStaticBooleanField)
577       (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
578     void (JNICALL *SetStaticByteField)
579       (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
580     void (JNICALL *SetStaticCharField)
581       (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
582     void (JNICALL *SetStaticShortField)
583       (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
584     void (JNICALL *SetStaticIntField)
585       (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
586     void (JNICALL *SetStaticLongField)
587       (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
588     void (JNICALL *SetStaticFloatField)
589       (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
590     void (JNICALL *SetStaticDoubleField)
591       (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
592 
593     jstring (JNICALL *NewString)
594       (JNIEnv *env, const jchar *unicode, jsize len);
595     jsize (JNICALL *GetStringLength)
596       (JNIEnv *env, jstring str);
597     const jchar *(JNICALL *GetStringChars)
598       (JNIEnv *env, jstring str, jboolean *isCopy);
599     void (JNICALL *ReleaseStringChars)
600       (JNIEnv *env, jstring str, const jchar *chars);
601 
602     jstring (JNICALL *NewStringUTF)
603       (JNIEnv *env, const char *utf);
604     jsize (JNICALL *GetStringUTFLength)
605       (JNIEnv *env, jstring str);
606     const char* (JNICALL *GetStringUTFChars)
607       (JNIEnv *env, jstring str, jboolean *isCopy);
608     void (JNICALL *ReleaseStringUTFChars)
609       (JNIEnv *env, jstring str, const char* chars);
610 
611 
612     jsize (JNICALL *GetArrayLength)
613       (JNIEnv *env, jarray array);
614 
615     jobjectArray (JNICALL *NewObjectArray)
616       (JNIEnv *env, jsize len, jclass clazz, jobject init);
617     jobject (JNICALL *GetObjectArrayElement)
618       (JNIEnv *env, jobjectArray array, jsize index);
619     void (JNICALL *SetObjectArrayElement)
620       (JNIEnv *env, jobjectArray array, jsize index, jobject val);
621 
622     jbooleanArray (JNICALL *NewBooleanArray)
623       (JNIEnv *env, jsize len);
624     jbyteArray (JNICALL *NewByteArray)
625       (JNIEnv *env, jsize len);
626     jcharArray (JNICALL *NewCharArray)
627       (JNIEnv *env, jsize len);
628     jshortArray (JNICALL *NewShortArray)
629       (JNIEnv *env, jsize len);
630     jintArray (JNICALL *NewIntArray)
631       (JNIEnv *env, jsize len);
632     jlongArray (JNICALL *NewLongArray)
633       (JNIEnv *env, jsize len);
634     jfloatArray (JNICALL *NewFloatArray)
635       (JNIEnv *env, jsize len);
636     jdoubleArray (JNICALL *NewDoubleArray)
637       (JNIEnv *env, jsize len);
638 
639     jboolean * (JNICALL *GetBooleanArrayElements)
640       (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
641     jbyte * (JNICALL *GetByteArrayElements)
642       (JNIEnv *env, jbyteArray array, jboolean *isCopy);
643     jchar * (JNICALL *GetCharArrayElements)
644       (JNIEnv *env, jcharArray array, jboolean *isCopy);
645     jshort * (JNICALL *GetShortArrayElements)
646       (JNIEnv *env, jshortArray array, jboolean *isCopy);
647     jint * (JNICALL *GetIntArrayElements)
648       (JNIEnv *env, jintArray array, jboolean *isCopy);
649     jlong * (JNICALL *GetLongArrayElements)
650       (JNIEnv *env, jlongArray array, jboolean *isCopy);
651     jfloat * (JNICALL *GetFloatArrayElements)
652       (JNIEnv *env, jfloatArray array, jboolean *isCopy);
653     jdouble * (JNICALL *GetDoubleArrayElements)
654       (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
655 
656     void (JNICALL *ReleaseBooleanArrayElements)
657       (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
658     void (JNICALL *ReleaseByteArrayElements)
659       (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
660     void (JNICALL *ReleaseCharArrayElements)
661       (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
662     void (JNICALL *ReleaseShortArrayElements)
663       (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
664     void (JNICALL *ReleaseIntArrayElements)
665       (JNIEnv *env, jintArray array, jint *elems, jint mode);
666     void (JNICALL *ReleaseLongArrayElements)
667       (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
668     void (JNICALL *ReleaseFloatArrayElements)
669       (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
670     void (JNICALL *ReleaseDoubleArrayElements)
671       (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
672 
673     void (JNICALL *GetBooleanArrayRegion)
674       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
675     void (JNICALL *GetByteArrayRegion)
676       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
677     void (JNICALL *GetCharArrayRegion)
678       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
679     void (JNICALL *GetShortArrayRegion)
680       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
681     void (JNICALL *GetIntArrayRegion)
682       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
683     void (JNICALL *GetLongArrayRegion)
684       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
685     void (JNICALL *GetFloatArrayRegion)
686       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
687     void (JNICALL *GetDoubleArrayRegion)
688       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
689 
690     void (JNICALL *SetBooleanArrayRegion)
691       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);
692     void (JNICALL *SetByteArrayRegion)
693       (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);
694     void (JNICALL *SetCharArrayRegion)
695       (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);
696     void (JNICALL *SetShortArrayRegion)
697       (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);
698     void (JNICALL *SetIntArrayRegion)
699       (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);
700     void (JNICALL *SetLongArrayRegion)
701       (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);
702     void (JNICALL *SetFloatArrayRegion)
703       (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);
704     void (JNICALL *SetDoubleArrayRegion)
705       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);
706 
707     jint (JNICALL *RegisterNatives)
708       (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
709        jint nMethods);
710     jint (JNICALL *UnregisterNatives)
711       (JNIEnv *env, jclass clazz);
712 
713     jint (JNICALL *MonitorEnter)
714       (JNIEnv *env, jobject obj);
715     jint (JNICALL *MonitorExit)
716       (JNIEnv *env, jobject obj);
717 
718     jint (JNICALL *GetJavaVM)
719       (JNIEnv *env, JavaVM **vm);
720 
721     void (JNICALL *GetStringRegion)
722       (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
723     void (JNICALL *GetStringUTFRegion)
724       (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
725 
726     void * (JNICALL *GetPrimitiveArrayCritical)
727       (JNIEnv *env, jarray array, jboolean *isCopy);
728     void (JNICALL *ReleasePrimitiveArrayCritical)
729       (JNIEnv *env, jarray array, void *carray, jint mode);
730 
731     const jchar * (JNICALL *GetStringCritical)
732       (JNIEnv *env, jstring string, jboolean *isCopy);
733     void (JNICALL *ReleaseStringCritical)
734       (JNIEnv *env, jstring string, const jchar *cstring);
735 
736     jweak (JNICALL *NewWeakGlobalRef)
737        (JNIEnv *env, jobject obj);
738     void (JNICALL *DeleteWeakGlobalRef)
739        (JNIEnv *env, jweak ref);
740 
741     jboolean (JNICALL *ExceptionCheck)
742        (JNIEnv *env);
743 
744     jobject (JNICALL *NewDirectByteBuffer)
745        (JNIEnv* env, void* address, jlong capacity);
746     void* (JNICALL *GetDirectBufferAddress)
747        (JNIEnv* env, jobject buf);
748     jlong (JNICALL *GetDirectBufferCapacity)
749        (JNIEnv* env, jobject buf);
750 
751     /* New JNI 1.6 Features */
752 
753     jobjectRefType (JNICALL *GetObjectRefType)
754         (JNIEnv* env, jobject obj);
755 
756 	#if TARGET_RT_MAC_CFM && defined(__ppc__)
757 		void* real_functions[228];
758 	#endif /* TARGET_RT_MAC_CFM && defined(__ppc__) */
759 };
760 
761 /*
762  * We use inlined functions for C++ so that programmers can write:
763  *
764  *    env->FindClass("java/lang/String")
765  *
766  * in C++ rather than:
767  *
768  *    (*env)->FindClass(env, "java/lang/String")
769  *
770  * in C.
771  */
772 
773 struct JNIEnv_ {
774     const struct JNINativeInterface_ *functions;
775 #ifdef __cplusplus
776 
GetVersionJNIEnv_777     jint GetVersion() {
778         return functions->GetVersion(this);
779     }
DefineClassJNIEnv_780     jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
781 		       jsize len) {
782         return functions->DefineClass(this, name, loader, buf, len);
783     }
FindClassJNIEnv_784     jclass FindClass(const char *name) {
785         return functions->FindClass(this, name);
786     }
FromReflectedMethodJNIEnv_787     jmethodID FromReflectedMethod(jobject method) {
788         return functions->FromReflectedMethod(this,method);
789     }
FromReflectedFieldJNIEnv_790     jfieldID FromReflectedField(jobject field) {
791         return functions->FromReflectedField(this,field);
792     }
793 
ToReflectedMethodJNIEnv_794     jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {
795         return functions->ToReflectedMethod(this, cls, methodID, isStatic);
796     }
797 
GetSuperclassJNIEnv_798     jclass GetSuperclass(jclass sub) {
799         return functions->GetSuperclass(this, sub);
800     }
IsAssignableFromJNIEnv_801     jboolean IsAssignableFrom(jclass sub, jclass sup) {
802         return functions->IsAssignableFrom(this, sub, sup);
803     }
804 
ToReflectedFieldJNIEnv_805     jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {
806         return functions->ToReflectedField(this,cls,fieldID,isStatic);
807     }
808 
ThrowJNIEnv_809     jint Throw(jthrowable obj) {
810         return functions->Throw(this, obj);
811     }
ThrowNewJNIEnv_812     jint ThrowNew(jclass clazz, const char *msg) {
813         return functions->ThrowNew(this, clazz, msg);
814     }
ExceptionOccurredJNIEnv_815     jthrowable ExceptionOccurred() {
816         return functions->ExceptionOccurred(this);
817     }
ExceptionDescribeJNIEnv_818     void ExceptionDescribe() {
819         functions->ExceptionDescribe(this);
820     }
ExceptionClearJNIEnv_821     void ExceptionClear() {
822         functions->ExceptionClear(this);
823     }
FatalErrorJNIEnv_824     void FatalError(const char *msg) {
825         functions->FatalError(this, msg);
826     }
827 
PushLocalFrameJNIEnv_828     jint PushLocalFrame(jint capacity) {
829         return functions->PushLocalFrame(this,capacity);
830     }
PopLocalFrameJNIEnv_831     jobject PopLocalFrame(jobject result) {
832         return functions->PopLocalFrame(this,result);
833     }
834 
NewGlobalRefJNIEnv_835     jobject NewGlobalRef(jobject lobj) {
836         return functions->NewGlobalRef(this,lobj);
837     }
DeleteGlobalRefJNIEnv_838     void DeleteGlobalRef(jobject gref) {
839         functions->DeleteGlobalRef(this,gref);
840     }
DeleteLocalRefJNIEnv_841     void DeleteLocalRef(jobject obj) {
842         functions->DeleteLocalRef(this, obj);
843     }
844 
IsSameObjectJNIEnv_845     jboolean IsSameObject(jobject obj1, jobject obj2) {
846         return functions->IsSameObject(this,obj1,obj2);
847     }
848 
NewLocalRefJNIEnv_849     jobject NewLocalRef(jobject ref) {
850         return functions->NewLocalRef(this,ref);
851     }
EnsureLocalCapacityJNIEnv_852     jint EnsureLocalCapacity(jint capacity) {
853         return functions->EnsureLocalCapacity(this,capacity);
854     }
855 
AllocObjectJNIEnv_856     jobject AllocObject(jclass clazz) {
857         return functions->AllocObject(this,clazz);
858     }
NewObjectJNIEnv_859     jobject NewObject(jclass clazz, jmethodID methodID, ...) {
860         va_list args;
861 	jobject result;
862 	va_start(args, methodID);
863         result = functions->NewObjectV(this,clazz,methodID,args);
864 	va_end(args);
865 	return result;
866     }
NewObjectVJNIEnv_867     jobject NewObjectV(jclass clazz, jmethodID methodID,
868 		       va_list args) {
869         return functions->NewObjectV(this,clazz,methodID,args);
870     }
NewObjectAJNIEnv_871     jobject NewObjectA(jclass clazz, jmethodID methodID,
872 		       const jvalue *args) {
873         return functions->NewObjectA(this,clazz,methodID,args);
874     }
875 
GetObjectClassJNIEnv_876     jclass GetObjectClass(jobject obj) {
877         return functions->GetObjectClass(this,obj);
878     }
IsInstanceOfJNIEnv_879     jboolean IsInstanceOf(jobject obj, jclass clazz) {
880         return functions->IsInstanceOf(this,obj,clazz);
881     }
882 
GetMethodIDJNIEnv_883     jmethodID GetMethodID(jclass clazz, const char *name,
884 			  const char *sig) {
885         return functions->GetMethodID(this,clazz,name,sig);
886     }
887 
CallObjectMethodJNIEnv_888     jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
889         va_list args;
890 	jobject result;
891 	va_start(args,methodID);
892 	result = functions->CallObjectMethodV(this,obj,methodID,args);
893 	va_end(args);
894 	return result;
895     }
CallObjectMethodVJNIEnv_896     jobject CallObjectMethodV(jobject obj, jmethodID methodID,
897 			va_list args) {
898         return functions->CallObjectMethodV(this,obj,methodID,args);
899     }
CallObjectMethodAJNIEnv_900     jobject CallObjectMethodA(jobject obj, jmethodID methodID,
901 			const jvalue * args) {
902         return functions->CallObjectMethodA(this,obj,methodID,args);
903     }
904 
CallBooleanMethodJNIEnv_905     jboolean CallBooleanMethod(jobject obj,
906 			       jmethodID methodID, ...) {
907         va_list args;
908 	jboolean result;
909 	va_start(args,methodID);
910 	result = functions->CallBooleanMethodV(this,obj,methodID,args);
911 	va_end(args);
912 	return result;
913     }
CallBooleanMethodVJNIEnv_914     jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
915 				va_list args) {
916         return functions->CallBooleanMethodV(this,obj,methodID,args);
917     }
CallBooleanMethodAJNIEnv_918     jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
919 				const jvalue * args) {
920         return functions->CallBooleanMethodA(this,obj,methodID, args);
921     }
922 
CallByteMethodJNIEnv_923     jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
924         va_list args;
925 	jbyte result;
926 	va_start(args,methodID);
927 	result = functions->CallByteMethodV(this,obj,methodID,args);
928 	va_end(args);
929 	return result;
930     }
CallByteMethodVJNIEnv_931     jbyte CallByteMethodV(jobject obj, jmethodID methodID,
932 			  va_list args) {
933         return functions->CallByteMethodV(this,obj,methodID,args);
934     }
CallByteMethodAJNIEnv_935     jbyte CallByteMethodA(jobject obj, jmethodID methodID,
936 			  const jvalue * args) {
937         return functions->CallByteMethodA(this,obj,methodID,args);
938     }
939 
CallCharMethodJNIEnv_940     jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
941         va_list args;
942 	jchar result;
943 	va_start(args,methodID);
944 	result = functions->CallCharMethodV(this,obj,methodID,args);
945 	va_end(args);
946 	return result;
947     }
CallCharMethodVJNIEnv_948     jchar CallCharMethodV(jobject obj, jmethodID methodID,
949 			  va_list args) {
950         return functions->CallCharMethodV(this,obj,methodID,args);
951     }
CallCharMethodAJNIEnv_952     jchar CallCharMethodA(jobject obj, jmethodID methodID,
953 			  const jvalue * args) {
954         return functions->CallCharMethodA(this,obj,methodID,args);
955     }
956 
CallShortMethodJNIEnv_957     jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
958         va_list args;
959 	jshort result;
960 	va_start(args,methodID);
961 	result = functions->CallShortMethodV(this,obj,methodID,args);
962 	va_end(args);
963 	return result;
964     }
CallShortMethodVJNIEnv_965     jshort CallShortMethodV(jobject obj, jmethodID methodID,
966 			    va_list args) {
967         return functions->CallShortMethodV(this,obj,methodID,args);
968     }
CallShortMethodAJNIEnv_969     jshort CallShortMethodA(jobject obj, jmethodID methodID,
970 			    const jvalue * args) {
971         return functions->CallShortMethodA(this,obj,methodID,args);
972     }
973 
CallIntMethodJNIEnv_974     jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
975         va_list args;
976 	jint result;
977 	va_start(args,methodID);
978 	result = functions->CallIntMethodV(this,obj,methodID,args);
979 	va_end(args);
980 	return result;
981     }
CallIntMethodVJNIEnv_982     jint CallIntMethodV(jobject obj, jmethodID methodID,
983 			va_list args) {
984         return functions->CallIntMethodV(this,obj,methodID,args);
985     }
CallIntMethodAJNIEnv_986     jint CallIntMethodA(jobject obj, jmethodID methodID,
987 			const jvalue * args) {
988         return functions->CallIntMethodA(this,obj,methodID,args);
989     }
990 
CallLongMethodJNIEnv_991     jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
992         va_list args;
993 	jlong result;
994 	va_start(args,methodID);
995 	result = functions->CallLongMethodV(this,obj,methodID,args);
996 	va_end(args);
997 	return result;
998     }
CallLongMethodVJNIEnv_999     jlong CallLongMethodV(jobject obj, jmethodID methodID,
1000 			  va_list args) {
1001         return functions->CallLongMethodV(this,obj,methodID,args);
1002     }
CallLongMethodAJNIEnv_1003     jlong CallLongMethodA(jobject obj, jmethodID methodID,
1004 			  const jvalue * args) {
1005         return functions->CallLongMethodA(this,obj,methodID,args);
1006     }
1007 
CallFloatMethodJNIEnv_1008     jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
1009         va_list args;
1010 	jfloat result;
1011 	va_start(args,methodID);
1012 	result = functions->CallFloatMethodV(this,obj,methodID,args);
1013 	va_end(args);
1014 	return result;
1015     }
CallFloatMethodVJNIEnv_1016     jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
1017 			    va_list args) {
1018         return functions->CallFloatMethodV(this,obj,methodID,args);
1019     }
CallFloatMethodAJNIEnv_1020     jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
1021 			    const jvalue * args) {
1022         return functions->CallFloatMethodA(this,obj,methodID,args);
1023     }
1024 
CallDoubleMethodJNIEnv_1025     jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
1026         va_list args;
1027 	jdouble result;
1028 	va_start(args,methodID);
1029 	result = functions->CallDoubleMethodV(this,obj,methodID,args);
1030 	va_end(args);
1031 	return result;
1032     }
CallDoubleMethodVJNIEnv_1033     jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
1034 			va_list args) {
1035         return functions->CallDoubleMethodV(this,obj,methodID,args);
1036     }
CallDoubleMethodAJNIEnv_1037     jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
1038 			const jvalue * args) {
1039         return functions->CallDoubleMethodA(this,obj,methodID,args);
1040     }
1041 
CallVoidMethodJNIEnv_1042     void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
1043         va_list args;
1044 	va_start(args,methodID);
1045 	functions->CallVoidMethodV(this,obj,methodID,args);
1046 	va_end(args);
1047     }
CallVoidMethodVJNIEnv_1048     void CallVoidMethodV(jobject obj, jmethodID methodID,
1049 			 va_list args) {
1050         functions->CallVoidMethodV(this,obj,methodID,args);
1051     }
CallVoidMethodAJNIEnv_1052     void CallVoidMethodA(jobject obj, jmethodID methodID,
1053 			 const jvalue * args) {
1054         functions->CallVoidMethodA(this,obj,methodID,args);
1055     }
1056 
CallNonvirtualObjectMethodJNIEnv_1057     jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
1058 				       jmethodID methodID, ...) {
1059         va_list args;
1060 	jobject result;
1061 	va_start(args,methodID);
1062 	result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
1063 							methodID,args);
1064 	va_end(args);
1065 	return result;
1066     }
CallNonvirtualObjectMethodVJNIEnv_1067     jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
1068 					jmethodID methodID, va_list args) {
1069         return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
1070 						      methodID,args);
1071     }
CallNonvirtualObjectMethodAJNIEnv_1072     jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
1073 					jmethodID methodID, const jvalue * args) {
1074         return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
1075 						      methodID,args);
1076     }
1077 
CallNonvirtualBooleanMethodJNIEnv_1078     jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
1079 					 jmethodID methodID, ...) {
1080         va_list args;
1081 	jboolean result;
1082 	va_start(args,methodID);
1083 	result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1084 							 methodID,args);
1085 	va_end(args);
1086 	return result;
1087     }
CallNonvirtualBooleanMethodVJNIEnv_1088     jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
1089 					  jmethodID methodID, va_list args) {
1090         return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
1091 						       methodID,args);
1092     }
CallNonvirtualBooleanMethodAJNIEnv_1093     jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
1094 					  jmethodID methodID, const jvalue * args) {
1095         return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
1096 						       methodID, args);
1097     }
1098 
CallNonvirtualByteMethodJNIEnv_1099     jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
1100 				   jmethodID methodID, ...) {
1101         va_list args;
1102 	jbyte result;
1103 	va_start(args,methodID);
1104 	result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
1105 						      methodID,args);
1106 	va_end(args);
1107 	return result;
1108     }
CallNonvirtualByteMethodVJNIEnv_1109     jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
1110 				    jmethodID methodID, va_list args) {
1111         return functions->CallNonvirtualByteMethodV(this,obj,clazz,
1112 						    methodID,args);
1113     }
CallNonvirtualByteMethodAJNIEnv_1114     jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
1115 				    jmethodID methodID, const jvalue * args) {
1116         return functions->CallNonvirtualByteMethodA(this,obj,clazz,
1117 						    methodID,args);
1118     }
1119 
CallNonvirtualCharMethodJNIEnv_1120     jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
1121 				   jmethodID methodID, ...) {
1122         va_list args;
1123 	jchar result;
1124 	va_start(args,methodID);
1125 	result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
1126 						      methodID,args);
1127 	va_end(args);
1128 	return result;
1129     }
CallNonvirtualCharMethodVJNIEnv_1130     jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
1131 				    jmethodID methodID, va_list args) {
1132         return functions->CallNonvirtualCharMethodV(this,obj,clazz,
1133 						    methodID,args);
1134     }
CallNonvirtualCharMethodAJNIEnv_1135     jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
1136 				    jmethodID methodID, const jvalue * args) {
1137         return functions->CallNonvirtualCharMethodA(this,obj,clazz,
1138 						    methodID,args);
1139     }
1140 
CallNonvirtualShortMethodJNIEnv_1141     jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
1142 				     jmethodID methodID, ...) {
1143         va_list args;
1144 	jshort result;
1145 	va_start(args,methodID);
1146 	result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
1147 						       methodID,args);
1148 	va_end(args);
1149 	return result;
1150     }
CallNonvirtualShortMethodVJNIEnv_1151     jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
1152 				      jmethodID methodID, va_list args) {
1153         return functions->CallNonvirtualShortMethodV(this,obj,clazz,
1154 						     methodID,args);
1155     }
CallNonvirtualShortMethodAJNIEnv_1156     jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
1157 				      jmethodID methodID, const jvalue * args) {
1158         return functions->CallNonvirtualShortMethodA(this,obj,clazz,
1159 						     methodID,args);
1160     }
1161 
CallNonvirtualIntMethodJNIEnv_1162     jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
1163 				 jmethodID methodID, ...) {
1164         va_list args;
1165 	jint result;
1166 	va_start(args,methodID);
1167 	result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
1168 						     methodID,args);
1169 	va_end(args);
1170 	return result;
1171     }
CallNonvirtualIntMethodVJNIEnv_1172     jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
1173 				  jmethodID methodID, va_list args) {
1174         return functions->CallNonvirtualIntMethodV(this,obj,clazz,
1175 						   methodID,args);
1176     }
CallNonvirtualIntMethodAJNIEnv_1177     jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
1178 				  jmethodID methodID, const jvalue * args) {
1179         return functions->CallNonvirtualIntMethodA(this,obj,clazz,
1180 						   methodID,args);
1181     }
1182 
CallNonvirtualLongMethodJNIEnv_1183     jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
1184 				   jmethodID methodID, ...) {
1185         va_list args;
1186 	jlong result;
1187 	va_start(args,methodID);
1188 	result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
1189 						      methodID,args);
1190 	va_end(args);
1191 	return result;
1192     }
CallNonvirtualLongMethodVJNIEnv_1193     jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
1194 				    jmethodID methodID, va_list args) {
1195         return functions->CallNonvirtualLongMethodV(this,obj,clazz,
1196 						    methodID,args);
1197     }
CallNonvirtualLongMethodAJNIEnv_1198     jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
1199 				    jmethodID methodID, const jvalue * args) {
1200         return functions->CallNonvirtualLongMethodA(this,obj,clazz,
1201 						    methodID,args);
1202     }
1203 
CallNonvirtualFloatMethodJNIEnv_1204     jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
1205 				     jmethodID methodID, ...) {
1206         va_list args;
1207 	jfloat result;
1208 	va_start(args,methodID);
1209 	result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1210 						       methodID,args);
1211 	va_end(args);
1212 	return result;
1213     }
CallNonvirtualFloatMethodVJNIEnv_1214     jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
1215 				      jmethodID methodID,
1216 				      va_list args) {
1217         return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
1218 						     methodID,args);
1219     }
CallNonvirtualFloatMethodAJNIEnv_1220     jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
1221 				      jmethodID methodID,
1222 				      const jvalue * args) {
1223         return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
1224 						     methodID,args);
1225     }
1226 
CallNonvirtualDoubleMethodJNIEnv_1227     jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
1228 				       jmethodID methodID, ...) {
1229         va_list args;
1230 	jdouble result;
1231 	va_start(args,methodID);
1232 	result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1233 							methodID,args);
1234 	va_end(args);
1235 	return result;
1236     }
CallNonvirtualDoubleMethodVJNIEnv_1237     jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
1238 					jmethodID methodID,
1239 					va_list args) {
1240         return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
1241 						      methodID,args);
1242     }
CallNonvirtualDoubleMethodAJNIEnv_1243     jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
1244 					jmethodID methodID,
1245 					const jvalue * args) {
1246         return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
1247 						      methodID,args);
1248     }
1249 
CallNonvirtualVoidMethodJNIEnv_1250     void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
1251 				  jmethodID methodID, ...) {
1252         va_list args;
1253 	va_start(args,methodID);
1254 	functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1255 	va_end(args);
1256     }
CallNonvirtualVoidMethodVJNIEnv_1257     void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
1258 				   jmethodID methodID,
1259 				   va_list args) {
1260         functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
1261     }
CallNonvirtualVoidMethodAJNIEnv_1262     void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
1263 				   jmethodID methodID,
1264 				   const jvalue * args) {
1265         functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
1266     }
1267 
GetFieldIDJNIEnv_1268     jfieldID GetFieldID(jclass clazz, const char *name,
1269 			const char *sig) {
1270         return functions->GetFieldID(this,clazz,name,sig);
1271     }
1272 
GetObjectFieldJNIEnv_1273     jobject GetObjectField(jobject obj, jfieldID fieldID) {
1274         return functions->GetObjectField(this,obj,fieldID);
1275     }
GetBooleanFieldJNIEnv_1276     jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
1277         return functions->GetBooleanField(this,obj,fieldID);
1278     }
GetByteFieldJNIEnv_1279     jbyte GetByteField(jobject obj, jfieldID fieldID) {
1280         return functions->GetByteField(this,obj,fieldID);
1281     }
GetCharFieldJNIEnv_1282     jchar GetCharField(jobject obj, jfieldID fieldID) {
1283         return functions->GetCharField(this,obj,fieldID);
1284     }
GetShortFieldJNIEnv_1285     jshort GetShortField(jobject obj, jfieldID fieldID) {
1286         return functions->GetShortField(this,obj,fieldID);
1287     }
GetIntFieldJNIEnv_1288     jint GetIntField(jobject obj, jfieldID fieldID) {
1289         return functions->GetIntField(this,obj,fieldID);
1290     }
GetLongFieldJNIEnv_1291     jlong GetLongField(jobject obj, jfieldID fieldID) {
1292         return functions->GetLongField(this,obj,fieldID);
1293     }
GetFloatFieldJNIEnv_1294     jfloat GetFloatField(jobject obj, jfieldID fieldID) {
1295         return functions->GetFloatField(this,obj,fieldID);
1296     }
GetDoubleFieldJNIEnv_1297     jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
1298         return functions->GetDoubleField(this,obj,fieldID);
1299     }
1300 
SetObjectFieldJNIEnv_1301     void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
1302         functions->SetObjectField(this,obj,fieldID,val);
1303     }
SetBooleanFieldJNIEnv_1304     void SetBooleanField(jobject obj, jfieldID fieldID,
1305 			 jboolean val) {
1306         functions->SetBooleanField(this,obj,fieldID,val);
1307     }
SetByteFieldJNIEnv_1308     void SetByteField(jobject obj, jfieldID fieldID,
1309 		      jbyte val) {
1310         functions->SetByteField(this,obj,fieldID,val);
1311     }
SetCharFieldJNIEnv_1312     void SetCharField(jobject obj, jfieldID fieldID,
1313 		      jchar val) {
1314         functions->SetCharField(this,obj,fieldID,val);
1315     }
SetShortFieldJNIEnv_1316     void SetShortField(jobject obj, jfieldID fieldID,
1317 		       jshort val) {
1318         functions->SetShortField(this,obj,fieldID,val);
1319     }
SetIntFieldJNIEnv_1320     void SetIntField(jobject obj, jfieldID fieldID,
1321 		     jint val) {
1322         functions->SetIntField(this,obj,fieldID,val);
1323     }
SetLongFieldJNIEnv_1324     void SetLongField(jobject obj, jfieldID fieldID,
1325 		      jlong val) {
1326         functions->SetLongField(this,obj,fieldID,val);
1327     }
SetFloatFieldJNIEnv_1328     void SetFloatField(jobject obj, jfieldID fieldID,
1329 		       jfloat val) {
1330         functions->SetFloatField(this,obj,fieldID,val);
1331     }
SetDoubleFieldJNIEnv_1332     void SetDoubleField(jobject obj, jfieldID fieldID,
1333 			jdouble val) {
1334         functions->SetDoubleField(this,obj,fieldID,val);
1335     }
1336 
GetStaticMethodIDJNIEnv_1337     jmethodID GetStaticMethodID(jclass clazz, const char *name,
1338 				const char *sig) {
1339         return functions->GetStaticMethodID(this,clazz,name,sig);
1340     }
1341 
CallStaticObjectMethodJNIEnv_1342     jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
1343 			     ...) {
1344         va_list args;
1345 	jobject result;
1346 	va_start(args,methodID);
1347 	result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1348 	va_end(args);
1349 	return result;
1350     }
CallStaticObjectMethodVJNIEnv_1351     jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
1352 			      va_list args) {
1353         return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
1354     }
CallStaticObjectMethodAJNIEnv_1355     jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
1356 			      const jvalue *args) {
1357         return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
1358     }
1359 
CallStaticBooleanMethodJNIEnv_1360     jboolean CallStaticBooleanMethod(jclass clazz,
1361 				     jmethodID methodID, ...) {
1362         va_list args;
1363 	jboolean result;
1364 	va_start(args,methodID);
1365 	result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1366 	va_end(args);
1367 	return result;
1368     }
CallStaticBooleanMethodVJNIEnv_1369     jboolean CallStaticBooleanMethodV(jclass clazz,
1370 				      jmethodID methodID, va_list args) {
1371         return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
1372     }
CallStaticBooleanMethodAJNIEnv_1373     jboolean CallStaticBooleanMethodA(jclass clazz,
1374 				      jmethodID methodID, const jvalue *args) {
1375         return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
1376     }
1377 
CallStaticByteMethodJNIEnv_1378     jbyte CallStaticByteMethod(jclass clazz,
1379 			       jmethodID methodID, ...) {
1380         va_list args;
1381 	jbyte result;
1382 	va_start(args,methodID);
1383 	result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
1384 	va_end(args);
1385 	return result;
1386     }
CallStaticByteMethodVJNIEnv_1387     jbyte CallStaticByteMethodV(jclass clazz,
1388 				jmethodID methodID, va_list args) {
1389         return functions->CallStaticByteMethodV(this,clazz,methodID,args);
1390     }
CallStaticByteMethodAJNIEnv_1391     jbyte CallStaticByteMethodA(jclass clazz,
1392 				jmethodID methodID, const jvalue *args) {
1393         return functions->CallStaticByteMethodA(this,clazz,methodID,args);
1394     }
1395 
CallStaticCharMethodJNIEnv_1396     jchar CallStaticCharMethod(jclass clazz,
1397 			       jmethodID methodID, ...) {
1398         va_list args;
1399 	jchar result;
1400 	va_start(args,methodID);
1401 	result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
1402 	va_end(args);
1403 	return result;
1404     }
CallStaticCharMethodVJNIEnv_1405     jchar CallStaticCharMethodV(jclass clazz,
1406 				jmethodID methodID, va_list args) {
1407         return functions->CallStaticCharMethodV(this,clazz,methodID,args);
1408     }
CallStaticCharMethodAJNIEnv_1409     jchar CallStaticCharMethodA(jclass clazz,
1410 				jmethodID methodID, const jvalue *args) {
1411         return functions->CallStaticCharMethodA(this,clazz,methodID,args);
1412     }
1413 
CallStaticShortMethodJNIEnv_1414     jshort CallStaticShortMethod(jclass clazz,
1415 				 jmethodID methodID, ...) {
1416         va_list args;
1417 	jshort result;
1418 	va_start(args,methodID);
1419 	result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
1420 	va_end(args);
1421 	return result;
1422     }
CallStaticShortMethodVJNIEnv_1423     jshort CallStaticShortMethodV(jclass clazz,
1424 				  jmethodID methodID, va_list args) {
1425         return functions->CallStaticShortMethodV(this,clazz,methodID,args);
1426     }
CallStaticShortMethodAJNIEnv_1427     jshort CallStaticShortMethodA(jclass clazz,
1428 				  jmethodID methodID, const jvalue *args) {
1429         return functions->CallStaticShortMethodA(this,clazz,methodID,args);
1430     }
1431 
CallStaticIntMethodJNIEnv_1432     jint CallStaticIntMethod(jclass clazz,
1433 			     jmethodID methodID, ...) {
1434         va_list args;
1435 	jint result;
1436 	va_start(args,methodID);
1437 	result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
1438 	va_end(args);
1439 	return result;
1440     }
CallStaticIntMethodVJNIEnv_1441     jint CallStaticIntMethodV(jclass clazz,
1442 			      jmethodID methodID, va_list args) {
1443         return functions->CallStaticIntMethodV(this,clazz,methodID,args);
1444     }
CallStaticIntMethodAJNIEnv_1445     jint CallStaticIntMethodA(jclass clazz,
1446 			      jmethodID methodID, const jvalue *args) {
1447         return functions->CallStaticIntMethodA(this,clazz,methodID,args);
1448     }
1449 
CallStaticLongMethodJNIEnv_1450     jlong CallStaticLongMethod(jclass clazz,
1451 			       jmethodID methodID, ...) {
1452         va_list args;
1453 	jlong result;
1454 	va_start(args,methodID);
1455 	result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
1456 	va_end(args);
1457 	return result;
1458     }
CallStaticLongMethodVJNIEnv_1459     jlong CallStaticLongMethodV(jclass clazz,
1460 				jmethodID methodID, va_list args) {
1461         return functions->CallStaticLongMethodV(this,clazz,methodID,args);
1462     }
CallStaticLongMethodAJNIEnv_1463     jlong CallStaticLongMethodA(jclass clazz,
1464 				jmethodID methodID, const jvalue *args) {
1465         return functions->CallStaticLongMethodA(this,clazz,methodID,args);
1466     }
1467 
CallStaticFloatMethodJNIEnv_1468     jfloat CallStaticFloatMethod(jclass clazz,
1469 				 jmethodID methodID, ...) {
1470         va_list args;
1471 	jfloat result;
1472 	va_start(args,methodID);
1473 	result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1474 	va_end(args);
1475 	return result;
1476     }
CallStaticFloatMethodVJNIEnv_1477     jfloat CallStaticFloatMethodV(jclass clazz,
1478 				  jmethodID methodID, va_list args) {
1479         return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
1480     }
CallStaticFloatMethodAJNIEnv_1481     jfloat CallStaticFloatMethodA(jclass clazz,
1482 				  jmethodID methodID, const jvalue *args) {
1483         return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
1484     }
1485 
CallStaticDoubleMethodJNIEnv_1486     jdouble CallStaticDoubleMethod(jclass clazz,
1487 				   jmethodID methodID, ...) {
1488         va_list args;
1489 	jdouble result;
1490 	va_start(args,methodID);
1491 	result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1492 	va_end(args);
1493 	return result;
1494     }
CallStaticDoubleMethodVJNIEnv_1495     jdouble CallStaticDoubleMethodV(jclass clazz,
1496 				    jmethodID methodID, va_list args) {
1497         return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
1498     }
CallStaticDoubleMethodAJNIEnv_1499     jdouble CallStaticDoubleMethodA(jclass clazz,
1500 				    jmethodID methodID, const jvalue *args) {
1501         return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
1502     }
1503 
CallStaticVoidMethodJNIEnv_1504     void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
1505         va_list args;
1506 	va_start(args,methodID);
1507 	functions->CallStaticVoidMethodV(this,cls,methodID,args);
1508 	va_end(args);
1509     }
CallStaticVoidMethodVJNIEnv_1510     void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
1511 			       va_list args) {
1512         functions->CallStaticVoidMethodV(this,cls,methodID,args);
1513     }
CallStaticVoidMethodAJNIEnv_1514     void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
1515 			       const jvalue * args) {
1516         functions->CallStaticVoidMethodA(this,cls,methodID,args);
1517     }
1518 
GetStaticFieldIDJNIEnv_1519     jfieldID GetStaticFieldID(jclass clazz, const char *name,
1520 			      const char *sig) {
1521         return functions->GetStaticFieldID(this,clazz,name,sig);
1522     }
GetStaticObjectFieldJNIEnv_1523     jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
1524         return functions->GetStaticObjectField(this,clazz,fieldID);
1525     }
GetStaticBooleanFieldJNIEnv_1526     jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
1527         return functions->GetStaticBooleanField(this,clazz,fieldID);
1528     }
GetStaticByteFieldJNIEnv_1529     jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
1530         return functions->GetStaticByteField(this,clazz,fieldID);
1531     }
GetStaticCharFieldJNIEnv_1532     jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
1533         return functions->GetStaticCharField(this,clazz,fieldID);
1534     }
GetStaticShortFieldJNIEnv_1535     jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
1536         return functions->GetStaticShortField(this,clazz,fieldID);
1537     }
GetStaticIntFieldJNIEnv_1538     jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
1539         return functions->GetStaticIntField(this,clazz,fieldID);
1540     }
GetStaticLongFieldJNIEnv_1541     jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
1542         return functions->GetStaticLongField(this,clazz,fieldID);
1543     }
GetStaticFloatFieldJNIEnv_1544     jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
1545         return functions->GetStaticFloatField(this,clazz,fieldID);
1546     }
GetStaticDoubleFieldJNIEnv_1547     jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
1548         return functions->GetStaticDoubleField(this,clazz,fieldID);
1549     }
1550 
SetStaticObjectFieldJNIEnv_1551     void SetStaticObjectField(jclass clazz, jfieldID fieldID,
1552 			jobject value) {
1553       functions->SetStaticObjectField(this,clazz,fieldID,value);
1554     }
SetStaticBooleanFieldJNIEnv_1555     void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
1556 			jboolean value) {
1557       functions->SetStaticBooleanField(this,clazz,fieldID,value);
1558     }
SetStaticByteFieldJNIEnv_1559     void SetStaticByteField(jclass clazz, jfieldID fieldID,
1560 			jbyte value) {
1561       functions->SetStaticByteField(this,clazz,fieldID,value);
1562     }
SetStaticCharFieldJNIEnv_1563     void SetStaticCharField(jclass clazz, jfieldID fieldID,
1564 			jchar value) {
1565       functions->SetStaticCharField(this,clazz,fieldID,value);
1566     }
SetStaticShortFieldJNIEnv_1567     void SetStaticShortField(jclass clazz, jfieldID fieldID,
1568 			jshort value) {
1569       functions->SetStaticShortField(this,clazz,fieldID,value);
1570     }
SetStaticIntFieldJNIEnv_1571     void SetStaticIntField(jclass clazz, jfieldID fieldID,
1572 			jint value) {
1573       functions->SetStaticIntField(this,clazz,fieldID,value);
1574     }
SetStaticLongFieldJNIEnv_1575     void SetStaticLongField(jclass clazz, jfieldID fieldID,
1576 			jlong value) {
1577       functions->SetStaticLongField(this,clazz,fieldID,value);
1578     }
SetStaticFloatFieldJNIEnv_1579     void SetStaticFloatField(jclass clazz, jfieldID fieldID,
1580 			jfloat value) {
1581       functions->SetStaticFloatField(this,clazz,fieldID,value);
1582     }
SetStaticDoubleFieldJNIEnv_1583     void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
1584 			jdouble value) {
1585       functions->SetStaticDoubleField(this,clazz,fieldID,value);
1586     }
1587 
NewStringJNIEnv_1588     jstring NewString(const jchar *unicode, jsize len) {
1589         return functions->NewString(this,unicode,len);
1590     }
GetStringLengthJNIEnv_1591     jsize GetStringLength(jstring str) {
1592         return functions->GetStringLength(this,str);
1593     }
GetStringCharsJNIEnv_1594     const jchar *GetStringChars(jstring str, jboolean *isCopy) {
1595         return functions->GetStringChars(this,str,isCopy);
1596     }
ReleaseStringCharsJNIEnv_1597     void ReleaseStringChars(jstring str, const jchar *chars) {
1598         functions->ReleaseStringChars(this,str,chars);
1599     }
1600 
NewStringUTFJNIEnv_1601     jstring NewStringUTF(const char *utf) {
1602         return functions->NewStringUTF(this,utf);
1603     }
GetStringUTFLengthJNIEnv_1604     jsize GetStringUTFLength(jstring str) {
1605         return functions->GetStringUTFLength(this,str);
1606     }
GetStringUTFCharsJNIEnv_1607     const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
1608         return functions->GetStringUTFChars(this,str,isCopy);
1609     }
ReleaseStringUTFCharsJNIEnv_1610     void ReleaseStringUTFChars(jstring str, const char* chars) {
1611         functions->ReleaseStringUTFChars(this,str,chars);
1612     }
1613 
GetArrayLengthJNIEnv_1614     jsize GetArrayLength(jarray array) {
1615         return functions->GetArrayLength(this,array);
1616     }
1617 
NewObjectArrayJNIEnv_1618     jobjectArray NewObjectArray(jsize len, jclass clazz,
1619 				jobject init) {
1620         return functions->NewObjectArray(this,len,clazz,init);
1621     }
GetObjectArrayElementJNIEnv_1622     jobject GetObjectArrayElement(jobjectArray array, jsize index) {
1623         return functions->GetObjectArrayElement(this,array,index);
1624     }
SetObjectArrayElementJNIEnv_1625     void SetObjectArrayElement(jobjectArray array, jsize index,
1626 			       jobject val) {
1627         functions->SetObjectArrayElement(this,array,index,val);
1628     }
1629 
NewBooleanArrayJNIEnv_1630     jbooleanArray NewBooleanArray(jsize len) {
1631         return functions->NewBooleanArray(this,len);
1632     }
NewByteArrayJNIEnv_1633     jbyteArray NewByteArray(jsize len) {
1634         return functions->NewByteArray(this,len);
1635     }
NewCharArrayJNIEnv_1636     jcharArray NewCharArray(jsize len) {
1637         return functions->NewCharArray(this,len);
1638     }
NewShortArrayJNIEnv_1639     jshortArray NewShortArray(jsize len) {
1640         return functions->NewShortArray(this,len);
1641     }
NewIntArrayJNIEnv_1642     jintArray NewIntArray(jsize len) {
1643         return functions->NewIntArray(this,len);
1644     }
NewLongArrayJNIEnv_1645     jlongArray NewLongArray(jsize len) {
1646         return functions->NewLongArray(this,len);
1647     }
NewFloatArrayJNIEnv_1648     jfloatArray NewFloatArray(jsize len) {
1649         return functions->NewFloatArray(this,len);
1650     }
NewDoubleArrayJNIEnv_1651     jdoubleArray NewDoubleArray(jsize len) {
1652         return functions->NewDoubleArray(this,len);
1653     }
1654 
GetBooleanArrayElementsJNIEnv_1655     jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
1656         return functions->GetBooleanArrayElements(this,array,isCopy);
1657     }
GetByteArrayElementsJNIEnv_1658     jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
1659         return functions->GetByteArrayElements(this,array,isCopy);
1660     }
GetCharArrayElementsJNIEnv_1661     jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
1662         return functions->GetCharArrayElements(this,array,isCopy);
1663     }
GetShortArrayElementsJNIEnv_1664     jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
1665         return functions->GetShortArrayElements(this,array,isCopy);
1666     }
GetIntArrayElementsJNIEnv_1667     jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
1668         return functions->GetIntArrayElements(this,array,isCopy);
1669     }
GetLongArrayElementsJNIEnv_1670     jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
1671         return functions->GetLongArrayElements(this,array,isCopy);
1672     }
GetFloatArrayElementsJNIEnv_1673     jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
1674         return functions->GetFloatArrayElements(this,array,isCopy);
1675     }
GetDoubleArrayElementsJNIEnv_1676     jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
1677         return functions->GetDoubleArrayElements(this,array,isCopy);
1678     }
1679 
ReleaseBooleanArrayElementsJNIEnv_1680     void ReleaseBooleanArrayElements(jbooleanArray array,
1681 				     jboolean *elems,
1682 				     jint mode) {
1683         functions->ReleaseBooleanArrayElements(this,array,elems,mode);
1684     }
ReleaseByteArrayElementsJNIEnv_1685     void ReleaseByteArrayElements(jbyteArray array,
1686 				  jbyte *elems,
1687 				  jint mode) {
1688         functions->ReleaseByteArrayElements(this,array,elems,mode);
1689     }
ReleaseCharArrayElementsJNIEnv_1690     void ReleaseCharArrayElements(jcharArray array,
1691 				  jchar *elems,
1692 				  jint mode) {
1693         functions->ReleaseCharArrayElements(this,array,elems,mode);
1694     }
ReleaseShortArrayElementsJNIEnv_1695     void ReleaseShortArrayElements(jshortArray array,
1696 				   jshort *elems,
1697 				   jint mode) {
1698         functions->ReleaseShortArrayElements(this,array,elems,mode);
1699     }
ReleaseIntArrayElementsJNIEnv_1700     void ReleaseIntArrayElements(jintArray array,
1701 				 jint *elems,
1702 				 jint mode) {
1703         functions->ReleaseIntArrayElements(this,array,elems,mode);
1704     }
ReleaseLongArrayElementsJNIEnv_1705     void ReleaseLongArrayElements(jlongArray array,
1706 				  jlong *elems,
1707 				  jint mode) {
1708         functions->ReleaseLongArrayElements(this,array,elems,mode);
1709     }
ReleaseFloatArrayElementsJNIEnv_1710     void ReleaseFloatArrayElements(jfloatArray array,
1711 				   jfloat *elems,
1712 				   jint mode) {
1713         functions->ReleaseFloatArrayElements(this,array,elems,mode);
1714     }
ReleaseDoubleArrayElementsJNIEnv_1715     void ReleaseDoubleArrayElements(jdoubleArray array,
1716 				    jdouble *elems,
1717 				    jint mode) {
1718         functions->ReleaseDoubleArrayElements(this,array,elems,mode);
1719     }
1720 
GetBooleanArrayRegionJNIEnv_1721     void GetBooleanArrayRegion(jbooleanArray array,
1722 			       jsize start, jsize len, jboolean *buf) {
1723         functions->GetBooleanArrayRegion(this,array,start,len,buf);
1724     }
GetByteArrayRegionJNIEnv_1725     void GetByteArrayRegion(jbyteArray array,
1726 			    jsize start, jsize len, jbyte *buf) {
1727         functions->GetByteArrayRegion(this,array,start,len,buf);
1728     }
GetCharArrayRegionJNIEnv_1729     void GetCharArrayRegion(jcharArray array,
1730 			    jsize start, jsize len, jchar *buf) {
1731         functions->GetCharArrayRegion(this,array,start,len,buf);
1732     }
GetShortArrayRegionJNIEnv_1733     void GetShortArrayRegion(jshortArray array,
1734 			     jsize start, jsize len, jshort *buf) {
1735         functions->GetShortArrayRegion(this,array,start,len,buf);
1736     }
GetIntArrayRegionJNIEnv_1737     void GetIntArrayRegion(jintArray array,
1738 			   jsize start, jsize len, jint *buf) {
1739         functions->GetIntArrayRegion(this,array,start,len,buf);
1740     }
GetLongArrayRegionJNIEnv_1741     void GetLongArrayRegion(jlongArray array,
1742 			    jsize start, jsize len, jlong *buf) {
1743         functions->GetLongArrayRegion(this,array,start,len,buf);
1744     }
GetFloatArrayRegionJNIEnv_1745     void GetFloatArrayRegion(jfloatArray array,
1746 			     jsize start, jsize len, jfloat *buf) {
1747         functions->GetFloatArrayRegion(this,array,start,len,buf);
1748     }
GetDoubleArrayRegionJNIEnv_1749     void GetDoubleArrayRegion(jdoubleArray array,
1750 			      jsize start, jsize len, jdouble *buf) {
1751         functions->GetDoubleArrayRegion(this,array,start,len,buf);
1752     }
1753 
SetBooleanArrayRegionJNIEnv_1754     void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
1755 			       const jboolean *buf) {
1756         functions->SetBooleanArrayRegion(this,array,start,len,buf);
1757     }
SetByteArrayRegionJNIEnv_1758     void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
1759 			    const jbyte *buf) {
1760         functions->SetByteArrayRegion(this,array,start,len,buf);
1761     }
SetCharArrayRegionJNIEnv_1762     void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
1763 			    const jchar *buf) {
1764         functions->SetCharArrayRegion(this,array,start,len,buf);
1765     }
SetShortArrayRegionJNIEnv_1766     void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
1767 			     const jshort *buf) {
1768         functions->SetShortArrayRegion(this,array,start,len,buf);
1769     }
SetIntArrayRegionJNIEnv_1770     void SetIntArrayRegion(jintArray array, jsize start, jsize len,
1771 			   const jint *buf) {
1772         functions->SetIntArrayRegion(this,array,start,len,buf);
1773     }
SetLongArrayRegionJNIEnv_1774     void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
1775 			    const jlong *buf) {
1776         functions->SetLongArrayRegion(this,array,start,len,buf);
1777     }
SetFloatArrayRegionJNIEnv_1778     void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
1779 			     const jfloat *buf) {
1780         functions->SetFloatArrayRegion(this,array,start,len,buf);
1781     }
SetDoubleArrayRegionJNIEnv_1782     void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
1783 			      const jdouble *buf) {
1784         functions->SetDoubleArrayRegion(this,array,start,len,buf);
1785     }
1786 
RegisterNativesJNIEnv_1787     jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
1788 			 jint nMethods) {
1789         return functions->RegisterNatives(this,clazz,methods,nMethods);
1790     }
UnregisterNativesJNIEnv_1791     jint UnregisterNatives(jclass clazz) {
1792         return functions->UnregisterNatives(this,clazz);
1793     }
1794 
MonitorEnterJNIEnv_1795     jint MonitorEnter(jobject obj) {
1796         return functions->MonitorEnter(this,obj);
1797     }
MonitorExitJNIEnv_1798     jint MonitorExit(jobject obj) {
1799         return functions->MonitorExit(this,obj);
1800     }
1801 
GetJavaVMJNIEnv_1802     jint GetJavaVM(JavaVM **vm) {
1803         return functions->GetJavaVM(this,vm);
1804     }
1805 
GetStringRegionJNIEnv_1806     void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {
1807         functions->GetStringRegion(this,str,start,len,buf);
1808     }
GetStringUTFRegionJNIEnv_1809     void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {
1810         functions->GetStringUTFRegion(this,str,start,len,buf);
1811     }
1812 
GetPrimitiveArrayCriticalJNIEnv_1813     void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {
1814         return functions->GetPrimitiveArrayCritical(this,array,isCopy);
1815     }
ReleasePrimitiveArrayCriticalJNIEnv_1816     void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {
1817         functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);
1818     }
1819 
GetStringCriticalJNIEnv_1820     const jchar * GetStringCritical(jstring string, jboolean *isCopy) {
1821         return functions->GetStringCritical(this,string,isCopy);
1822     }
ReleaseStringCriticalJNIEnv_1823     void ReleaseStringCritical(jstring string, const jchar *cstring) {
1824         functions->ReleaseStringCritical(this,string,cstring);
1825     }
1826 
NewWeakGlobalRefJNIEnv_1827     jweak NewWeakGlobalRef(jobject obj) {
1828         return functions->NewWeakGlobalRef(this,obj);
1829     }
DeleteWeakGlobalRefJNIEnv_1830     void DeleteWeakGlobalRef(jweak ref) {
1831         functions->DeleteWeakGlobalRef(this,ref);
1832     }
1833 
ExceptionCheckJNIEnv_1834     jboolean ExceptionCheck() {
1835 	return functions->ExceptionCheck(this);
1836     }
1837 
NewDirectByteBufferJNIEnv_1838     jobject NewDirectByteBuffer(void* address, jlong capacity) {
1839         return functions->NewDirectByteBuffer(this, address, capacity);
1840     }
GetDirectBufferAddressJNIEnv_1841     void* GetDirectBufferAddress(jobject buf) {
1842         return functions->GetDirectBufferAddress(this, buf);
1843     }
GetDirectBufferCapacityJNIEnv_1844     jlong GetDirectBufferCapacity(jobject buf) {
1845         return functions->GetDirectBufferCapacity(this, buf);
1846     }
GetObjectRefTypeJNIEnv_1847     jobjectRefType GetObjectRefType(jobject obj) {
1848         return functions->GetObjectRefType(this, obj);
1849     }
1850 
1851 #endif /* __cplusplus */
1852 };
1853 
1854 typedef struct JavaVMOption {
1855     char *optionString;
1856     void *extraInfo;
1857 } JavaVMOption;
1858 
1859 typedef struct JavaVMInitArgs {
1860     jint version;
1861 
1862     jint nOptions;
1863     JavaVMOption *options;
1864     jboolean ignoreUnrecognized;
1865 } JavaVMInitArgs;
1866 
1867 typedef struct JavaVMAttachArgs {
1868     jint version;
1869 
1870     char *name;
1871     jobject group;
1872 } JavaVMAttachArgs;
1873 
1874 /* These will be VM-specific. */
1875 
1876 #define JDK1_2
1877 #define JDK1_4
1878 
1879 /* End VM-specific. */
1880 
1881 struct JNIInvokeInterface_ {
1882     void *reserved0;
1883     void *reserved1;
1884     void *reserved2;
1885 
1886 #if !TARGET_RT_MAC_CFM && defined(__ppc__)
1887     void* cfm_vectors[4];
1888 #endif /* !TARGET_RT_MAC_CFM && defined(__ppc__) */
1889 
1890     jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
1891 
1892     jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);
1893 
1894     jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
1895 
1896     jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);
1897 
1898     jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);
1899 
1900 #if TARGET_RT_MAC_CFM && defined(__ppc__)
1901     void* real_functions[5];
1902 #endif /* TARGET_RT_MAC_CFM && defined(__ppc__) */
1903 };
1904 
1905 struct JavaVM_ {
1906     const struct JNIInvokeInterface_ *functions;
1907 #ifdef __cplusplus
1908 
DestroyJavaVMJavaVM_1909     jint DestroyJavaVM() {
1910         return functions->DestroyJavaVM(this);
1911     }
AttachCurrentThreadJavaVM_1912     jint AttachCurrentThread(void **penv, void *args) {
1913         return functions->AttachCurrentThread(this, penv, args);
1914     }
DetachCurrentThreadJavaVM_1915     jint DetachCurrentThread() {
1916         return functions->DetachCurrentThread(this);
1917     }
1918 
GetEnvJavaVM_1919     jint GetEnv(void **penv, jint version) {
1920         return functions->GetEnv(this, penv, version);
1921     }
AttachCurrentThreadAsDaemonJavaVM_1922     jint AttachCurrentThreadAsDaemon(void **penv, void *args) {
1923         return functions->AttachCurrentThreadAsDaemon(this, penv, args);
1924     }
1925 #endif
1926 };
1927 
1928 #ifdef _JNI_IMPLEMENTATION_
1929 #define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT
1930 #else
1931 #define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT
1932 #endif
1933 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1934 JNI_GetDefaultJavaVMInitArgs(void *args);
1935 
1936 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1937 JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
1938 
1939 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
1940 JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
1941 
1942 /* Defined by native libraries. */
1943 JNIEXPORT jint JNICALL
1944 JNI_OnLoad(JavaVM *vm, void *reserved);
1945 
1946 JNIEXPORT void JNICALL
1947 JNI_OnUnload(JavaVM *vm, void *reserved);
1948 
1949 #define JNI_VERSION_1_1 0x00010001
1950 #define JNI_VERSION_1_2 0x00010002
1951 #define JNI_VERSION_1_4 0x00010004
1952 #define JNI_VERSION_1_6 0x00010006
1953 
1954 #ifdef __cplusplus
1955 } /* extern "C" */
1956 #endif /* __cplusplus */
1957 
1958 #endif /* !_JAVASOFT_JNI_H_ */
1959 
1960 
1961 
1962