1704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
2704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Copyright 2006 The Android Open Source Project
3704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner *
4704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * JNI specification, as defined by Sun:
5704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html
6704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner *
7704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Everything here is expected to be VM-neutral.
8704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
9704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#ifndef _JNI_H
10704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define _JNI_H
11704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
12704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#include <stdarg.h>
13704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
14704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
15704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Primitive types that match up with Java equivalents.
16704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
17704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#ifdef HAVE_INTTYPES_H
18704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner# include <inttypes.h>      /* C99 */
19704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef uint8_t         jboolean;       /* unsigned 8 bits */
20704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef int8_t          jbyte;          /* signed 8 bits */
21704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef uint16_t        jchar;          /* unsigned 16 bits */
22704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef int16_t         jshort;         /* signed 16 bits */
23704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef int32_t         jint;           /* signed 32 bits */
24704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef int64_t         jlong;          /* signed 64 bits */
25704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef float           jfloat;         /* 32-bit IEEE 754 */
26704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef double          jdouble;        /* 64-bit IEEE 754 */
27704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#else
28704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef unsigned char   jboolean;       /* unsigned 8 bits */
29704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef signed char     jbyte;          /* signed 8 bits */
30704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef unsigned short  jchar;          /* unsigned 16 bits */
31704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef short           jshort;         /* signed 16 bits */
32704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef int             jint;           /* signed 32 bits */
33704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef long long       jlong;          /* signed 64 bits */
34704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef float           jfloat;         /* 32-bit IEEE 754 */
35704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef double          jdouble;        /* 64-bit IEEE 754 */
36704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif
37704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
38704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/* "cardinal indices and sizes" */
39704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jint            jsize;
40704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
41704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#ifdef __cplusplus
42704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
43704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Reference types, in C++
44704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
45704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jobject {};
46704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jclass : public _jobject {};
47704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jstring : public _jobject {};
48704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jarray : public _jobject {};
49704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jobjectArray : public _jarray {};
50704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jbooleanArray : public _jarray {};
51704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jbyteArray : public _jarray {};
52704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jcharArray : public _jarray {};
53704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jshortArray : public _jarray {};
54704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jintArray : public _jarray {};
55704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jlongArray : public _jarray {};
56704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jfloatArray : public _jarray {};
57704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jdoubleArray : public _jarray {};
58704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerclass _jthrowable : public _jobject {};
59704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
60704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jobject*       jobject;
61704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jclass*        jclass;
62704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jstring*       jstring;
63704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jarray*        jarray;
64704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jobjectArray*  jobjectArray;
65704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jbooleanArray* jbooleanArray;
66704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jbyteArray*    jbyteArray;
67704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jcharArray*    jcharArray;
68704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jshortArray*   jshortArray;
69704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jintArray*     jintArray;
70704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jlongArray*    jlongArray;
71704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jfloatArray*   jfloatArray;
72704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jdoubleArray*  jdoubleArray;
73704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jthrowable*    jthrowable;
74704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _jobject*       jweak;
75704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
76704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
77704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#else /* not __cplusplus */
78704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
79704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
80704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Reference types, in C.
81704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
82704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef void*           jobject;
83704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jobject         jclass;
84704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jobject         jstring;
85704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jobject         jarray;
86704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jobjectArray;
87704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jbooleanArray;
88704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jbyteArray;
89704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jcharArray;
90704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jshortArray;
91704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jintArray;
92704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jlongArray;
93704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jfloatArray;
94704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jarray          jdoubleArray;
95704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jobject         jthrowable;
96704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef jobject         jweak;
97704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
98704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif /* not __cplusplus */
99704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
100704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct _jfieldID;                       /* opaque structure */
101704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef struct _jfieldID* jfieldID;     /* field IDs */
102704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
103704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct _jmethodID;                      /* opaque structure */
104704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef struct _jmethodID* jmethodID;   /* method IDs */
105704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
106704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct JNIInvokeInterface;
107704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
108704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef union jvalue {
109704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    z;
110704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       b;
111704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       c;
112704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      s;
113704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        i;
114704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       j;
115704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      f;
116704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     d;
117704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     l;
118704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner} jvalue;
119704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
120704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef enum jobjectRefType {
121704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    JNIInvalidRefType = 0,
122704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    JNILocalRefType = 1,
123704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    JNIGlobalRefType = 2,
124704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    JNIWeakGlobalRefType = 3
125704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner} jobjectRefType;
126704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
127704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef struct {
128704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const char* name;
129704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const char* signature;
130704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       fnPtr;
131704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner} JNINativeMethod;
132704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
133704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct _JNIEnv;
134704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct _JavaVM;
135704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef const struct JNINativeInterface* C_JNIEnv;
136704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
137704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#if defined(__cplusplus)
138704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _JNIEnv JNIEnv;
139704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef _JavaVM JavaVM;
140704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#else
141704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef const struct JNINativeInterface* JNIEnv;
142704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef const struct JNIInvokeInterface* JavaVM;
143704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif
144704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
145704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
146704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Table of interface function pointers.
147704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
148704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct JNINativeInterface {
149704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       reserved0;
150704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       reserved1;
151704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       reserved2;
152704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       reserved3;
153704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
154704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*GetVersion)(JNIEnv *);
155704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
156704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass      (*DefineClass)(JNIEnv*, const char*, jobject, const jbyte*,
157704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize);
158704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass      (*FindClass)(JNIEnv*, const char*);
159704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
160704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jmethodID   (*FromReflectedMethod)(JNIEnv*, jobject);
161704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfieldID    (*FromReflectedField)(JNIEnv*, jobject);
162704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    /* spec doesn't show jboolean parameter */
163704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*ToReflectedMethod)(JNIEnv*, jclass, jmethodID, jboolean);
164704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
165704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass      (*GetSuperclass)(JNIEnv*, jclass);
166704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*IsAssignableFrom)(JNIEnv*, jclass, jclass);
167704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
168704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    /* spec doesn't show jboolean parameter */
169704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*ToReflectedField)(JNIEnv*, jclass, jfieldID, jboolean);
170704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
171704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*Throw)(JNIEnv*, jthrowable);
172704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*ThrowNew)(JNIEnv *, jclass, const char *);
173704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jthrowable  (*ExceptionOccurred)(JNIEnv*);
174704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ExceptionDescribe)(JNIEnv*);
175704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ExceptionClear)(JNIEnv*);
176704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*FatalError)(JNIEnv*, const char*);
177704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
178704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*PushLocalFrame)(JNIEnv*, jint);
179704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*PopLocalFrame)(JNIEnv*, jobject);
180704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
181704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*NewGlobalRef)(JNIEnv*, jobject);
182704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*DeleteGlobalRef)(JNIEnv*, jobject);
183704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*DeleteLocalRef)(JNIEnv*, jobject);
184704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*IsSameObject)(JNIEnv*, jobject, jobject);
185704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
186704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*NewLocalRef)(JNIEnv*, jobject);
187704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*EnsureLocalCapacity)(JNIEnv*, jint);
188704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
189704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*AllocObject)(JNIEnv*, jclass);
190704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*NewObject)(JNIEnv*, jclass, jmethodID, ...);
191704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);
192704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*);
193704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
194704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass      (*GetObjectClass)(JNIEnv*, jobject);
195704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*IsInstanceOf)(JNIEnv*, jobject, jclass);
196704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
197704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
198704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
199704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);
200704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
201704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...);
202704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list);
203704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
204704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...);
205704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list);
206704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
207704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...);
208704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list);
209704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
210704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...);
211704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list);
212704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
213704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);
214704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list);
215704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
216704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...);
217704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list);
218704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
219704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...);
220704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list);
221704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
222704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...);
223704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list);
224704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
225704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
226704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list);
227704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
228704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
229704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass,
230704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
231704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass,
232704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
233704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass,
234704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
235704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass,
236704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
237704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass,
238704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                         jmethodID, va_list);
239704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass,
240704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                         jmethodID, jvalue*);
241704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass,
242704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
243704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass,
244704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
245704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass,
246704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
247704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass,
248704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
249704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass,
250704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
251704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass,
252704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
253704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass,
254704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
255704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass,
256704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
257704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass,
258704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
259704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass,
260704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
261704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass,
262704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
263704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass,
264704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
265704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass,
266704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
267704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass,
268704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
269704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass,
270704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
271704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass,
272704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
273704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass,
274704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
275704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass,
276704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
277704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass,
278704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
279704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass,
280704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
281704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass,
282704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
283704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass,
284704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, ...);
285704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass,
286704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, va_list);
287704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass,
288704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jmethodID, jvalue*);
289704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
290704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfieldID    (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);
291704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
292704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*GetObjectField)(JNIEnv*, jobject, jfieldID);
293704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*GetBooleanField)(JNIEnv*, jobject, jfieldID);
294704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*GetByteField)(JNIEnv*, jobject, jfieldID);
295704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*GetCharField)(JNIEnv*, jobject, jfieldID);
296704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*GetShortField)(JNIEnv*, jobject, jfieldID);
297704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*GetIntField)(JNIEnv*, jobject, jfieldID);
298704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*GetLongField)(JNIEnv*, jobject, jfieldID);
299704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*GetFloatField)(JNIEnv*, jobject, jfieldID);
300704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*GetDoubleField)(JNIEnv*, jobject, jfieldID);
301704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
302704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject);
303704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean);
304704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte);
305704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar);
306704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort);
307704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetIntField)(JNIEnv*, jobject, jfieldID, jint);
308704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong);
309704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat);
310704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble);
311704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
312704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jmethodID   (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);
313704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
314704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);
315704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list);
316704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
317704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);
318704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID,
319704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        va_list);
320704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID,
321704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jvalue*);
322704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...);
323704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list);
324704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
325704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...);
326704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list);
327704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
328704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...);
329704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list);
330704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
331704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...);
332704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list);
333704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
334704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...);
335704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list);
336704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
337704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...);
338704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list);
339704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
340704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...);
341704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list);
342704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
343704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...);
344704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);
345704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
346704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
347704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfieldID    (*GetStaticFieldID)(JNIEnv*, jclass, const char*,
348704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        const char*);
349704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
350704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID);
351704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*GetStaticBooleanField)(JNIEnv*, jclass, jfieldID);
352704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte       (*GetStaticByteField)(JNIEnv*, jclass, jfieldID);
353704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar       (*GetStaticCharField)(JNIEnv*, jclass, jfieldID);
354704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort      (*GetStaticShortField)(JNIEnv*, jclass, jfieldID);
355704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*GetStaticIntField)(JNIEnv*, jclass, jfieldID);
356704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*GetStaticLongField)(JNIEnv*, jclass, jfieldID);
357704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat      (*GetStaticFloatField)(JNIEnv*, jclass, jfieldID);
358704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble     (*GetStaticDoubleField)(JNIEnv*, jclass, jfieldID);
359704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
360704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticObjectField)(JNIEnv*, jclass, jfieldID, jobject);
361704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticBooleanField)(JNIEnv*, jclass, jfieldID, jboolean);
362704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticByteField)(JNIEnv*, jclass, jfieldID, jbyte);
363704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticCharField)(JNIEnv*, jclass, jfieldID, jchar);
364704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticShortField)(JNIEnv*, jclass, jfieldID, jshort);
365704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticIntField)(JNIEnv*, jclass, jfieldID, jint);
366704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticLongField)(JNIEnv*, jclass, jfieldID, jlong);
367704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticFloatField)(JNIEnv*, jclass, jfieldID, jfloat);
368704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetStaticDoubleField)(JNIEnv*, jclass, jfieldID, jdouble);
369704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
370704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jstring     (*NewString)(JNIEnv*, const jchar*, jsize);
371704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jsize       (*GetStringLength)(JNIEnv*, jstring);
372704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);
373704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);
374704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jstring     (*NewStringUTF)(JNIEnv*, const char*);
375704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jsize       (*GetStringUTFLength)(JNIEnv*, jstring);
376704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    /* JNI spec says this returns const jbyte*, but that's inconsistent */
377704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
378704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);
379704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jsize       (*GetArrayLength)(JNIEnv*, jarray);
380704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobjectArray (*NewObjectArray)(JNIEnv*, jsize, jclass, jobject);
381704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize);
382704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject);
383704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
384704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize);
385704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyteArray    (*NewByteArray)(JNIEnv*, jsize);
386704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jcharArray    (*NewCharArray)(JNIEnv*, jsize);
387704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshortArray   (*NewShortArray)(JNIEnv*, jsize);
388704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jintArray     (*NewIntArray)(JNIEnv*, jsize);
389704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlongArray    (*NewLongArray)(JNIEnv*, jsize);
390704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloatArray   (*NewFloatArray)(JNIEnv*, jsize);
391704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdoubleArray  (*NewDoubleArray)(JNIEnv*, jsize);
392704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
393704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean*   (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*);
394704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte*      (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*);
395704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar*      (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*);
396704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort*     (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*);
397704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint*       (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
398704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong*      (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*);
399704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat*     (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*);
400704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble*    (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*);
401704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
402704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray,
403704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jboolean*, jint);
404704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray,
405704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jbyte*, jint);
406704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseCharArrayElements)(JNIEnv*, jcharArray,
407704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jchar*, jint);
408704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseShortArrayElements)(JNIEnv*, jshortArray,
409704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jshort*, jint);
410704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseIntArrayElements)(JNIEnv*, jintArray,
411704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jint*, jint);
412704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseLongArrayElements)(JNIEnv*, jlongArray,
413704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jlong*, jint);
414704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray,
415704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jfloat*, jint);
416704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray,
417704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jdouble*, jint);
418704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
419704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
420704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jboolean*);
421704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetByteArrayRegion)(JNIEnv*, jbyteArray,
422704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jbyte*);
423704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetCharArrayRegion)(JNIEnv*, jcharArray,
424704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jchar*);
425704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetShortArrayRegion)(JNIEnv*, jshortArray,
426704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jshort*);
427704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetIntArrayRegion)(JNIEnv*, jintArray,
428704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jint*);
429704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetLongArrayRegion)(JNIEnv*, jlongArray,
430704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jlong*);
431704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetFloatArrayRegion)(JNIEnv*, jfloatArray,
432704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jfloat*);
433704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
434704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, jdouble*);
435704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
436704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    /* spec shows these without const; some jni.h do, some don't */
437704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
438704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jboolean*);
439704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetByteArrayRegion)(JNIEnv*, jbyteArray,
440704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jbyte*);
441704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetCharArrayRegion)(JNIEnv*, jcharArray,
442704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jchar*);
443704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetShortArrayRegion)(JNIEnv*, jshortArray,
444704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jshort*);
445704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetIntArrayRegion)(JNIEnv*, jintArray,
446704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jint*);
447704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetLongArrayRegion)(JNIEnv*, jlongArray,
448704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jlong*);
449704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetFloatArrayRegion)(JNIEnv*, jfloatArray,
450704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jfloat*);
451704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
452704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jsize, jsize, const jdouble*);
453704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
454704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,
455704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                        jint);
456704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*UnregisterNatives)(JNIEnv*, jclass);
457704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*MonitorEnter)(JNIEnv*, jobject);
458704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*MonitorExit)(JNIEnv*, jobject);
459704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*GetJavaVM)(JNIEnv*, JavaVM**);
460704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
461704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetStringRegion)(JNIEnv*, jstring, jsize, jsize, jchar*);
462704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*GetStringUTFRegion)(JNIEnv*, jstring, jsize, jsize, char*);
463704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
464704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       (*GetPrimitiveArrayCritical)(JNIEnv*, jarray, jboolean*);
465704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleasePrimitiveArrayCritical)(JNIEnv*, jarray, void*, jint);
466704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
467704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const jchar* (*GetStringCritical)(JNIEnv*, jstring, jboolean*);
468704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*ReleaseStringCritical)(JNIEnv*, jstring, const jchar*);
469704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
470704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jweak       (*NewWeakGlobalRef)(JNIEnv*, jobject);
471704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void        (*DeleteWeakGlobalRef)(JNIEnv*, jweak);
472704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
473704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    (*ExceptionCheck)(JNIEnv*);
474704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
475704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     (*NewDirectByteBuffer)(JNIEnv*, void*, jlong);
476704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       (*GetDirectBufferAddress)(JNIEnv*, jobject);
477704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong       (*GetDirectBufferCapacity)(JNIEnv*, jobject);
478704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
479704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    /* added in JNI 1.6 */
480704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobjectRefType (*GetObjectRefType)(JNIEnv*, jobject);
481704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner};
482704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
483704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
484704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * C++ object wrapper.
485704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner *
486704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * This is usually overlaid on a C struct whose first element is a
487704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * JNINativeInterface*.  We rely somewhat on compiler behavior.
488704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
489704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct _JNIEnv {
490704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    /* do not rename this; it does not seem to be entirely opaque */
491704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const struct JNINativeInterface* functions;
492704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
493704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#if defined(__cplusplus)
494704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
495704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint GetVersion()
496704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetVersion(this); }
497704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
498704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass DefineClass(const char *name, jobject loader, const jbyte* buf,
499704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jsize bufLen)
500704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->DefineClass(this, name, loader, buf, bufLen); }
501704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
502704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass FindClass(const char* name)
503704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->FindClass(this, name); }
504704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
505704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jmethodID FromReflectedMethod(jobject method)
506704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->FromReflectedMethod(this, method); }
507704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
508704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfieldID FromReflectedField(jobject field)
509704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->FromReflectedField(this, field); }
510704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
511704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic)
512704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->ToReflectedMethod(this, cls, methodID, isStatic); }
513704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
514704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass GetSuperclass(jclass clazz)
515704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetSuperclass(this, clazz); }
516704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
517704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean IsAssignableFrom(jclass clazz1, jclass clazz2)
518704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->IsAssignableFrom(this, clazz1, clazz2); }
519704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
520704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic)
521704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->ToReflectedField(this, cls, fieldID, isStatic); }
522704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
523704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint Throw(jthrowable obj)
524704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->Throw(this, obj); }
525704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
526704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint ThrowNew(jclass clazz, const char* message)
527704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->ThrowNew(this, clazz, message); }
528704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
529704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jthrowable ExceptionOccurred()
530704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->ExceptionOccurred(this); }
531704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
532704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ExceptionDescribe()
533704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ExceptionDescribe(this); }
534704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
535704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ExceptionClear()
536704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ExceptionClear(this); }
537704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
538704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void FatalError(const char* msg)
539704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->FatalError(this, msg); }
540704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
541704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint PushLocalFrame(jint capacity)
542704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->PushLocalFrame(this, capacity); }
543704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
544704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject PopLocalFrame(jobject result)
545704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->PopLocalFrame(this, result); }
546704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
547704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject NewGlobalRef(jobject obj)
548704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewGlobalRef(this, obj); }
549704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
550704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void DeleteGlobalRef(jobject globalRef)
551704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->DeleteGlobalRef(this, globalRef); }
552704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
553704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void DeleteLocalRef(jobject localRef)
554704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->DeleteLocalRef(this, localRef); }
555704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
556704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean IsSameObject(jobject ref1, jobject ref2)
557704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->IsSameObject(this, ref1, ref2); }
558704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
559704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject NewLocalRef(jobject ref)
560704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewLocalRef(this, ref); }
561704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
562704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint EnsureLocalCapacity(jint capacity)
563704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->EnsureLocalCapacity(this, capacity); }
564704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
565704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject AllocObject(jclass clazz)
566704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->AllocObject(this, clazz); }
567704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
568704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject NewObject(jclass clazz, jmethodID methodID, ...)
569704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    {
570704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args;
571704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_start(args, methodID);
572704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jobject result = functions->NewObjectV(this, clazz, methodID, args);
573704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_end(args);
574704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        return result;
575704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    }
576704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
577704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject NewObjectV(jclass clazz, jmethodID methodID, va_list args)
578704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewObjectV(this, clazz, methodID, args); }
579704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
580704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject NewObjectA(jclass clazz, jmethodID methodID, jvalue* args)
581704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewObjectA(this, clazz, methodID, args); }
582704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
583704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jclass GetObjectClass(jobject obj)
584704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetObjectClass(this, obj); }
585704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
586704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean IsInstanceOf(jobject obj, jclass clazz)
587704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->IsInstanceOf(this, obj, clazz); }
588704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
589704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
590704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetMethodID(this, clazz, name, sig); }
591704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
592704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_TYPE_METHOD(_jtype, _jname)                                    \
593704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype Call##_jname##Method(jobject obj, jmethodID methodID, ...)       \
594704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    {                                                                       \
595704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        _jtype result;                                                      \
596704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args;                                                       \
597704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_start(args, methodID);                                           \
598704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        result = functions->Call##_jname##MethodV(this, obj, methodID,      \
599704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                    args);                                                  \
600704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_end(args);                                                       \
601704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        return result;                                                      \
602704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    }
603704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_TYPE_METHODV(_jtype, _jname)                                   \
604704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype Call##_jname##MethodV(jobject obj, jmethodID methodID,           \
605704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args)                                                       \
606704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->Call##_jname##MethodV(this, obj, methodID, args); }
607704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_TYPE_METHODA(_jtype, _jname)                                   \
608704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype Call##_jname##MethodA(jobject obj, jmethodID methodID,           \
609704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jvalue* args)                                                       \
610704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->Call##_jname##MethodA(this, obj, methodID, args); }
611704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
612704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_TYPE(_jtype, _jname)                                           \
613704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE_METHOD(_jtype, _jname)                                        \
614704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE_METHODV(_jtype, _jname)                                       \
615704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE_METHODA(_jtype, _jname)
616704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
617704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jobject, Object)
618704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jboolean, Boolean)
619704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jbyte, Byte)
620704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jchar, Char)
621704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jshort, Short)
622704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jint, Int)
623704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jlong, Long)
624704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jfloat, Float)
625704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_TYPE(jdouble, Double)
626704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
627704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallVoidMethod(jobject obj, jmethodID methodID, ...)
628704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    {
629704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args;
630704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_start(args, methodID);
631704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        functions->CallVoidMethodV(this, obj, methodID, args);
632704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_end(args);
633704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    }
634704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallVoidMethodV(jobject obj, jmethodID methodID, va_list args)
635704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->CallVoidMethodV(this, obj, methodID, args); }
636704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallVoidMethodA(jobject obj, jmethodID methodID, jvalue* args)
637704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->CallVoidMethodA(this, obj, methodID, args); }
638704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
639704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                            \
640704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype CallNonvirtual##_jname##Method(jobject obj, jclass clazz,        \
641704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jmethodID methodID, ...)                                            \
642704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    {                                                                       \
643704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        _jtype result;                                                      \
644704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args;                                                       \
645704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_start(args, methodID);                                           \
646704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        result = functions->CallNonvirtual##_jname##MethodV(this, obj,      \
647704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                    clazz, methodID, args);                                 \
648704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_end(args);                                                       \
649704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        return result;                                                      \
650704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    }
651704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                           \
652704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype CallNonvirtual##_jname##MethodV(jobject obj, jclass clazz,       \
653704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jmethodID methodID, va_list args)                                   \
654704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->CallNonvirtual##_jname##MethodV(this, obj, clazz,   \
655704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        methodID, args); }
656704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)                           \
657704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype CallNonvirtual##_jname##MethodA(jobject obj, jclass clazz,       \
658704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jmethodID methodID, jvalue* args)                                   \
659704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->CallNonvirtual##_jname##MethodA(this, obj, clazz,   \
660704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        methodID, args); }
661704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
662704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_NONVIRT_TYPE(_jtype, _jname)                                   \
663704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                                \
664704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                               \
665704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)
666704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
667704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jobject, Object)
668704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jboolean, Boolean)
669704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jbyte, Byte)
670704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jchar, Char)
671704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jshort, Short)
672704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jint, Int)
673704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jlong, Long)
674704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jfloat, Float)
675704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_NONVIRT_TYPE(jdouble, Double)
676704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
677704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
678704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jmethodID methodID, ...)
679704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    {
680704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args;
681704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_start(args, methodID);
682704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args);
683704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_end(args);
684704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    }
685704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
686704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jmethodID methodID, va_list args)
687704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args); }
688704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
689704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jmethodID methodID, jvalue* args)
690704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->CallNonvirtualVoidMethodA(this, obj, clazz, methodID, args); }
691704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
692704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfieldID GetFieldID(jclass clazz, const char* name, const char* sig)
693704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetFieldID(this, clazz, name, sig); }
694704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
695704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject GetObjectField(jobject obj, jfieldID fieldID)
696704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetObjectField(this, obj, fieldID); }
697704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean GetBooleanField(jobject obj, jfieldID fieldID)
698704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetBooleanField(this, obj, fieldID); }
699704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte GetByteField(jobject obj, jfieldID fieldID)
700704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetByteField(this, obj, fieldID); }
701704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar GetCharField(jobject obj, jfieldID fieldID)
702704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetCharField(this, obj, fieldID); }
703704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort GetShortField(jobject obj, jfieldID fieldID)
704704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetShortField(this, obj, fieldID); }
705704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint GetIntField(jobject obj, jfieldID fieldID)
706704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetIntField(this, obj, fieldID); }
707704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong GetLongField(jobject obj, jfieldID fieldID)
708704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetLongField(this, obj, fieldID); }
709704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat GetFloatField(jobject obj, jfieldID fieldID)
710704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetFloatField(this, obj, fieldID); }
711704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble GetDoubleField(jobject obj, jfieldID fieldID)
712704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetDoubleField(this, obj, fieldID); }
713704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
714704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetObjectField(jobject obj, jfieldID fieldID, jobject value)
715704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetObjectField(this, obj, fieldID, value); }
716704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetBooleanField(jobject obj, jfieldID fieldID, jboolean value)
717704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetBooleanField(this, obj, fieldID, value); }
718704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetByteField(jobject obj, jfieldID fieldID, jbyte value)
719704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetByteField(this, obj, fieldID, value); }
720704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetCharField(jobject obj, jfieldID fieldID, jchar value)
721704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetCharField(this, obj, fieldID, value); }
722704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetShortField(jobject obj, jfieldID fieldID, jshort value)
723704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetShortField(this, obj, fieldID, value); }
724704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetIntField(jobject obj, jfieldID fieldID, jint value)
725704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetIntField(this, obj, fieldID, value); }
726704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetLongField(jobject obj, jfieldID fieldID, jlong value)
727704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetLongField(this, obj, fieldID, value); }
728704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetFloatField(jobject obj, jfieldID fieldID, jfloat value)
729704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetFloatField(this, obj, fieldID, value); }
730704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetDoubleField(jobject obj, jfieldID fieldID, jdouble value)
731704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetDoubleField(this, obj, fieldID, value); }
732704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
733704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jmethodID GetStaticMethodID(jclass clazz, const char* name, const char* sig)
734704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticMethodID(this, clazz, name, sig); }
735704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
736704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_STATIC_TYPE_METHOD(_jtype, _jname)                             \
737704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype CallStatic##_jname##Method(jclass clazz, jmethodID methodID,     \
738704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        ...)                                                                \
739704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    {                                                                       \
740704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        _jtype result;                                                      \
741704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args;                                                       \
742704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_start(args, methodID);                                           \
743704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        result = functions->CallStatic##_jname##MethodV(this, clazz,        \
744704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner                    methodID, args);                                        \
745704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_end(args);                                                       \
746704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        return result;                                                      \
747704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    }
748704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_STATIC_TYPE_METHODV(_jtype, _jname)                            \
749704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype CallStatic##_jname##MethodV(jclass clazz, jmethodID methodID,    \
750704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args)                                                       \
751704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->CallStatic##_jname##MethodV(this, clazz, methodID,  \
752704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        args); }
753704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_STATIC_TYPE_METHODA(_jtype, _jname)                            \
754704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    _jtype CallStatic##_jname##MethodA(jclass clazz, jmethodID methodID,    \
755704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jvalue* args)                                                       \
756704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->CallStatic##_jname##MethodA(this, clazz, methodID,  \
757704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        args); }
758704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
759704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define CALL_STATIC_TYPE(_jtype, _jname)                                    \
760704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE_METHOD(_jtype, _jname)                                 \
761704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE_METHODV(_jtype, _jname)                                \
762704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE_METHODA(_jtype, _jname)
763704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
764704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jobject, Object)
765704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jboolean, Boolean)
766704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jbyte, Byte)
767704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jchar, Char)
768704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jshort, Short)
769704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jint, Int)
770704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jlong, Long)
771704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jfloat, Float)
772704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    CALL_STATIC_TYPE(jdouble, Double)
773704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
774704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...)
775704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    {
776704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_list args;
777704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_start(args, methodID);
778704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        functions->CallStaticVoidMethodV(this, clazz, methodID, args);
779704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        va_end(args);
780704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    }
781704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallStaticVoidMethodV(jclass clazz, jmethodID methodID, va_list args)
782704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->CallStaticVoidMethodV(this, clazz, methodID, args); }
783704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void CallStaticVoidMethodA(jclass clazz, jmethodID methodID, jvalue* args)
784704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->CallStaticVoidMethodA(this, clazz, methodID, args); }
785704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
786704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfieldID GetStaticFieldID(jclass clazz, const char* name, const char* sig)
787704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticFieldID(this, clazz, name, sig); }
788704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
789704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject GetStaticObjectField(jclass clazz, jfieldID fieldID)
790704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticObjectField(this, clazz, fieldID); }
791704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID)
792704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticBooleanField(this, clazz, fieldID); }
793704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte GetStaticByteField(jclass clazz, jfieldID fieldID)
794704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticByteField(this, clazz, fieldID); }
795704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar GetStaticCharField(jclass clazz, jfieldID fieldID)
796704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticCharField(this, clazz, fieldID); }
797704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort GetStaticShortField(jclass clazz, jfieldID fieldID)
798704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticShortField(this, clazz, fieldID); }
799704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint GetStaticIntField(jclass clazz, jfieldID fieldID)
800704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticIntField(this, clazz, fieldID); }
801704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong GetStaticLongField(jclass clazz, jfieldID fieldID)
802704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticLongField(this, clazz, fieldID); }
803704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID)
804704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticFloatField(this, clazz, fieldID); }
805704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID)
806704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStaticDoubleField(this, clazz, fieldID); }
807704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
808704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticObjectField(jclass clazz, jfieldID fieldID, jobject value)
809704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticObjectField(this, clazz, fieldID, value); }
810704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticBooleanField(jclass clazz, jfieldID fieldID, jboolean value)
811704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticBooleanField(this, clazz, fieldID, value); }
812704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticByteField(jclass clazz, jfieldID fieldID, jbyte value)
813704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticByteField(this, clazz, fieldID, value); }
814704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticCharField(jclass clazz, jfieldID fieldID, jchar value)
815704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticCharField(this, clazz, fieldID, value); }
816704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticShortField(jclass clazz, jfieldID fieldID, jshort value)
817704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticShortField(this, clazz, fieldID, value); }
818704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticIntField(jclass clazz, jfieldID fieldID, jint value)
819704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticIntField(this, clazz, fieldID, value); }
820704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticLongField(jclass clazz, jfieldID fieldID, jlong value)
821704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticLongField(this, clazz, fieldID, value); }
822704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticFloatField(jclass clazz, jfieldID fieldID, jfloat value)
823704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticFloatField(this, clazz, fieldID, value); }
824704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetStaticDoubleField(jclass clazz, jfieldID fieldID, jdouble value)
825704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetStaticDoubleField(this, clazz, fieldID, value); }
826704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
827704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jstring NewString(const jchar* unicodeChars, jsize len)
828704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewString(this, unicodeChars, len); }
829704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
830704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jsize GetStringLength(jstring string)
831704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStringLength(this, string); }
832704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
833704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const jchar* GetStringChars(jstring string, jboolean* isCopy)
834704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStringChars(this, string, isCopy); }
835704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
836704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseStringChars(jstring string, const jchar* chars)
837704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseStringChars(this, string, chars); }
838704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
839704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jstring NewStringUTF(const char* bytes)
840704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewStringUTF(this, bytes); }
841704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
842704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jsize GetStringUTFLength(jstring string)
843704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStringUTFLength(this, string); }
844704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
845704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const char* GetStringUTFChars(jstring string, jboolean* isCopy)
846704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStringUTFChars(this, string, isCopy); }
847704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
848704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseStringUTFChars(jstring string, const char* utf)
849704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseStringUTFChars(this, string, utf); }
850704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
851704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jsize GetArrayLength(jarray array)
852704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetArrayLength(this, array); }
853704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
854704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobjectArray NewObjectArray(jsize length, jclass elementClass,
855704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jobject initialElement)
856704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewObjectArray(this, length, elementClass,
857704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        initialElement); }
858704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
859704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject GetObjectArrayElement(jobjectArray array, jsize index)
860704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetObjectArrayElement(this, array, index); }
861704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
862704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetObjectArrayElement(jobjectArray array, jsize index, jobject value)
863704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetObjectArrayElement(this, array, index, value); }
864704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
865704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbooleanArray NewBooleanArray(jsize length)
866704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewBooleanArray(this, length); }
867704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyteArray NewByteArray(jsize length)
868704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewByteArray(this, length); }
869704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jcharArray NewCharArray(jsize length)
870704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewCharArray(this, length); }
871704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshortArray NewShortArray(jsize length)
872704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewShortArray(this, length); }
873704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jintArray NewIntArray(jsize length)
874704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewIntArray(this, length); }
875704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlongArray NewLongArray(jsize length)
876704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewLongArray(this, length); }
877704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloatArray NewFloatArray(jsize length)
878704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewFloatArray(this, length); }
879704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdoubleArray NewDoubleArray(jsize length)
880704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewDoubleArray(this, length); }
881704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
882704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean* GetBooleanArrayElements(jbooleanArray array, jboolean* isCopy)
883704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetBooleanArrayElements(this, array, isCopy); }
884704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jbyte* GetByteArrayElements(jbyteArray array, jboolean* isCopy)
885704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetByteArrayElements(this, array, isCopy); }
886704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jchar* GetCharArrayElements(jcharArray array, jboolean* isCopy)
887704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetCharArrayElements(this, array, isCopy); }
888704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jshort* GetShortArrayElements(jshortArray array, jboolean* isCopy)
889704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetShortArrayElements(this, array, isCopy); }
890704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint* GetIntArrayElements(jintArray array, jboolean* isCopy)
891704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetIntArrayElements(this, array, isCopy); }
892704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong* GetLongArrayElements(jlongArray array, jboolean* isCopy)
893704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetLongArrayElements(this, array, isCopy); }
894704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jfloat* GetFloatArrayElements(jfloatArray array, jboolean* isCopy)
895704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetFloatArrayElements(this, array, isCopy); }
896704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jdouble* GetDoubleArrayElements(jdoubleArray array, jboolean* isCopy)
897704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetDoubleArrayElements(this, array, isCopy); }
898704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
899704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseBooleanArrayElements(jbooleanArray array, jboolean* elems,
900704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
901704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseBooleanArrayElements(this, array, elems, mode); }
902704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseByteArrayElements(jbyteArray array, jbyte* elems,
903704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
904704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseByteArrayElements(this, array, elems, mode); }
905704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseCharArrayElements(jcharArray array, jchar* elems,
906704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
907704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseCharArrayElements(this, array, elems, mode); }
908704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseShortArrayElements(jshortArray array, jshort* elems,
909704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
910704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseShortArrayElements(this, array, elems, mode); }
911704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseIntArrayElements(jintArray array, jint* elems,
912704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
913704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseIntArrayElements(this, array, elems, mode); }
914704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseLongArrayElements(jlongArray array, jlong* elems,
915704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
916704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseLongArrayElements(this, array, elems, mode); }
917704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseFloatArrayElements(jfloatArray array, jfloat* elems,
918704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
919704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseFloatArrayElements(this, array, elems, mode); }
920704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseDoubleArrayElements(jdoubleArray array, jdouble* elems,
921704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint mode)
922704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseDoubleArrayElements(this, array, elems, mode); }
923704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
924704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
925704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jboolean* buf)
926704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetBooleanArrayRegion(this, array, start, len, buf); }
927704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetByteArrayRegion(jbyteArray array, jsize start, jsize len,
928704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jbyte* buf)
929704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetByteArrayRegion(this, array, start, len, buf); }
930704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetCharArrayRegion(jcharArray array, jsize start, jsize len,
931704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jchar* buf)
932704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetCharArrayRegion(this, array, start, len, buf); }
933704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetShortArrayRegion(jshortArray array, jsize start, jsize len,
934704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jshort* buf)
935704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetShortArrayRegion(this, array, start, len, buf); }
936704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetIntArrayRegion(jintArray array, jsize start, jsize len,
937704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint* buf)
938704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetIntArrayRegion(this, array, start, len, buf); }
939704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetLongArrayRegion(jlongArray array, jsize start, jsize len,
940704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jlong* buf)
941704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetLongArrayRegion(this, array, start, len, buf); }
942704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
943704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jfloat* buf)
944704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetFloatArrayRegion(this, array, start, len, buf); }
945704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
946704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jdouble* buf)
947704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetDoubleArrayRegion(this, array, start, len, buf); }
948704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
949704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
950704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jboolean* buf)
951704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetBooleanArrayRegion(this, array, start, len, buf); }
952704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
953704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jbyte* buf)
954704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetByteArrayRegion(this, array, start, len, buf); }
955704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
956704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jchar* buf)
957704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetCharArrayRegion(this, array, start, len, buf); }
958704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
959704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jshort* buf)
960704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetShortArrayRegion(this, array, start, len, buf); }
961704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetIntArrayRegion(jintArray array, jsize start, jsize len,
962704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jint* buf)
963704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetIntArrayRegion(this, array, start, len, buf); }
964704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
965704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jlong* buf)
966704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetLongArrayRegion(this, array, start, len, buf); }
967704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
968704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jfloat* buf)
969704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetFloatArrayRegion(this, array, start, len, buf); }
970704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
971704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        const jdouble* buf)
972704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->SetDoubleArrayRegion(this, array, start, len, buf); }
973704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
974704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint RegisterNatives(jclass clazz, const JNINativeMethod* methods,
975704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner        jint nMethods)
976704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->RegisterNatives(this, clazz, methods, nMethods); }
977704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
978704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint UnregisterNatives(jclass clazz)
979704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->UnregisterNatives(this, clazz); }
980704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
981704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint MonitorEnter(jobject obj)
982704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->MonitorEnter(this, obj); }
983704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
984704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint MonitorExit(jobject obj)
985704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->MonitorExit(this, obj); }
986704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
987704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint GetJavaVM(JavaVM** vm)
988704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetJavaVM(this, vm); }
989704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
990704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetStringRegion(jstring str, jsize start, jsize len, jchar* buf)
991704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->GetStringRegion(this, str, start, len, buf); }
992704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
993704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void GetStringUTFRegion(jstring str, jsize start, jsize len, char* buf)
994704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStringUTFRegion(this, str, start, len, buf); }
995704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
996704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy)
997704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetPrimitiveArrayCritical(this, array, isCopy); }
998704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
999704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode)
1000704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleasePrimitiveArrayCritical(this, array, carray, mode); }
1001704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1002704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const jchar* GetStringCritical(jstring string, jboolean* isCopy)
1003704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetStringCritical(this, string, isCopy); }
1004704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1005704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void ReleaseStringCritical(jstring string, const jchar* carray)
1006704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->ReleaseStringCritical(this, string, carray); }
1007704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1008704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jweak NewWeakGlobalRef(jobject obj)
1009704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewWeakGlobalRef(this, obj); }
1010704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1011704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void DeleteWeakGlobalRef(jweak obj)
1012704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { functions->DeleteWeakGlobalRef(this, obj); }
1013704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1014704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean ExceptionCheck()
1015704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->ExceptionCheck(this); }
1016704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1017704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject NewDirectByteBuffer(void* address, jlong capacity)
1018704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->NewDirectByteBuffer(this, address, capacity); }
1019704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1020704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void* GetDirectBufferAddress(jobject buf)
1021704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetDirectBufferAddress(this, buf); }
1022704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1023704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jlong GetDirectBufferCapacity(jobject buf)
1024704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetDirectBufferCapacity(this, buf); }
1025704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1026704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    /* added in JNI 1.6 */
1027704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobjectRefType GetObjectRefType(jobject obj)
1028704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetObjectRefType(this, obj); }
1029704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif /*__cplusplus*/
1030704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner};
1031704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1032704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1033704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
1034704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * JNI invocation interface.
1035704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
1036704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct JNIInvokeInterface {
1037704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       reserved0;
1038704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       reserved1;
1039704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       reserved2;
1040704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1041704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*DestroyJavaVM)(JavaVM*);
1042704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*AttachCurrentThread)(JavaVM*, JNIEnv**, void*);
1043704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*DetachCurrentThread)(JavaVM*);
1044704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*GetEnv)(JavaVM*, void**, jint);
1045704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        (*AttachCurrentThreadAsDaemon)(JavaVM*, JNIEnv**, void*);
1046704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner};
1047704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1048704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
1049704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * C++ version.
1050704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
1051704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct _JavaVM {
1052704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const struct JNIInvokeInterface* functions;
1053704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1054704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#if defined(__cplusplus)
1055704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint DestroyJavaVM()
1056704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->DestroyJavaVM(this); }
1057704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint AttachCurrentThread(JNIEnv** p_env, void* thr_args)
1058704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->AttachCurrentThread(this, p_env, thr_args); }
1059704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint DetachCurrentThread()
1060704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->DetachCurrentThread(this); }
1061704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint GetEnv(void** env, jint version)
1062704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->GetEnv(this, env, version); }
1063704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint AttachCurrentThreadAsDaemon(JNIEnv** p_env, void* thr_args)
1064704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    { return functions->AttachCurrentThreadAsDaemon(this, p_env, thr_args); }
1065704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif /*__cplusplus*/
1066704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner};
1067704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1068704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerstruct JavaVMAttachArgs {
1069704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        version;    /* must be >= JNI_VERSION_1_2 */
1070704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const char* name;       /* NULL or name of thread as modified UTF-8 str */
1071704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jobject     group;      /* global ref of a ThreadGroup object, or NULL */
1072704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner};
1073704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef struct JavaVMAttachArgs JavaVMAttachArgs;
1074704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1075704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
1076704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * JNI 1.2+ initialization.  (As of 1.6, the pre-1.2 structures are no
1077704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * longer supported.)
1078704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
1079704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef struct JavaVMOption {
1080704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    const char* optionString;
1081704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    void*       extraInfo;
1082704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner} JavaVMOption;
1083704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1084704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnertypedef struct JavaVMInitArgs {
1085704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        version;    /* use JNI_VERSION_1_2 or later */
1086704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1087704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jint        nOptions;
1088704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    JavaVMOption* options;
1089704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner    jboolean    ignoreUnrecognized;
1090704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner} JavaVMInitArgs;
1091704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1092704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#ifdef __cplusplus
1093704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerextern "C" {
1094704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif
1095704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
1096704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * VM initialization functions.
1097704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner *
1098704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Note these are the only symbols exported for JNI by the VM.
1099704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
1100704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerjint JNI_GetDefaultJavaVMInitArgs(void*);
1101704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerjint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);
1102704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerjint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);
1103704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1104704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
1105704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Prototypes for functions exported by loadable shared libs.  These are
1106704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * called by JNI, not provided by JNI.
1107704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
1108704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnerjint JNI_OnLoad(JavaVM* vm, void* reserved);
1109704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turnervoid JNI_OnUnload(JavaVM* vm, void* reserved);
1110704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1111704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#ifdef __cplusplus
1112704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner}
1113704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif
1114704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1115704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1116704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/*
1117704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner * Manifest constants.
1118704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner */
1119704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_FALSE   0
1120704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_TRUE    1
1121704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1122704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_VERSION_1_1 0x00010001
1123704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_VERSION_1_2 0x00010002
1124704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_VERSION_1_4 0x00010004
1125704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_VERSION_1_6 0x00010006
1126704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1127704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_OK          (0)         /* no error */
1128704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_ERR         (-1)        /* generic error */
1129704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_EDETACHED   (-2)        /* thread detached from the VM */
1130704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_EVERSION    (-3)        /* JNI version error */
1131704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1132704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_COMMIT      1           /* copy content, do not free buffer */
1133704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNI_ABORT       2           /* free buffer w/o copying back */
1134704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1135704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner/* need these for Windows-aware headers */
1136704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNIIMPORT
1137704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNIEXPORT
1138704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#define JNICALL
1139704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner
1140704614245e9bed17f68574bc9686c02c43923292David 'Digit' Turner#endif /*_JNI_H*/
1141