1b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
2b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Copyright 2006 The Android Open Source Project
3b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare *
4b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * JNI specification, as defined by Sun:
5b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html
6b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare *
7b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Everything here is expected to be VM-neutral.
8b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
9b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#ifndef _JNI_H
10b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define _JNI_H
11b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
12b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#include <stdarg.h>
13b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
14b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
15b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Primitive types that match up with Java equivalents.
16b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
17b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#ifdef HAVE_INTTYPES_H
18b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare# include <inttypes.h>      /* C99 */
19b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef uint8_t         jboolean;       /* unsigned 8 bits */
20b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef int8_t          jbyte;          /* signed 8 bits */
21b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef uint16_t        jchar;          /* unsigned 16 bits */
22b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef int16_t         jshort;         /* signed 16 bits */
23b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef int32_t         jint;           /* signed 32 bits */
24b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef int64_t         jlong;          /* signed 64 bits */
25b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef float           jfloat;         /* 32-bit IEEE 754 */
26b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef double          jdouble;        /* 64-bit IEEE 754 */
27b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#else
28b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef unsigned char   jboolean;       /* unsigned 8 bits */
29b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef signed char     jbyte;          /* signed 8 bits */
30b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef unsigned short  jchar;          /* unsigned 16 bits */
31b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef short           jshort;         /* signed 16 bits */
32b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef int             jint;           /* signed 32 bits */
33b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef long long       jlong;          /* signed 64 bits */
34b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef float           jfloat;         /* 32-bit IEEE 754 */
35b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef double          jdouble;        /* 64-bit IEEE 754 */
36b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif
37b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
38b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/* "cardinal indices and sizes" */
39b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jint            jsize;
40b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
41b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#ifdef __cplusplus
42b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
43b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Reference types, in C++
44b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
45b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jobject {};
46b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jclass : public _jobject {};
47b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jstring : public _jobject {};
48b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jarray : public _jobject {};
49b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jobjectArray : public _jarray {};
50b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jbooleanArray : public _jarray {};
51b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jbyteArray : public _jarray {};
52b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jcharArray : public _jarray {};
53b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jshortArray : public _jarray {};
54b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jintArray : public _jarray {};
55b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jlongArray : public _jarray {};
56b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jfloatArray : public _jarray {};
57b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jdoubleArray : public _jarray {};
58b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareclass _jthrowable : public _jobject {};
59b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
60b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jobject*       jobject;
61b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jclass*        jclass;
62b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jstring*       jstring;
63b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jarray*        jarray;
64b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jobjectArray*  jobjectArray;
65b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jbooleanArray* jbooleanArray;
66b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jbyteArray*    jbyteArray;
67b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jcharArray*    jcharArray;
68b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jshortArray*   jshortArray;
69b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jintArray*     jintArray;
70b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jlongArray*    jlongArray;
71b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jfloatArray*   jfloatArray;
72b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jdoubleArray*  jdoubleArray;
73b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jthrowable*    jthrowable;
74b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _jobject*       jweak;
75b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
76b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
77b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#else /* not __cplusplus */
78b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
79b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
80b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Reference types, in C.
81b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
82b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef void*           jobject;
83b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jobject         jclass;
84b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jobject         jstring;
85b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jobject         jarray;
86b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jobjectArray;
87b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jbooleanArray;
88b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jbyteArray;
89b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jcharArray;
90b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jshortArray;
91b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jintArray;
92b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jlongArray;
93b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jfloatArray;
94b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jarray          jdoubleArray;
95b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jobject         jthrowable;
96b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef jobject         jweak;
97b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
98b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif /* not __cplusplus */
99b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
100b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct _jfieldID;                       /* opaque structure */
101b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef struct _jfieldID* jfieldID;     /* field IDs */
102b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
103b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct _jmethodID;                      /* opaque structure */
104b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef struct _jmethodID* jmethodID;   /* method IDs */
105b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
106b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct JNIInvokeInterface;
107b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
108b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef union jvalue {
109b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    z;
110b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       b;
111b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       c;
112b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      s;
113b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        i;
114b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       j;
115b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      f;
116b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     d;
117b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     l;
118b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare} jvalue;
119b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
120b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef enum jobjectRefType {
121b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    JNIInvalidRefType = 0,
122b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    JNILocalRefType = 1,
123b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    JNIGlobalRefType = 2,
124b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    JNIWeakGlobalRefType = 3
125b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare} jobjectRefType;
126b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
127b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef struct {
128b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const char* name;
129b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const char* signature;
130b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       fnPtr;
131b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare} JNINativeMethod;
132b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
133b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct _JNIEnv;
134b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct _JavaVM;
135b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef const struct JNINativeInterface* C_JNIEnv;
136b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
137b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#if defined(__cplusplus)
138b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _JNIEnv JNIEnv;
139b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef _JavaVM JavaVM;
140b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#else
141b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef const struct JNINativeInterface* JNIEnv;
142b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef const struct JNIInvokeInterface* JavaVM;
143b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif
144b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
145b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
146b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Table of interface function pointers.
147b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
148b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct JNINativeInterface {
149b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       reserved0;
150b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       reserved1;
151b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       reserved2;
152b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       reserved3;
153b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
154b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*GetVersion)(JNIEnv *);
155b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
156b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass      (*DefineClass)(JNIEnv*, const char*, jobject, const jbyte*,
157b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize);
158b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass      (*FindClass)(JNIEnv*, const char*);
159b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
160b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jmethodID   (*FromReflectedMethod)(JNIEnv*, jobject);
161b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfieldID    (*FromReflectedField)(JNIEnv*, jobject);
162b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    /* spec doesn't show jboolean parameter */
163b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*ToReflectedMethod)(JNIEnv*, jclass, jmethodID, jboolean);
164b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
165b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass      (*GetSuperclass)(JNIEnv*, jclass);
166b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*IsAssignableFrom)(JNIEnv*, jclass, jclass);
167b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
168b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    /* spec doesn't show jboolean parameter */
169b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*ToReflectedField)(JNIEnv*, jclass, jfieldID, jboolean);
170b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
171b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*Throw)(JNIEnv*, jthrowable);
172b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*ThrowNew)(JNIEnv *, jclass, const char *);
173b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jthrowable  (*ExceptionOccurred)(JNIEnv*);
174b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ExceptionDescribe)(JNIEnv*);
175b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ExceptionClear)(JNIEnv*);
176b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*FatalError)(JNIEnv*, const char*);
177b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
178b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*PushLocalFrame)(JNIEnv*, jint);
179b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*PopLocalFrame)(JNIEnv*, jobject);
180b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
181b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*NewGlobalRef)(JNIEnv*, jobject);
182b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*DeleteGlobalRef)(JNIEnv*, jobject);
183b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*DeleteLocalRef)(JNIEnv*, jobject);
184b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*IsSameObject)(JNIEnv*, jobject, jobject);
185b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
186b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*NewLocalRef)(JNIEnv*, jobject);
187b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*EnsureLocalCapacity)(JNIEnv*, jint);
188b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
189b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*AllocObject)(JNIEnv*, jclass);
190b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*NewObject)(JNIEnv*, jclass, jmethodID, ...);
191b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);
192b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*);
193b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
194b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass      (*GetObjectClass)(JNIEnv*, jobject);
195b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*IsInstanceOf)(JNIEnv*, jobject, jclass);
196b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
197b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
198b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
199b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);
200b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
201b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...);
202b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list);
203b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
204b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...);
205b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list);
206b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
207b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...);
208b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list);
209b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
210b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...);
211b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list);
212b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
213b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);
214b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list);
215b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
216b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...);
217b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list);
218b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
219b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...);
220b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list);
221b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
222b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...);
223b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list);
224b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
225b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
226b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list);
227b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
228b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
229b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass,
230b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
231b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass,
232b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
233b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass,
234b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
235b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass,
236b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
237b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass,
238b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                         jmethodID, va_list);
239b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass,
240b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                         jmethodID, jvalue*);
241b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass,
242b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
243b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass,
244b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
245b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass,
246b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
247b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass,
248b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
249b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass,
250b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
251b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass,
252b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
253b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass,
254b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
255b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass,
256b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
257b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass,
258b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
259b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass,
260b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
261b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass,
262b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
263b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass,
264b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
265b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass,
266b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
267b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass,
268b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
269b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass,
270b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
271b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass,
272b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
273b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass,
274b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
275b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass,
276b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
277b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass,
278b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
279b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass,
280b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
281b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass,
282b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
283b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass,
284b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, ...);
285b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass,
286b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, va_list);
287b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass,
288b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jmethodID, jvalue*);
289b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
290b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfieldID    (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);
291b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
292b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*GetObjectField)(JNIEnv*, jobject, jfieldID);
293b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*GetBooleanField)(JNIEnv*, jobject, jfieldID);
294b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*GetByteField)(JNIEnv*, jobject, jfieldID);
295b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*GetCharField)(JNIEnv*, jobject, jfieldID);
296b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*GetShortField)(JNIEnv*, jobject, jfieldID);
297b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*GetIntField)(JNIEnv*, jobject, jfieldID);
298b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*GetLongField)(JNIEnv*, jobject, jfieldID);
299b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*GetFloatField)(JNIEnv*, jobject, jfieldID);
300b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*GetDoubleField)(JNIEnv*, jobject, jfieldID);
301b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
302b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject);
303b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean);
304b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte);
305b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar);
306b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort);
307b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetIntField)(JNIEnv*, jobject, jfieldID, jint);
308b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong);
309b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat);
310b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble);
311b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
312b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jmethodID   (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);
313b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
314b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);
315b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list);
316b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
317b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);
318b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID,
319b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        va_list);
320b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID,
321b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jvalue*);
322b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...);
323b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list);
324b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
325b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...);
326b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list);
327b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
328b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...);
329b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list);
330b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
331b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...);
332b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list);
333b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
334b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...);
335b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list);
336b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
337b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...);
338b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list);
339b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
340b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...);
341b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list);
342b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
343b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...);
344b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);
345b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
346b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
347b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfieldID    (*GetStaticFieldID)(JNIEnv*, jclass, const char*,
348b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        const char*);
349b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
350b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID);
351b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*GetStaticBooleanField)(JNIEnv*, jclass, jfieldID);
352b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte       (*GetStaticByteField)(JNIEnv*, jclass, jfieldID);
353b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar       (*GetStaticCharField)(JNIEnv*, jclass, jfieldID);
354b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort      (*GetStaticShortField)(JNIEnv*, jclass, jfieldID);
355b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*GetStaticIntField)(JNIEnv*, jclass, jfieldID);
356b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*GetStaticLongField)(JNIEnv*, jclass, jfieldID);
357b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat      (*GetStaticFloatField)(JNIEnv*, jclass, jfieldID);
358b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble     (*GetStaticDoubleField)(JNIEnv*, jclass, jfieldID);
359b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
360b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticObjectField)(JNIEnv*, jclass, jfieldID, jobject);
361b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticBooleanField)(JNIEnv*, jclass, jfieldID, jboolean);
362b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticByteField)(JNIEnv*, jclass, jfieldID, jbyte);
363b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticCharField)(JNIEnv*, jclass, jfieldID, jchar);
364b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticShortField)(JNIEnv*, jclass, jfieldID, jshort);
365b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticIntField)(JNIEnv*, jclass, jfieldID, jint);
366b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticLongField)(JNIEnv*, jclass, jfieldID, jlong);
367b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticFloatField)(JNIEnv*, jclass, jfieldID, jfloat);
368b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetStaticDoubleField)(JNIEnv*, jclass, jfieldID, jdouble);
369b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
370b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jstring     (*NewString)(JNIEnv*, const jchar*, jsize);
371b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jsize       (*GetStringLength)(JNIEnv*, jstring);
372b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);
373b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);
374b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jstring     (*NewStringUTF)(JNIEnv*, const char*);
375b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jsize       (*GetStringUTFLength)(JNIEnv*, jstring);
376b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    /* JNI spec says this returns const jbyte*, but that's inconsistent */
377b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
378b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);
379b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jsize       (*GetArrayLength)(JNIEnv*, jarray);
380b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobjectArray (*NewObjectArray)(JNIEnv*, jsize, jclass, jobject);
381b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize);
382b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject);
383b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
384b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize);
385b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyteArray    (*NewByteArray)(JNIEnv*, jsize);
386b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jcharArray    (*NewCharArray)(JNIEnv*, jsize);
387b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshortArray   (*NewShortArray)(JNIEnv*, jsize);
388b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jintArray     (*NewIntArray)(JNIEnv*, jsize);
389b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlongArray    (*NewLongArray)(JNIEnv*, jsize);
390b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloatArray   (*NewFloatArray)(JNIEnv*, jsize);
391b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdoubleArray  (*NewDoubleArray)(JNIEnv*, jsize);
392b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
393b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean*   (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*);
394b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte*      (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*);
395b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar*      (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*);
396b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort*     (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*);
397b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint*       (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
398b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong*      (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*);
399b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat*     (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*);
400b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble*    (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*);
401b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
402b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray,
403b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jboolean*, jint);
404b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray,
405b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jbyte*, jint);
406b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseCharArrayElements)(JNIEnv*, jcharArray,
407b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jchar*, jint);
408b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseShortArrayElements)(JNIEnv*, jshortArray,
409b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jshort*, jint);
410b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseIntArrayElements)(JNIEnv*, jintArray,
411b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jint*, jint);
412b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseLongArrayElements)(JNIEnv*, jlongArray,
413b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jlong*, jint);
414b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray,
415b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jfloat*, jint);
416b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray,
417b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jdouble*, jint);
418b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
419b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
420b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jboolean*);
421b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetByteArrayRegion)(JNIEnv*, jbyteArray,
422b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jbyte*);
423b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetCharArrayRegion)(JNIEnv*, jcharArray,
424b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jchar*);
425b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetShortArrayRegion)(JNIEnv*, jshortArray,
426b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jshort*);
427b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetIntArrayRegion)(JNIEnv*, jintArray,
428b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jint*);
429b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetLongArrayRegion)(JNIEnv*, jlongArray,
430b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jlong*);
431b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetFloatArrayRegion)(JNIEnv*, jfloatArray,
432b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jfloat*);
433b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
434b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, jdouble*);
435b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
436b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    /* spec shows these without const; some jni.h do, some don't */
437b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
438b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jboolean*);
439b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetByteArrayRegion)(JNIEnv*, jbyteArray,
440b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jbyte*);
441b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetCharArrayRegion)(JNIEnv*, jcharArray,
442b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jchar*);
443b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetShortArrayRegion)(JNIEnv*, jshortArray,
444b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jshort*);
445b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetIntArrayRegion)(JNIEnv*, jintArray,
446b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jint*);
447b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetLongArrayRegion)(JNIEnv*, jlongArray,
448b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jlong*);
449b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetFloatArrayRegion)(JNIEnv*, jfloatArray,
450b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jfloat*);
451b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
452b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jsize, jsize, const jdouble*);
453b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
454b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,
455b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                        jint);
456b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*UnregisterNatives)(JNIEnv*, jclass);
457b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*MonitorEnter)(JNIEnv*, jobject);
458b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*MonitorExit)(JNIEnv*, jobject);
459b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*GetJavaVM)(JNIEnv*, JavaVM**);
460b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
461b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetStringRegion)(JNIEnv*, jstring, jsize, jsize, jchar*);
462b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*GetStringUTFRegion)(JNIEnv*, jstring, jsize, jsize, char*);
463b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
464b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       (*GetPrimitiveArrayCritical)(JNIEnv*, jarray, jboolean*);
465b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleasePrimitiveArrayCritical)(JNIEnv*, jarray, void*, jint);
466b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
467b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const jchar* (*GetStringCritical)(JNIEnv*, jstring, jboolean*);
468b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*ReleaseStringCritical)(JNIEnv*, jstring, const jchar*);
469b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
470b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jweak       (*NewWeakGlobalRef)(JNIEnv*, jobject);
471b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void        (*DeleteWeakGlobalRef)(JNIEnv*, jweak);
472b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
473b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    (*ExceptionCheck)(JNIEnv*);
474b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
475b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     (*NewDirectByteBuffer)(JNIEnv*, void*, jlong);
476b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       (*GetDirectBufferAddress)(JNIEnv*, jobject);
477b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong       (*GetDirectBufferCapacity)(JNIEnv*, jobject);
478b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
479b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    /* added in JNI 1.6 */
480b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobjectRefType (*GetObjectRefType)(JNIEnv*, jobject);
481b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare};
482b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
483b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
484b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * C++ object wrapper.
485b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare *
486b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * This is usually overlaid on a C struct whose first element is a
487b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * JNINativeInterface*.  We rely somewhat on compiler behavior.
488b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
489b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct _JNIEnv {
490b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    /* do not rename this; it does not seem to be entirely opaque */
491b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const struct JNINativeInterface* functions;
492b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
493b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#if defined(__cplusplus)
494b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
495b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint GetVersion()
496b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetVersion(this); }
497b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
498b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass DefineClass(const char *name, jobject loader, const jbyte* buf,
499b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jsize bufLen)
500b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->DefineClass(this, name, loader, buf, bufLen); }
501b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
502b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass FindClass(const char* name)
503b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->FindClass(this, name); }
504b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
505b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jmethodID FromReflectedMethod(jobject method)
506b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->FromReflectedMethod(this, method); }
507b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
508b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfieldID FromReflectedField(jobject field)
509b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->FromReflectedField(this, field); }
510b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
511b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic)
512b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->ToReflectedMethod(this, cls, methodID, isStatic); }
513b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
514b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass GetSuperclass(jclass clazz)
515b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetSuperclass(this, clazz); }
516b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
517b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean IsAssignableFrom(jclass clazz1, jclass clazz2)
518b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->IsAssignableFrom(this, clazz1, clazz2); }
519b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
520b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic)
521b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->ToReflectedField(this, cls, fieldID, isStatic); }
522b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
523b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint Throw(jthrowable obj)
524b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->Throw(this, obj); }
525b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
526b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint ThrowNew(jclass clazz, const char* message)
527b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->ThrowNew(this, clazz, message); }
528b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
529b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jthrowable ExceptionOccurred()
530b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->ExceptionOccurred(this); }
531b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
532b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ExceptionDescribe()
533b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ExceptionDescribe(this); }
534b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
535b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ExceptionClear()
536b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ExceptionClear(this); }
537b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
538b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void FatalError(const char* msg)
539b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->FatalError(this, msg); }
540b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
541b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint PushLocalFrame(jint capacity)
542b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->PushLocalFrame(this, capacity); }
543b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
544b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject PopLocalFrame(jobject result)
545b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->PopLocalFrame(this, result); }
546b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
547b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject NewGlobalRef(jobject obj)
548b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewGlobalRef(this, obj); }
549b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
550b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void DeleteGlobalRef(jobject globalRef)
551b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->DeleteGlobalRef(this, globalRef); }
552b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
553b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void DeleteLocalRef(jobject localRef)
554b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->DeleteLocalRef(this, localRef); }
555b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
556b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean IsSameObject(jobject ref1, jobject ref2)
557b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->IsSameObject(this, ref1, ref2); }
558b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
559b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject NewLocalRef(jobject ref)
560b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewLocalRef(this, ref); }
561b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
562b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint EnsureLocalCapacity(jint capacity)
563b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->EnsureLocalCapacity(this, capacity); }
564b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
565b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject AllocObject(jclass clazz)
566b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->AllocObject(this, clazz); }
567b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
568b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject NewObject(jclass clazz, jmethodID methodID, ...)
569b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    {
570b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args;
571b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_start(args, methodID);
572b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jobject result = functions->NewObjectV(this, clazz, methodID, args);
573b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_end(args);
574b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        return result;
575b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    }
576b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
577b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject NewObjectV(jclass clazz, jmethodID methodID, va_list args)
578b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewObjectV(this, clazz, methodID, args); }
579b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
580b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject NewObjectA(jclass clazz, jmethodID methodID, jvalue* args)
581b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewObjectA(this, clazz, methodID, args); }
582b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
583b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jclass GetObjectClass(jobject obj)
584b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetObjectClass(this, obj); }
585b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
586b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean IsInstanceOf(jobject obj, jclass clazz)
587b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->IsInstanceOf(this, obj, clazz); }
588b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
589b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
590b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetMethodID(this, clazz, name, sig); }
591b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
592b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_TYPE_METHOD(_jtype, _jname)                                    \
593b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype Call##_jname##Method(jobject obj, jmethodID methodID, ...)       \
594b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    {                                                                       \
595b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        _jtype result;                                                      \
596b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args;                                                       \
597b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_start(args, methodID);                                           \
598b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        result = functions->Call##_jname##MethodV(this, obj, methodID,      \
599b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                    args);                                                  \
600b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_end(args);                                                       \
601b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        return result;                                                      \
602b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    }
603b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_TYPE_METHODV(_jtype, _jname)                                   \
604b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype Call##_jname##MethodV(jobject obj, jmethodID methodID,           \
605b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args)                                                       \
606b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->Call##_jname##MethodV(this, obj, methodID, args); }
607b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_TYPE_METHODA(_jtype, _jname)                                   \
608b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype Call##_jname##MethodA(jobject obj, jmethodID methodID,           \
609b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jvalue* args)                                                       \
610b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->Call##_jname##MethodA(this, obj, methodID, args); }
611b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
612b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_TYPE(_jtype, _jname)                                           \
613b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE_METHOD(_jtype, _jname)                                        \
614b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE_METHODV(_jtype, _jname)                                       \
615b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE_METHODA(_jtype, _jname)
616b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
617b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jobject, Object)
618b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jboolean, Boolean)
619b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jbyte, Byte)
620b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jchar, Char)
621b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jshort, Short)
622b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jint, Int)
623b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jlong, Long)
624b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jfloat, Float)
625b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_TYPE(jdouble, Double)
626b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
627b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallVoidMethod(jobject obj, jmethodID methodID, ...)
628b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    {
629b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args;
630b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_start(args, methodID);
631b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        functions->CallVoidMethodV(this, obj, methodID, args);
632b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_end(args);
633b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    }
634b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallVoidMethodV(jobject obj, jmethodID methodID, va_list args)
635b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->CallVoidMethodV(this, obj, methodID, args); }
636b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallVoidMethodA(jobject obj, jmethodID methodID, jvalue* args)
637b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->CallVoidMethodA(this, obj, methodID, args); }
638b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
639b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                            \
640b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype CallNonvirtual##_jname##Method(jobject obj, jclass clazz,        \
641b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jmethodID methodID, ...)                                            \
642b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    {                                                                       \
643b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        _jtype result;                                                      \
644b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args;                                                       \
645b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_start(args, methodID);                                           \
646b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        result = functions->CallNonvirtual##_jname##MethodV(this, obj,      \
647b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                    clazz, methodID, args);                                 \
648b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_end(args);                                                       \
649b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        return result;                                                      \
650b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    }
651b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                           \
652b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype CallNonvirtual##_jname##MethodV(jobject obj, jclass clazz,       \
653b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jmethodID methodID, va_list args)                                   \
654b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->CallNonvirtual##_jname##MethodV(this, obj, clazz,   \
655b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        methodID, args); }
656b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)                           \
657b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype CallNonvirtual##_jname##MethodA(jobject obj, jclass clazz,       \
658b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jmethodID methodID, jvalue* args)                                   \
659b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->CallNonvirtual##_jname##MethodA(this, obj, clazz,   \
660b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        methodID, args); }
661b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
662b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_NONVIRT_TYPE(_jtype, _jname)                                   \
663b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                                \
664b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                               \
665b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)
666b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
667b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jobject, Object)
668b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jboolean, Boolean)
669b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jbyte, Byte)
670b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jchar, Char)
671b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jshort, Short)
672b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jint, Int)
673b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jlong, Long)
674b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jfloat, Float)
675b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_NONVIRT_TYPE(jdouble, Double)
676b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
677b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
678b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jmethodID methodID, ...)
679b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    {
680b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args;
681b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_start(args, methodID);
682b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args);
683b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_end(args);
684b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    }
685b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
686b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jmethodID methodID, va_list args)
687b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args); }
688b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
689b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jmethodID methodID, jvalue* args)
690b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->CallNonvirtualVoidMethodA(this, obj, clazz, methodID, args); }
691b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
692b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfieldID GetFieldID(jclass clazz, const char* name, const char* sig)
693b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetFieldID(this, clazz, name, sig); }
694b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
695b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject GetObjectField(jobject obj, jfieldID fieldID)
696b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetObjectField(this, obj, fieldID); }
697b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean GetBooleanField(jobject obj, jfieldID fieldID)
698b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetBooleanField(this, obj, fieldID); }
699b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte GetByteField(jobject obj, jfieldID fieldID)
700b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetByteField(this, obj, fieldID); }
701b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar GetCharField(jobject obj, jfieldID fieldID)
702b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetCharField(this, obj, fieldID); }
703b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort GetShortField(jobject obj, jfieldID fieldID)
704b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetShortField(this, obj, fieldID); }
705b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint GetIntField(jobject obj, jfieldID fieldID)
706b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetIntField(this, obj, fieldID); }
707b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong GetLongField(jobject obj, jfieldID fieldID)
708b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetLongField(this, obj, fieldID); }
709b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat GetFloatField(jobject obj, jfieldID fieldID)
710b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetFloatField(this, obj, fieldID); }
711b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble GetDoubleField(jobject obj, jfieldID fieldID)
712b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetDoubleField(this, obj, fieldID); }
713b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
714b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetObjectField(jobject obj, jfieldID fieldID, jobject value)
715b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetObjectField(this, obj, fieldID, value); }
716b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetBooleanField(jobject obj, jfieldID fieldID, jboolean value)
717b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetBooleanField(this, obj, fieldID, value); }
718b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetByteField(jobject obj, jfieldID fieldID, jbyte value)
719b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetByteField(this, obj, fieldID, value); }
720b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetCharField(jobject obj, jfieldID fieldID, jchar value)
721b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetCharField(this, obj, fieldID, value); }
722b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetShortField(jobject obj, jfieldID fieldID, jshort value)
723b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetShortField(this, obj, fieldID, value); }
724b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetIntField(jobject obj, jfieldID fieldID, jint value)
725b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetIntField(this, obj, fieldID, value); }
726b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetLongField(jobject obj, jfieldID fieldID, jlong value)
727b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetLongField(this, obj, fieldID, value); }
728b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetFloatField(jobject obj, jfieldID fieldID, jfloat value)
729b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetFloatField(this, obj, fieldID, value); }
730b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetDoubleField(jobject obj, jfieldID fieldID, jdouble value)
731b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetDoubleField(this, obj, fieldID, value); }
732b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
733b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jmethodID GetStaticMethodID(jclass clazz, const char* name, const char* sig)
734b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticMethodID(this, clazz, name, sig); }
735b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
736b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_STATIC_TYPE_METHOD(_jtype, _jname)                             \
737b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype CallStatic##_jname##Method(jclass clazz, jmethodID methodID,     \
738b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        ...)                                                                \
739b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    {                                                                       \
740b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        _jtype result;                                                      \
741b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args;                                                       \
742b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_start(args, methodID);                                           \
743b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        result = functions->CallStatic##_jname##MethodV(this, clazz,        \
744b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare                    methodID, args);                                        \
745b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_end(args);                                                       \
746b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        return result;                                                      \
747b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    }
748b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_STATIC_TYPE_METHODV(_jtype, _jname)                            \
749b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype CallStatic##_jname##MethodV(jclass clazz, jmethodID methodID,    \
750b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args)                                                       \
751b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->CallStatic##_jname##MethodV(this, clazz, methodID,  \
752b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        args); }
753b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_STATIC_TYPE_METHODA(_jtype, _jname)                            \
754b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    _jtype CallStatic##_jname##MethodA(jclass clazz, jmethodID methodID,    \
755b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jvalue* args)                                                       \
756b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->CallStatic##_jname##MethodA(this, clazz, methodID,  \
757b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        args); }
758b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
759b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define CALL_STATIC_TYPE(_jtype, _jname)                                    \
760b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE_METHOD(_jtype, _jname)                                 \
761b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE_METHODV(_jtype, _jname)                                \
762b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE_METHODA(_jtype, _jname)
763b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
764b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jobject, Object)
765b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jboolean, Boolean)
766b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jbyte, Byte)
767b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jchar, Char)
768b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jshort, Short)
769b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jint, Int)
770b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jlong, Long)
771b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jfloat, Float)
772b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    CALL_STATIC_TYPE(jdouble, Double)
773b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
774b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...)
775b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    {
776b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_list args;
777b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_start(args, methodID);
778b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        functions->CallStaticVoidMethodV(this, clazz, methodID, args);
779b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        va_end(args);
780b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    }
781b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallStaticVoidMethodV(jclass clazz, jmethodID methodID, va_list args)
782b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->CallStaticVoidMethodV(this, clazz, methodID, args); }
783b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void CallStaticVoidMethodA(jclass clazz, jmethodID methodID, jvalue* args)
784b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->CallStaticVoidMethodA(this, clazz, methodID, args); }
785b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
786b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfieldID GetStaticFieldID(jclass clazz, const char* name, const char* sig)
787b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticFieldID(this, clazz, name, sig); }
788b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
789b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject GetStaticObjectField(jclass clazz, jfieldID fieldID)
790b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticObjectField(this, clazz, fieldID); }
791b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID)
792b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticBooleanField(this, clazz, fieldID); }
793b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte GetStaticByteField(jclass clazz, jfieldID fieldID)
794b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticByteField(this, clazz, fieldID); }
795b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar GetStaticCharField(jclass clazz, jfieldID fieldID)
796b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticCharField(this, clazz, fieldID); }
797b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort GetStaticShortField(jclass clazz, jfieldID fieldID)
798b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticShortField(this, clazz, fieldID); }
799b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint GetStaticIntField(jclass clazz, jfieldID fieldID)
800b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticIntField(this, clazz, fieldID); }
801b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong GetStaticLongField(jclass clazz, jfieldID fieldID)
802b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticLongField(this, clazz, fieldID); }
803b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID)
804b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticFloatField(this, clazz, fieldID); }
805b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID)
806b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStaticDoubleField(this, clazz, fieldID); }
807b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
808b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticObjectField(jclass clazz, jfieldID fieldID, jobject value)
809b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticObjectField(this, clazz, fieldID, value); }
810b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticBooleanField(jclass clazz, jfieldID fieldID, jboolean value)
811b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticBooleanField(this, clazz, fieldID, value); }
812b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticByteField(jclass clazz, jfieldID fieldID, jbyte value)
813b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticByteField(this, clazz, fieldID, value); }
814b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticCharField(jclass clazz, jfieldID fieldID, jchar value)
815b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticCharField(this, clazz, fieldID, value); }
816b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticShortField(jclass clazz, jfieldID fieldID, jshort value)
817b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticShortField(this, clazz, fieldID, value); }
818b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticIntField(jclass clazz, jfieldID fieldID, jint value)
819b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticIntField(this, clazz, fieldID, value); }
820b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticLongField(jclass clazz, jfieldID fieldID, jlong value)
821b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticLongField(this, clazz, fieldID, value); }
822b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticFloatField(jclass clazz, jfieldID fieldID, jfloat value)
823b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticFloatField(this, clazz, fieldID, value); }
824b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetStaticDoubleField(jclass clazz, jfieldID fieldID, jdouble value)
825b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetStaticDoubleField(this, clazz, fieldID, value); }
826b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
827b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jstring NewString(const jchar* unicodeChars, jsize len)
828b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewString(this, unicodeChars, len); }
829b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
830b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jsize GetStringLength(jstring string)
831b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStringLength(this, string); }
832b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
833b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const jchar* GetStringChars(jstring string, jboolean* isCopy)
834b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStringChars(this, string, isCopy); }
835b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
836b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseStringChars(jstring string, const jchar* chars)
837b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseStringChars(this, string, chars); }
838b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
839b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jstring NewStringUTF(const char* bytes)
840b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewStringUTF(this, bytes); }
841b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
842b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jsize GetStringUTFLength(jstring string)
843b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStringUTFLength(this, string); }
844b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
845b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const char* GetStringUTFChars(jstring string, jboolean* isCopy)
846b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStringUTFChars(this, string, isCopy); }
847b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
848b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseStringUTFChars(jstring string, const char* utf)
849b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseStringUTFChars(this, string, utf); }
850b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
851b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jsize GetArrayLength(jarray array)
852b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetArrayLength(this, array); }
853b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
854b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobjectArray NewObjectArray(jsize length, jclass elementClass,
855b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jobject initialElement)
856b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewObjectArray(this, length, elementClass,
857b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        initialElement); }
858b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
859b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject GetObjectArrayElement(jobjectArray array, jsize index)
860b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetObjectArrayElement(this, array, index); }
861b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
862b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetObjectArrayElement(jobjectArray array, jsize index, jobject value)
863b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetObjectArrayElement(this, array, index, value); }
864b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
865b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbooleanArray NewBooleanArray(jsize length)
866b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewBooleanArray(this, length); }
867b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyteArray NewByteArray(jsize length)
868b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewByteArray(this, length); }
869b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jcharArray NewCharArray(jsize length)
870b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewCharArray(this, length); }
871b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshortArray NewShortArray(jsize length)
872b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewShortArray(this, length); }
873b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jintArray NewIntArray(jsize length)
874b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewIntArray(this, length); }
875b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlongArray NewLongArray(jsize length)
876b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewLongArray(this, length); }
877b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloatArray NewFloatArray(jsize length)
878b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewFloatArray(this, length); }
879b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdoubleArray NewDoubleArray(jsize length)
880b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewDoubleArray(this, length); }
881b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
882b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean* GetBooleanArrayElements(jbooleanArray array, jboolean* isCopy)
883b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetBooleanArrayElements(this, array, isCopy); }
884b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jbyte* GetByteArrayElements(jbyteArray array, jboolean* isCopy)
885b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetByteArrayElements(this, array, isCopy); }
886b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jchar* GetCharArrayElements(jcharArray array, jboolean* isCopy)
887b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetCharArrayElements(this, array, isCopy); }
888b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jshort* GetShortArrayElements(jshortArray array, jboolean* isCopy)
889b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetShortArrayElements(this, array, isCopy); }
890b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint* GetIntArrayElements(jintArray array, jboolean* isCopy)
891b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetIntArrayElements(this, array, isCopy); }
892b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong* GetLongArrayElements(jlongArray array, jboolean* isCopy)
893b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetLongArrayElements(this, array, isCopy); }
894b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jfloat* GetFloatArrayElements(jfloatArray array, jboolean* isCopy)
895b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetFloatArrayElements(this, array, isCopy); }
896b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jdouble* GetDoubleArrayElements(jdoubleArray array, jboolean* isCopy)
897b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetDoubleArrayElements(this, array, isCopy); }
898b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
899b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseBooleanArrayElements(jbooleanArray array, jboolean* elems,
900b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
901b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseBooleanArrayElements(this, array, elems, mode); }
902b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseByteArrayElements(jbyteArray array, jbyte* elems,
903b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
904b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseByteArrayElements(this, array, elems, mode); }
905b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseCharArrayElements(jcharArray array, jchar* elems,
906b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
907b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseCharArrayElements(this, array, elems, mode); }
908b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseShortArrayElements(jshortArray array, jshort* elems,
909b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
910b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseShortArrayElements(this, array, elems, mode); }
911b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseIntArrayElements(jintArray array, jint* elems,
912b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
913b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseIntArrayElements(this, array, elems, mode); }
914b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseLongArrayElements(jlongArray array, jlong* elems,
915b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
916b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseLongArrayElements(this, array, elems, mode); }
917b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseFloatArrayElements(jfloatArray array, jfloat* elems,
918b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
919b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseFloatArrayElements(this, array, elems, mode); }
920b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseDoubleArrayElements(jdoubleArray array, jdouble* elems,
921b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint mode)
922b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseDoubleArrayElements(this, array, elems, mode); }
923b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
924b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
925b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jboolean* buf)
926b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetBooleanArrayRegion(this, array, start, len, buf); }
927b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetByteArrayRegion(jbyteArray array, jsize start, jsize len,
928b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jbyte* buf)
929b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetByteArrayRegion(this, array, start, len, buf); }
930b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetCharArrayRegion(jcharArray array, jsize start, jsize len,
931b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jchar* buf)
932b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetCharArrayRegion(this, array, start, len, buf); }
933b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetShortArrayRegion(jshortArray array, jsize start, jsize len,
934b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jshort* buf)
935b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetShortArrayRegion(this, array, start, len, buf); }
936b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetIntArrayRegion(jintArray array, jsize start, jsize len,
937b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint* buf)
938b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetIntArrayRegion(this, array, start, len, buf); }
939b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetLongArrayRegion(jlongArray array, jsize start, jsize len,
940b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jlong* buf)
941b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetLongArrayRegion(this, array, start, len, buf); }
942b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
943b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jfloat* buf)
944b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetFloatArrayRegion(this, array, start, len, buf); }
945b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
946b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jdouble* buf)
947b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetDoubleArrayRegion(this, array, start, len, buf); }
948b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
949b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
950b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jboolean* buf)
951b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetBooleanArrayRegion(this, array, start, len, buf); }
952b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
953b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jbyte* buf)
954b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetByteArrayRegion(this, array, start, len, buf); }
955b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
956b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jchar* buf)
957b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetCharArrayRegion(this, array, start, len, buf); }
958b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
959b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jshort* buf)
960b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetShortArrayRegion(this, array, start, len, buf); }
961b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetIntArrayRegion(jintArray array, jsize start, jsize len,
962b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jint* buf)
963b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetIntArrayRegion(this, array, start, len, buf); }
964b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
965b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jlong* buf)
966b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetLongArrayRegion(this, array, start, len, buf); }
967b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
968b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jfloat* buf)
969b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetFloatArrayRegion(this, array, start, len, buf); }
970b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
971b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        const jdouble* buf)
972b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->SetDoubleArrayRegion(this, array, start, len, buf); }
973b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
974b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint RegisterNatives(jclass clazz, const JNINativeMethod* methods,
975b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare        jint nMethods)
976b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->RegisterNatives(this, clazz, methods, nMethods); }
977b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
978b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint UnregisterNatives(jclass clazz)
979b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->UnregisterNatives(this, clazz); }
980b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
981b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint MonitorEnter(jobject obj)
982b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->MonitorEnter(this, obj); }
983b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
984b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint MonitorExit(jobject obj)
985b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->MonitorExit(this, obj); }
986b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
987b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint GetJavaVM(JavaVM** vm)
988b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetJavaVM(this, vm); }
989b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
990b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetStringRegion(jstring str, jsize start, jsize len, jchar* buf)
991b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->GetStringRegion(this, str, start, len, buf); }
992b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
993b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void GetStringUTFRegion(jstring str, jsize start, jsize len, char* buf)
994b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStringUTFRegion(this, str, start, len, buf); }
995b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
996b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy)
997b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetPrimitiveArrayCritical(this, array, isCopy); }
998b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
999b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode)
1000b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleasePrimitiveArrayCritical(this, array, carray, mode); }
1001b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1002b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const jchar* GetStringCritical(jstring string, jboolean* isCopy)
1003b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetStringCritical(this, string, isCopy); }
1004b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1005b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void ReleaseStringCritical(jstring string, const jchar* carray)
1006b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->ReleaseStringCritical(this, string, carray); }
1007b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1008b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jweak NewWeakGlobalRef(jobject obj)
1009b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewWeakGlobalRef(this, obj); }
1010b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1011b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void DeleteWeakGlobalRef(jweak obj)
1012b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { functions->DeleteWeakGlobalRef(this, obj); }
1013b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1014b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean ExceptionCheck()
1015b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->ExceptionCheck(this); }
1016b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1017b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject NewDirectByteBuffer(void* address, jlong capacity)
1018b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->NewDirectByteBuffer(this, address, capacity); }
1019b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1020b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void* GetDirectBufferAddress(jobject buf)
1021b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetDirectBufferAddress(this, buf); }
1022b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1023b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jlong GetDirectBufferCapacity(jobject buf)
1024b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetDirectBufferCapacity(this, buf); }
1025b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1026b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    /* added in JNI 1.6 */
1027b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobjectRefType GetObjectRefType(jobject obj)
1028b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetObjectRefType(this, obj); }
1029b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif /*__cplusplus*/
1030b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare};
1031b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1032b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1033b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
1034b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * JNI invocation interface.
1035b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
1036b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct JNIInvokeInterface {
1037b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       reserved0;
1038b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       reserved1;
1039b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       reserved2;
1040b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1041b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*DestroyJavaVM)(JavaVM*);
1042b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*AttachCurrentThread)(JavaVM*, JNIEnv**, void*);
1043b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*DetachCurrentThread)(JavaVM*);
1044b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*GetEnv)(JavaVM*, void**, jint);
1045b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        (*AttachCurrentThreadAsDaemon)(JavaVM*, JNIEnv**, void*);
1046b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare};
1047b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1048b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
1049b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * C++ version.
1050b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
1051b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct _JavaVM {
1052b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const struct JNIInvokeInterface* functions;
1053b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1054b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#if defined(__cplusplus)
1055b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint DestroyJavaVM()
1056b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->DestroyJavaVM(this); }
1057b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint AttachCurrentThread(JNIEnv** p_env, void* thr_args)
1058b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->AttachCurrentThread(this, p_env, thr_args); }
1059b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint DetachCurrentThread()
1060b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->DetachCurrentThread(this); }
1061b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint GetEnv(void** env, jint version)
1062b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->GetEnv(this, env, version); }
1063b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint AttachCurrentThreadAsDaemon(JNIEnv** p_env, void* thr_args)
1064b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    { return functions->AttachCurrentThreadAsDaemon(this, p_env, thr_args); }
1065b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif /*__cplusplus*/
1066b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare};
1067b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1068b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearestruct JavaVMAttachArgs {
1069b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        version;    /* must be >= JNI_VERSION_1_2 */
1070b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const char* name;       /* NULL or name of thread as modified UTF-8 str */
1071b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jobject     group;      /* global ref of a ThreadGroup object, or NULL */
1072b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare};
1073b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef struct JavaVMAttachArgs JavaVMAttachArgs;
1074b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1075b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
1076b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * JNI 1.2+ initialization.  (As of 1.6, the pre-1.2 structures are no
1077b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * longer supported.)
1078b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
1079b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef struct JavaVMOption {
1080b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    const char* optionString;
1081b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    void*       extraInfo;
1082b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare} JavaVMOption;
1083b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1084b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearetypedef struct JavaVMInitArgs {
1085b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        version;    /* use JNI_VERSION_1_2 or later */
1086b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1087b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jint        nOptions;
1088b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    JavaVMOption* options;
1089b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare    jboolean    ignoreUnrecognized;
1090b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare} JavaVMInitArgs;
1091b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1092b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#ifdef __cplusplus
1093b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beareextern "C" {
1094b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif
1095b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
1096b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * VM initialization functions.
1097b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare *
1098b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Note these are the only symbols exported for JNI by the VM.
1099b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
1100b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearejint JNI_GetDefaultJavaVMInitArgs(void*);
1101b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearejint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);
1102b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearejint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);
1103b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1104b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
1105b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Prototypes for functions exported by loadable shared libs.  These are
1106b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * called by JNI, not provided by JNI.
1107b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
1108b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearejint JNI_OnLoad(JavaVM* vm, void* reserved);
1109b17fe090db1a34bac2c56bef93925fc893300e70Bruce Bearevoid JNI_OnUnload(JavaVM* vm, void* reserved);
1110b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1111b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#ifdef __cplusplus
1112b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare}
1113b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif
1114b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1115b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1116b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/*
1117b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare * Manifest constants.
1118b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare */
1119b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_FALSE   0
1120b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_TRUE    1
1121b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1122b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_VERSION_1_1 0x00010001
1123b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_VERSION_1_2 0x00010002
1124b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_VERSION_1_4 0x00010004
1125b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_VERSION_1_6 0x00010006
1126b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1127b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_OK          (0)         /* no error */
1128b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_ERR         (-1)        /* generic error */
1129b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_EDETACHED   (-2)        /* thread detached from the VM */
1130b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_EVERSION    (-3)        /* JNI version error */
1131b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1132b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_COMMIT      1           /* copy content, do not free buffer */
1133b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNI_ABORT       2           /* free buffer w/o copying back */
1134b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1135b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare/* need these for Windows-aware headers */
1136b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNIIMPORT
1137b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNIEXPORT
1138b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#define JNICALL
1139b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare
1140b17fe090db1a34bac2c56bef93925fc893300e70Bruce Beare#endif /*_JNI_H*/
1141