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