116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Copyright (C) 2006 The Android Open Source Project
316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang *
416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Licensed under the Apache License, Version 2.0 (the "License");
516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * you may not use this file except in compliance with the License.
616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * You may obtain a copy of the License at
716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang *
816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang *      http://www.apache.org/licenses/LICENSE-2.0
916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang *
1016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Unless required by applicable law or agreed to in writing, software
1116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * distributed under the License is distributed on an "AS IS" BASIS,
1216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * See the License for the specific language governing permissions and
1416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * limitations under the License.
1516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
1616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
1716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
1816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * JNI specification, as defined by Sun:
1916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html
2016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang *
2116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Everything here is expected to be VM-neutral.
2216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
2316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
2416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#ifndef JNI_H_
2516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_H_
2616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
2716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#include <stdarg.h>
2816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
2916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
3016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Primitive types that match up with Java equivalents.
3116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
3216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#ifdef HAVE_INTTYPES_H
3316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang# include <inttypes.h>      /* C99 */
3416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef uint8_t         jboolean;       /* unsigned 8 bits */
3516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef int8_t          jbyte;          /* signed 8 bits */
3616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef uint16_t        jchar;          /* unsigned 16 bits */
3716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef int16_t         jshort;         /* signed 16 bits */
3816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef int32_t         jint;           /* signed 32 bits */
3916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef int64_t         jlong;          /* signed 64 bits */
4016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef float           jfloat;         /* 32-bit IEEE 754 */
4116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef double          jdouble;        /* 64-bit IEEE 754 */
4216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#else
4316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef unsigned char   jboolean;       /* unsigned 8 bits */
4416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef signed char     jbyte;          /* signed 8 bits */
4516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef unsigned short  jchar;          /* unsigned 16 bits */
4616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef short           jshort;         /* signed 16 bits */
4716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef int             jint;           /* signed 32 bits */
4816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef long long       jlong;          /* signed 64 bits */
4916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef float           jfloat;         /* 32-bit IEEE 754 */
5016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef double          jdouble;        /* 64-bit IEEE 754 */
5116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif
5216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
5316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/* "cardinal indices and sizes" */
5416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jint            jsize;
5516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
5616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#ifdef __cplusplus
5716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
5816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Reference types, in C++
5916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
6016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jobject {};
6116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jclass : public _jobject {};
6216559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jstring : public _jobject {};
6316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jarray : public _jobject {};
6416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jobjectArray : public _jarray {};
6516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jbooleanArray : public _jarray {};
6616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jbyteArray : public _jarray {};
6716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jcharArray : public _jarray {};
6816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jshortArray : public _jarray {};
6916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jintArray : public _jarray {};
7016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jlongArray : public _jarray {};
7116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jfloatArray : public _jarray {};
7216559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jdoubleArray : public _jarray {};
7316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangclass _jthrowable : public _jobject {};
7416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
7516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jobject*       jobject;
7616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jclass*        jclass;
7716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jstring*       jstring;
7816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jarray*        jarray;
7916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jobjectArray*  jobjectArray;
8016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jbooleanArray* jbooleanArray;
8116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jbyteArray*    jbyteArray;
8216559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jcharArray*    jcharArray;
8316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jshortArray*   jshortArray;
8416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jintArray*     jintArray;
8516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jlongArray*    jlongArray;
8616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jfloatArray*   jfloatArray;
8716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jdoubleArray*  jdoubleArray;
8816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jthrowable*    jthrowable;
8916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _jobject*       jweak;
9016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
9116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
9216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#else /* not __cplusplus */
9316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
9416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
9516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Reference types, in C.
9616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
9716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef void*           jobject;
9816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jobject         jclass;
9916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jobject         jstring;
10016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jobject         jarray;
10116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jobjectArray;
10216559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jbooleanArray;
10316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jbyteArray;
10416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jcharArray;
10516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jshortArray;
10616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jintArray;
10716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jlongArray;
10816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jfloatArray;
10916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jarray          jdoubleArray;
11016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jobject         jthrowable;
11116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef jobject         jweak;
11216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
11316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif /* not __cplusplus */
11416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
11516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct _jfieldID;                       /* opaque structure */
11616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef struct _jfieldID* jfieldID;     /* field IDs */
11716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
11816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct _jmethodID;                      /* opaque structure */
11916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef struct _jmethodID* jmethodID;   /* method IDs */
12016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
12116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct JNIInvokeInterface;
12216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
12316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef union jvalue {
12416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    z;
12516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       b;
12616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       c;
12716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      s;
12816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        i;
12916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       j;
13016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      f;
13116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     d;
13216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     l;
13316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang} jvalue;
13416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
13516559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef enum jobjectRefType {
13616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    JNIInvalidRefType = 0,
13716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    JNILocalRefType = 1,
13816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    JNIGlobalRefType = 2,
13916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    JNIWeakGlobalRefType = 3
14016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang} jobjectRefType;
14116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
14216559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef struct {
14316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const char* name;
14416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const char* signature;
14516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       fnPtr;
14616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang} JNINativeMethod;
14716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
14816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct _JNIEnv;
14916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct _JavaVM;
15016559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef const struct JNINativeInterface* C_JNIEnv;
15116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
15216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#if defined(__cplusplus)
15316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _JNIEnv JNIEnv;
15416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef _JavaVM JavaVM;
15516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#else
15616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef const struct JNINativeInterface* JNIEnv;
15716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef const struct JNIInvokeInterface* JavaVM;
15816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif
15916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
16016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
16116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Table of interface function pointers.
16216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
16316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct JNINativeInterface {
16416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       reserved0;
16516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       reserved1;
16616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       reserved2;
16716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       reserved3;
16816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
16916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*GetVersion)(JNIEnv *);
17016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
17116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass      (*DefineClass)(JNIEnv*, const char*, jobject, const jbyte*,
17216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize);
17316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass      (*FindClass)(JNIEnv*, const char*);
17416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
17516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jmethodID   (*FromReflectedMethod)(JNIEnv*, jobject);
17616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfieldID    (*FromReflectedField)(JNIEnv*, jobject);
17716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    /* spec doesn't show jboolean parameter */
17816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*ToReflectedMethod)(JNIEnv*, jclass, jmethodID, jboolean);
17916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
18016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass      (*GetSuperclass)(JNIEnv*, jclass);
18116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*IsAssignableFrom)(JNIEnv*, jclass, jclass);
18216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
18316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    /* spec doesn't show jboolean parameter */
18416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*ToReflectedField)(JNIEnv*, jclass, jfieldID, jboolean);
18516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
18616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*Throw)(JNIEnv*, jthrowable);
18716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*ThrowNew)(JNIEnv *, jclass, const char *);
18816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jthrowable  (*ExceptionOccurred)(JNIEnv*);
18916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ExceptionDescribe)(JNIEnv*);
19016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ExceptionClear)(JNIEnv*);
19116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*FatalError)(JNIEnv*, const char*);
19216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
19316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*PushLocalFrame)(JNIEnv*, jint);
19416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*PopLocalFrame)(JNIEnv*, jobject);
19516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
19616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*NewGlobalRef)(JNIEnv*, jobject);
19716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*DeleteGlobalRef)(JNIEnv*, jobject);
19816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*DeleteLocalRef)(JNIEnv*, jobject);
19916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*IsSameObject)(JNIEnv*, jobject, jobject);
20016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
20116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*NewLocalRef)(JNIEnv*, jobject);
20216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*EnsureLocalCapacity)(JNIEnv*, jint);
20316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
20416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*AllocObject)(JNIEnv*, jclass);
20516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*NewObject)(JNIEnv*, jclass, jmethodID, ...);
20616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list);
20716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*);
20816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
20916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass      (*GetObjectClass)(JNIEnv*, jobject);
21016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*IsInstanceOf)(JNIEnv*, jobject, jclass);
21116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jmethodID   (*GetMethodID)(JNIEnv*, jclass, const char*, const char*);
21216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
21316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
21416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list);
21516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
21616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...);
21716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list);
21816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
21916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...);
22016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list);
22116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
22216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...);
22316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list);
22416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
22516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...);
22616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list);
22716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
22816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...);
22916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list);
23016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
23116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...);
23216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list);
23316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
23416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...);
23516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list);
23616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
23716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...);
23816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list);
23916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
24016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...);
24116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list);
24216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*);
24316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
24416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass,
24516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
24616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass,
24716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
24816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass,
24916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
25016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass,
25116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
25216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass,
25316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                         jmethodID, va_list);
25416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass,
25516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                         jmethodID, jvalue*);
25616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass,
25716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
25816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass,
25916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
26016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass,
26116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
26216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass,
26316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
26416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass,
26516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
26616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass,
26716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
26816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass,
26916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
27016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass,
27116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
27216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass,
27316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
27416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass,
27516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
27616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass,
27716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
27816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass,
27916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
28016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass,
28116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
28216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass,
28316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
28416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass,
28516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
28616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass,
28716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
28816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass,
28916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
29016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass,
29116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
29216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass,
29316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
29416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass,
29516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
29616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass,
29716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
29816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass,
29916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, ...);
30016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass,
30116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, va_list);
30216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass,
30316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jmethodID, jvalue*);
30416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
30516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfieldID    (*GetFieldID)(JNIEnv*, jclass, const char*, const char*);
30616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
30716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*GetObjectField)(JNIEnv*, jobject, jfieldID);
30816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*GetBooleanField)(JNIEnv*, jobject, jfieldID);
30916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*GetByteField)(JNIEnv*, jobject, jfieldID);
31016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*GetCharField)(JNIEnv*, jobject, jfieldID);
31116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*GetShortField)(JNIEnv*, jobject, jfieldID);
31216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*GetIntField)(JNIEnv*, jobject, jfieldID);
31316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*GetLongField)(JNIEnv*, jobject, jfieldID);
31416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*GetFloatField)(JNIEnv*, jobject, jfieldID);
31516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*GetDoubleField)(JNIEnv*, jobject, jfieldID);
31616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
31716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject);
31816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean);
31916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte);
32016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar);
32116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort);
32216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetIntField)(JNIEnv*, jobject, jfieldID, jint);
32316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong);
32416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat);
32516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble);
32616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
32716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jmethodID   (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*);
32816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
32916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);
33016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list);
33116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
33216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);
33316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID,
33416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        va_list);
33516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID,
33616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jvalue*);
33716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...);
33816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list);
33916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
34016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...);
34116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list);
34216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
34316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...);
34416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list);
34516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
34616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...);
34716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list);
34816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
34916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...);
35016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list);
35116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
35216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...);
35316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list);
35416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
35516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...);
35616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list);
35716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
35816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...);
35916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list);
36016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*);
36116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
36216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfieldID    (*GetStaticFieldID)(JNIEnv*, jclass, const char*,
36316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        const char*);
36416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
36516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID);
36616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*GetStaticBooleanField)(JNIEnv*, jclass, jfieldID);
36716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte       (*GetStaticByteField)(JNIEnv*, jclass, jfieldID);
36816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar       (*GetStaticCharField)(JNIEnv*, jclass, jfieldID);
36916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort      (*GetStaticShortField)(JNIEnv*, jclass, jfieldID);
37016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*GetStaticIntField)(JNIEnv*, jclass, jfieldID);
37116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*GetStaticLongField)(JNIEnv*, jclass, jfieldID);
37216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat      (*GetStaticFloatField)(JNIEnv*, jclass, jfieldID);
37316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble     (*GetStaticDoubleField)(JNIEnv*, jclass, jfieldID);
37416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
37516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticObjectField)(JNIEnv*, jclass, jfieldID, jobject);
37616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticBooleanField)(JNIEnv*, jclass, jfieldID, jboolean);
37716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticByteField)(JNIEnv*, jclass, jfieldID, jbyte);
37816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticCharField)(JNIEnv*, jclass, jfieldID, jchar);
37916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticShortField)(JNIEnv*, jclass, jfieldID, jshort);
38016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticIntField)(JNIEnv*, jclass, jfieldID, jint);
38116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticLongField)(JNIEnv*, jclass, jfieldID, jlong);
38216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticFloatField)(JNIEnv*, jclass, jfieldID, jfloat);
38316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetStaticDoubleField)(JNIEnv*, jclass, jfieldID, jdouble);
38416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
38516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jstring     (*NewString)(JNIEnv*, const jchar*, jsize);
38616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jsize       (*GetStringLength)(JNIEnv*, jstring);
38716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*);
38816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*);
38916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jstring     (*NewStringUTF)(JNIEnv*, const char*);
39016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jsize       (*GetStringUTFLength)(JNIEnv*, jstring);
39116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    /* JNI spec says this returns const jbyte*, but that's inconsistent */
39216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*);
39316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*);
39416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jsize       (*GetArrayLength)(JNIEnv*, jarray);
39516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobjectArray (*NewObjectArray)(JNIEnv*, jsize, jclass, jobject);
39616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize);
39716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject);
39816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
39916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize);
40016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyteArray    (*NewByteArray)(JNIEnv*, jsize);
40116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jcharArray    (*NewCharArray)(JNIEnv*, jsize);
40216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshortArray   (*NewShortArray)(JNIEnv*, jsize);
40316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jintArray     (*NewIntArray)(JNIEnv*, jsize);
40416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlongArray    (*NewLongArray)(JNIEnv*, jsize);
40516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloatArray   (*NewFloatArray)(JNIEnv*, jsize);
40616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdoubleArray  (*NewDoubleArray)(JNIEnv*, jsize);
40716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
40816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean*   (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*);
40916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte*      (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*);
41016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar*      (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*);
41116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort*     (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*);
41216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint*       (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*);
41316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong*      (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*);
41416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat*     (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*);
41516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble*    (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*);
41616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
41716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray,
41816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jboolean*, jint);
41916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray,
42016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jbyte*, jint);
42116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseCharArrayElements)(JNIEnv*, jcharArray,
42216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jchar*, jint);
42316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseShortArrayElements)(JNIEnv*, jshortArray,
42416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jshort*, jint);
42516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseIntArrayElements)(JNIEnv*, jintArray,
42616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jint*, jint);
42716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseLongArrayElements)(JNIEnv*, jlongArray,
42816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jlong*, jint);
42916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray,
43016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jfloat*, jint);
43116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray,
43216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jdouble*, jint);
43316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
43416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
43516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jboolean*);
43616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetByteArrayRegion)(JNIEnv*, jbyteArray,
43716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jbyte*);
43816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetCharArrayRegion)(JNIEnv*, jcharArray,
43916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jchar*);
44016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetShortArrayRegion)(JNIEnv*, jshortArray,
44116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jshort*);
44216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetIntArrayRegion)(JNIEnv*, jintArray,
44316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jint*);
44416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetLongArrayRegion)(JNIEnv*, jlongArray,
44516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jlong*);
44616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetFloatArrayRegion)(JNIEnv*, jfloatArray,
44716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jfloat*);
44816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
44916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, jdouble*);
45016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
45116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    /* spec shows these without const; some jni.h do, some don't */
45216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray,
45316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jboolean*);
45416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetByteArrayRegion)(JNIEnv*, jbyteArray,
45516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jbyte*);
45616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetCharArrayRegion)(JNIEnv*, jcharArray,
45716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jchar*);
45816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetShortArrayRegion)(JNIEnv*, jshortArray,
45916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jshort*);
46016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetIntArrayRegion)(JNIEnv*, jintArray,
46116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jint*);
46216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetLongArrayRegion)(JNIEnv*, jlongArray,
46316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jlong*);
46416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetFloatArrayRegion)(JNIEnv*, jfloatArray,
46516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jfloat*);
46616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray,
46716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jsize, jsize, const jdouble*);
46816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
46916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*,
47016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                        jint);
47116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*UnregisterNatives)(JNIEnv*, jclass);
47216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*MonitorEnter)(JNIEnv*, jobject);
47316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*MonitorExit)(JNIEnv*, jobject);
47416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*GetJavaVM)(JNIEnv*, JavaVM**);
47516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
47616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetStringRegion)(JNIEnv*, jstring, jsize, jsize, jchar*);
47716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*GetStringUTFRegion)(JNIEnv*, jstring, jsize, jsize, char*);
47816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
47916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       (*GetPrimitiveArrayCritical)(JNIEnv*, jarray, jboolean*);
48016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleasePrimitiveArrayCritical)(JNIEnv*, jarray, void*, jint);
48116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
48216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const jchar* (*GetStringCritical)(JNIEnv*, jstring, jboolean*);
48316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*ReleaseStringCritical)(JNIEnv*, jstring, const jchar*);
48416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
48516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jweak       (*NewWeakGlobalRef)(JNIEnv*, jobject);
48616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void        (*DeleteWeakGlobalRef)(JNIEnv*, jweak);
48716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
48816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    (*ExceptionCheck)(JNIEnv*);
48916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
49016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     (*NewDirectByteBuffer)(JNIEnv*, void*, jlong);
49116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       (*GetDirectBufferAddress)(JNIEnv*, jobject);
49216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong       (*GetDirectBufferCapacity)(JNIEnv*, jobject);
49316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
49416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    /* added in JNI 1.6 */
49516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobjectRefType (*GetObjectRefType)(JNIEnv*, jobject);
49616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang};
49716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
49816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
49916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * C++ object wrapper.
50016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang *
50116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * This is usually overlaid on a C struct whose first element is a
50216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * JNINativeInterface*.  We rely somewhat on compiler behavior.
50316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
50416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct _JNIEnv {
50516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    /* do not rename this; it does not seem to be entirely opaque */
50616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const struct JNINativeInterface* functions;
50716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
50816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#if defined(__cplusplus)
50916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
51016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint GetVersion()
51116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetVersion(this); }
51216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
51316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass DefineClass(const char *name, jobject loader, const jbyte* buf,
51416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jsize bufLen)
51516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->DefineClass(this, name, loader, buf, bufLen); }
51616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
51716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass FindClass(const char* name)
51816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->FindClass(this, name); }
51916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
52016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jmethodID FromReflectedMethod(jobject method)
52116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->FromReflectedMethod(this, method); }
52216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
52316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfieldID FromReflectedField(jobject field)
52416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->FromReflectedField(this, field); }
52516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
52616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic)
52716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->ToReflectedMethod(this, cls, methodID, isStatic); }
52816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
52916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass GetSuperclass(jclass clazz)
53016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetSuperclass(this, clazz); }
53116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
53216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean IsAssignableFrom(jclass clazz1, jclass clazz2)
53316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->IsAssignableFrom(this, clazz1, clazz2); }
53416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
53516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic)
53616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->ToReflectedField(this, cls, fieldID, isStatic); }
53716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
53816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint Throw(jthrowable obj)
53916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->Throw(this, obj); }
54016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
54116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint ThrowNew(jclass clazz, const char* message)
54216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->ThrowNew(this, clazz, message); }
54316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
54416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jthrowable ExceptionOccurred()
54516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->ExceptionOccurred(this); }
54616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
54716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ExceptionDescribe()
54816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ExceptionDescribe(this); }
54916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
55016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ExceptionClear()
55116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ExceptionClear(this); }
55216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
55316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void FatalError(const char* msg)
55416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->FatalError(this, msg); }
55516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
55616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint PushLocalFrame(jint capacity)
55716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->PushLocalFrame(this, capacity); }
55816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
55916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject PopLocalFrame(jobject result)
56016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->PopLocalFrame(this, result); }
56116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
56216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject NewGlobalRef(jobject obj)
56316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewGlobalRef(this, obj); }
56416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
56516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void DeleteGlobalRef(jobject globalRef)
56616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->DeleteGlobalRef(this, globalRef); }
56716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
56816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void DeleteLocalRef(jobject localRef)
56916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->DeleteLocalRef(this, localRef); }
57016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
57116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean IsSameObject(jobject ref1, jobject ref2)
57216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->IsSameObject(this, ref1, ref2); }
57316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
57416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject NewLocalRef(jobject ref)
57516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewLocalRef(this, ref); }
57616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
57716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint EnsureLocalCapacity(jint capacity)
57816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->EnsureLocalCapacity(this, capacity); }
57916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
58016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject AllocObject(jclass clazz)
58116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->AllocObject(this, clazz); }
58216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
58316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject NewObject(jclass clazz, jmethodID methodID, ...)
58416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    {
58516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args;
58616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_start(args, methodID);
58716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jobject result = functions->NewObjectV(this, clazz, methodID, args);
58816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_end(args);
58916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        return result;
59016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    }
59116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
59216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject NewObjectV(jclass clazz, jmethodID methodID, va_list args)
59316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewObjectV(this, clazz, methodID, args); }
59416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
59516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject NewObjectA(jclass clazz, jmethodID methodID, jvalue* args)
59616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewObjectA(this, clazz, methodID, args); }
59716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
59816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jclass GetObjectClass(jobject obj)
59916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetObjectClass(this, obj); }
60016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
60116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean IsInstanceOf(jobject obj, jclass clazz)
60216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->IsInstanceOf(this, obj, clazz); }
60316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
60416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jmethodID GetMethodID(jclass clazz, const char* name, const char* sig)
60516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetMethodID(this, clazz, name, sig); }
60616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
60716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_TYPE_METHOD(_jtype, _jname)                                    \
60816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype Call##_jname##Method(jobject obj, jmethodID methodID, ...)       \
60916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    {                                                                       \
61016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        _jtype result;                                                      \
61116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args;                                                       \
61216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_start(args, methodID);                                           \
61316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        result = functions->Call##_jname##MethodV(this, obj, methodID,      \
61416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                    args);                                                  \
61516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_end(args);                                                       \
61616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        return result;                                                      \
61716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    }
61816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_TYPE_METHODV(_jtype, _jname)                                   \
61916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype Call##_jname##MethodV(jobject obj, jmethodID methodID,           \
62016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args)                                                       \
62116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->Call##_jname##MethodV(this, obj, methodID, args); }
62216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_TYPE_METHODA(_jtype, _jname)                                   \
62316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype Call##_jname##MethodA(jobject obj, jmethodID methodID,           \
62416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jvalue* args)                                                       \
62516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->Call##_jname##MethodA(this, obj, methodID, args); }
62616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
62716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_TYPE(_jtype, _jname)                                           \
62816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE_METHOD(_jtype, _jname)                                        \
62916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE_METHODV(_jtype, _jname)                                       \
63016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE_METHODA(_jtype, _jname)
63116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
63216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jobject, Object)
63316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jboolean, Boolean)
63416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jbyte, Byte)
63516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jchar, Char)
63616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jshort, Short)
63716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jint, Int)
63816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jlong, Long)
63916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jfloat, Float)
64016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_TYPE(jdouble, Double)
64116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
64216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallVoidMethod(jobject obj, jmethodID methodID, ...)
64316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    {
64416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args;
64516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_start(args, methodID);
64616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        functions->CallVoidMethodV(this, obj, methodID, args);
64716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_end(args);
64816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    }
64916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallVoidMethodV(jobject obj, jmethodID methodID, va_list args)
65016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->CallVoidMethodV(this, obj, methodID, args); }
65116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallVoidMethodA(jobject obj, jmethodID methodID, jvalue* args)
65216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->CallVoidMethodA(this, obj, methodID, args); }
65316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
65416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                            \
65516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype CallNonvirtual##_jname##Method(jobject obj, jclass clazz,        \
65616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jmethodID methodID, ...)                                            \
65716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    {                                                                       \
65816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        _jtype result;                                                      \
65916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args;                                                       \
66016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_start(args, methodID);                                           \
66116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        result = functions->CallNonvirtual##_jname##MethodV(this, obj,      \
66216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                    clazz, methodID, args);                                 \
66316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_end(args);                                                       \
66416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        return result;                                                      \
66516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    }
66616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                           \
66716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype CallNonvirtual##_jname##MethodV(jobject obj, jclass clazz,       \
66816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jmethodID methodID, va_list args)                                   \
66916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->CallNonvirtual##_jname##MethodV(this, obj, clazz,   \
67016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        methodID, args); }
67116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)                           \
67216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype CallNonvirtual##_jname##MethodA(jobject obj, jclass clazz,       \
67316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jmethodID methodID, jvalue* args)                                   \
67416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->CallNonvirtual##_jname##MethodA(this, obj, clazz,   \
67516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        methodID, args); }
67616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
67716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_NONVIRT_TYPE(_jtype, _jname)                                   \
67816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE_METHOD(_jtype, _jname)                                \
67916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE_METHODV(_jtype, _jname)                               \
68016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE_METHODA(_jtype, _jname)
68116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
68216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jobject, Object)
68316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jboolean, Boolean)
68416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jbyte, Byte)
68516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jchar, Char)
68616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jshort, Short)
68716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jint, Int)
68816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jlong, Long)
68916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jfloat, Float)
69016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_NONVIRT_TYPE(jdouble, Double)
69116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
69216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
69316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jmethodID methodID, ...)
69416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    {
69516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args;
69616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_start(args, methodID);
69716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args);
69816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_end(args);
69916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    }
70016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
70116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jmethodID methodID, va_list args)
70216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args); }
70316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
70416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jmethodID methodID, jvalue* args)
70516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->CallNonvirtualVoidMethodA(this, obj, clazz, methodID, args); }
70616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
70716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfieldID GetFieldID(jclass clazz, const char* name, const char* sig)
70816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetFieldID(this, clazz, name, sig); }
70916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
71016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject GetObjectField(jobject obj, jfieldID fieldID)
71116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetObjectField(this, obj, fieldID); }
71216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean GetBooleanField(jobject obj, jfieldID fieldID)
71316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetBooleanField(this, obj, fieldID); }
71416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte GetByteField(jobject obj, jfieldID fieldID)
71516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetByteField(this, obj, fieldID); }
71616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar GetCharField(jobject obj, jfieldID fieldID)
71716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetCharField(this, obj, fieldID); }
71816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort GetShortField(jobject obj, jfieldID fieldID)
71916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetShortField(this, obj, fieldID); }
72016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint GetIntField(jobject obj, jfieldID fieldID)
72116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetIntField(this, obj, fieldID); }
72216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong GetLongField(jobject obj, jfieldID fieldID)
72316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetLongField(this, obj, fieldID); }
72416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat GetFloatField(jobject obj, jfieldID fieldID)
72516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetFloatField(this, obj, fieldID); }
72616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble GetDoubleField(jobject obj, jfieldID fieldID)
72716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetDoubleField(this, obj, fieldID); }
72816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
72916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetObjectField(jobject obj, jfieldID fieldID, jobject value)
73016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetObjectField(this, obj, fieldID, value); }
73116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetBooleanField(jobject obj, jfieldID fieldID, jboolean value)
73216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetBooleanField(this, obj, fieldID, value); }
73316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetByteField(jobject obj, jfieldID fieldID, jbyte value)
73416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetByteField(this, obj, fieldID, value); }
73516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetCharField(jobject obj, jfieldID fieldID, jchar value)
73616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetCharField(this, obj, fieldID, value); }
73716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetShortField(jobject obj, jfieldID fieldID, jshort value)
73816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetShortField(this, obj, fieldID, value); }
73916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetIntField(jobject obj, jfieldID fieldID, jint value)
74016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetIntField(this, obj, fieldID, value); }
74116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetLongField(jobject obj, jfieldID fieldID, jlong value)
74216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetLongField(this, obj, fieldID, value); }
74316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetFloatField(jobject obj, jfieldID fieldID, jfloat value)
74416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetFloatField(this, obj, fieldID, value); }
74516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetDoubleField(jobject obj, jfieldID fieldID, jdouble value)
74616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetDoubleField(this, obj, fieldID, value); }
74716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
74816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jmethodID GetStaticMethodID(jclass clazz, const char* name, const char* sig)
74916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticMethodID(this, clazz, name, sig); }
75016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
75116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_STATIC_TYPE_METHOD(_jtype, _jname)                             \
75216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype CallStatic##_jname##Method(jclass clazz, jmethodID methodID,     \
75316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        ...)                                                                \
75416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    {                                                                       \
75516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        _jtype result;                                                      \
75616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args;                                                       \
75716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_start(args, methodID);                                           \
75816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        result = functions->CallStatic##_jname##MethodV(this, clazz,        \
75916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang                    methodID, args);                                        \
76016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_end(args);                                                       \
76116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        return result;                                                      \
76216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    }
76316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_STATIC_TYPE_METHODV(_jtype, _jname)                            \
76416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype CallStatic##_jname##MethodV(jclass clazz, jmethodID methodID,    \
76516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args)                                                       \
76616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->CallStatic##_jname##MethodV(this, clazz, methodID,  \
76716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        args); }
76816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_STATIC_TYPE_METHODA(_jtype, _jname)                            \
76916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    _jtype CallStatic##_jname##MethodA(jclass clazz, jmethodID methodID,    \
77016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jvalue* args)                                                       \
77116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->CallStatic##_jname##MethodA(this, clazz, methodID,  \
77216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        args); }
77316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
77416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define CALL_STATIC_TYPE(_jtype, _jname)                                    \
77516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE_METHOD(_jtype, _jname)                                 \
77616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE_METHODV(_jtype, _jname)                                \
77716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE_METHODA(_jtype, _jname)
77816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
77916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jobject, Object)
78016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jboolean, Boolean)
78116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jbyte, Byte)
78216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jchar, Char)
78316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jshort, Short)
78416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jint, Int)
78516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jlong, Long)
78616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jfloat, Float)
78716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    CALL_STATIC_TYPE(jdouble, Double)
78816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
78916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...)
79016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    {
79116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_list args;
79216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_start(args, methodID);
79316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        functions->CallStaticVoidMethodV(this, clazz, methodID, args);
79416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        va_end(args);
79516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    }
79616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallStaticVoidMethodV(jclass clazz, jmethodID methodID, va_list args)
79716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->CallStaticVoidMethodV(this, clazz, methodID, args); }
79816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void CallStaticVoidMethodA(jclass clazz, jmethodID methodID, jvalue* args)
79916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->CallStaticVoidMethodA(this, clazz, methodID, args); }
80016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
80116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfieldID GetStaticFieldID(jclass clazz, const char* name, const char* sig)
80216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticFieldID(this, clazz, name, sig); }
80316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
80416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject GetStaticObjectField(jclass clazz, jfieldID fieldID)
80516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticObjectField(this, clazz, fieldID); }
80616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID)
80716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticBooleanField(this, clazz, fieldID); }
80816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte GetStaticByteField(jclass clazz, jfieldID fieldID)
80916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticByteField(this, clazz, fieldID); }
81016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar GetStaticCharField(jclass clazz, jfieldID fieldID)
81116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticCharField(this, clazz, fieldID); }
81216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort GetStaticShortField(jclass clazz, jfieldID fieldID)
81316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticShortField(this, clazz, fieldID); }
81416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint GetStaticIntField(jclass clazz, jfieldID fieldID)
81516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticIntField(this, clazz, fieldID); }
81616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong GetStaticLongField(jclass clazz, jfieldID fieldID)
81716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticLongField(this, clazz, fieldID); }
81816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID)
81916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticFloatField(this, clazz, fieldID); }
82016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID)
82116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStaticDoubleField(this, clazz, fieldID); }
82216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
82316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticObjectField(jclass clazz, jfieldID fieldID, jobject value)
82416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticObjectField(this, clazz, fieldID, value); }
82516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticBooleanField(jclass clazz, jfieldID fieldID, jboolean value)
82616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticBooleanField(this, clazz, fieldID, value); }
82716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticByteField(jclass clazz, jfieldID fieldID, jbyte value)
82816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticByteField(this, clazz, fieldID, value); }
82916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticCharField(jclass clazz, jfieldID fieldID, jchar value)
83016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticCharField(this, clazz, fieldID, value); }
83116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticShortField(jclass clazz, jfieldID fieldID, jshort value)
83216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticShortField(this, clazz, fieldID, value); }
83316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticIntField(jclass clazz, jfieldID fieldID, jint value)
83416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticIntField(this, clazz, fieldID, value); }
83516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticLongField(jclass clazz, jfieldID fieldID, jlong value)
83616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticLongField(this, clazz, fieldID, value); }
83716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticFloatField(jclass clazz, jfieldID fieldID, jfloat value)
83816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticFloatField(this, clazz, fieldID, value); }
83916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetStaticDoubleField(jclass clazz, jfieldID fieldID, jdouble value)
84016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetStaticDoubleField(this, clazz, fieldID, value); }
84116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
84216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jstring NewString(const jchar* unicodeChars, jsize len)
84316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewString(this, unicodeChars, len); }
84416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
84516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jsize GetStringLength(jstring string)
84616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStringLength(this, string); }
84716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
84816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const jchar* GetStringChars(jstring string, jboolean* isCopy)
84916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStringChars(this, string, isCopy); }
85016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
85116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseStringChars(jstring string, const jchar* chars)
85216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseStringChars(this, string, chars); }
85316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
85416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jstring NewStringUTF(const char* bytes)
85516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewStringUTF(this, bytes); }
85616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
85716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jsize GetStringUTFLength(jstring string)
85816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStringUTFLength(this, string); }
85916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
86016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const char* GetStringUTFChars(jstring string, jboolean* isCopy)
86116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStringUTFChars(this, string, isCopy); }
86216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
86316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseStringUTFChars(jstring string, const char* utf)
86416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseStringUTFChars(this, string, utf); }
86516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
86616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jsize GetArrayLength(jarray array)
86716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetArrayLength(this, array); }
86816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
86916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobjectArray NewObjectArray(jsize length, jclass elementClass,
87016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jobject initialElement)
87116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewObjectArray(this, length, elementClass,
87216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        initialElement); }
87316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
87416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject GetObjectArrayElement(jobjectArray array, jsize index)
87516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetObjectArrayElement(this, array, index); }
87616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
87716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetObjectArrayElement(jobjectArray array, jsize index, jobject value)
87816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetObjectArrayElement(this, array, index, value); }
87916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
88016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbooleanArray NewBooleanArray(jsize length)
88116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewBooleanArray(this, length); }
88216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyteArray NewByteArray(jsize length)
88316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewByteArray(this, length); }
88416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jcharArray NewCharArray(jsize length)
88516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewCharArray(this, length); }
88616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshortArray NewShortArray(jsize length)
88716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewShortArray(this, length); }
88816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jintArray NewIntArray(jsize length)
88916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewIntArray(this, length); }
89016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlongArray NewLongArray(jsize length)
89116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewLongArray(this, length); }
89216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloatArray NewFloatArray(jsize length)
89316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewFloatArray(this, length); }
89416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdoubleArray NewDoubleArray(jsize length)
89516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewDoubleArray(this, length); }
89616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
89716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean* GetBooleanArrayElements(jbooleanArray array, jboolean* isCopy)
89816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetBooleanArrayElements(this, array, isCopy); }
89916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jbyte* GetByteArrayElements(jbyteArray array, jboolean* isCopy)
90016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetByteArrayElements(this, array, isCopy); }
90116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jchar* GetCharArrayElements(jcharArray array, jboolean* isCopy)
90216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetCharArrayElements(this, array, isCopy); }
90316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jshort* GetShortArrayElements(jshortArray array, jboolean* isCopy)
90416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetShortArrayElements(this, array, isCopy); }
90516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint* GetIntArrayElements(jintArray array, jboolean* isCopy)
90616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetIntArrayElements(this, array, isCopy); }
90716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong* GetLongArrayElements(jlongArray array, jboolean* isCopy)
90816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetLongArrayElements(this, array, isCopy); }
90916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jfloat* GetFloatArrayElements(jfloatArray array, jboolean* isCopy)
91016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetFloatArrayElements(this, array, isCopy); }
91116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jdouble* GetDoubleArrayElements(jdoubleArray array, jboolean* isCopy)
91216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetDoubleArrayElements(this, array, isCopy); }
91316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
91416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseBooleanArrayElements(jbooleanArray array, jboolean* elems,
91516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
91616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseBooleanArrayElements(this, array, elems, mode); }
91716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseByteArrayElements(jbyteArray array, jbyte* elems,
91816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
91916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseByteArrayElements(this, array, elems, mode); }
92016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseCharArrayElements(jcharArray array, jchar* elems,
92116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
92216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseCharArrayElements(this, array, elems, mode); }
92316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseShortArrayElements(jshortArray array, jshort* elems,
92416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
92516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseShortArrayElements(this, array, elems, mode); }
92616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseIntArrayElements(jintArray array, jint* elems,
92716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
92816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseIntArrayElements(this, array, elems, mode); }
92916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseLongArrayElements(jlongArray array, jlong* elems,
93016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
93116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseLongArrayElements(this, array, elems, mode); }
93216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseFloatArrayElements(jfloatArray array, jfloat* elems,
93316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
93416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseFloatArrayElements(this, array, elems, mode); }
93516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseDoubleArrayElements(jdoubleArray array, jdouble* elems,
93616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint mode)
93716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseDoubleArrayElements(this, array, elems, mode); }
93816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
93916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
94016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jboolean* buf)
94116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetBooleanArrayRegion(this, array, start, len, buf); }
94216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetByteArrayRegion(jbyteArray array, jsize start, jsize len,
94316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jbyte* buf)
94416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetByteArrayRegion(this, array, start, len, buf); }
94516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetCharArrayRegion(jcharArray array, jsize start, jsize len,
94616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jchar* buf)
94716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetCharArrayRegion(this, array, start, len, buf); }
94816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetShortArrayRegion(jshortArray array, jsize start, jsize len,
94916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jshort* buf)
95016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetShortArrayRegion(this, array, start, len, buf); }
95116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetIntArrayRegion(jintArray array, jsize start, jsize len,
95216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint* buf)
95316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetIntArrayRegion(this, array, start, len, buf); }
95416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetLongArrayRegion(jlongArray array, jsize start, jsize len,
95516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jlong* buf)
95616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetLongArrayRegion(this, array, start, len, buf); }
95716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
95816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jfloat* buf)
95916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetFloatArrayRegion(this, array, start, len, buf); }
96016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
96116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jdouble* buf)
96216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetDoubleArrayRegion(this, array, start, len, buf); }
96316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
96416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
96516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jboolean* buf)
96616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetBooleanArrayRegion(this, array, start, len, buf); }
96716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
96816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jbyte* buf)
96916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetByteArrayRegion(this, array, start, len, buf); }
97016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
97116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jchar* buf)
97216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetCharArrayRegion(this, array, start, len, buf); }
97316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
97416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jshort* buf)
97516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetShortArrayRegion(this, array, start, len, buf); }
97616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetIntArrayRegion(jintArray array, jsize start, jsize len,
97716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jint* buf)
97816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetIntArrayRegion(this, array, start, len, buf); }
97916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
98016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jlong* buf)
98116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetLongArrayRegion(this, array, start, len, buf); }
98216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
98316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jfloat* buf)
98416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetFloatArrayRegion(this, array, start, len, buf); }
98516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
98616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        const jdouble* buf)
98716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->SetDoubleArrayRegion(this, array, start, len, buf); }
98816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
98916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint RegisterNatives(jclass clazz, const JNINativeMethod* methods,
99016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang        jint nMethods)
99116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->RegisterNatives(this, clazz, methods, nMethods); }
99216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
99316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint UnregisterNatives(jclass clazz)
99416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->UnregisterNatives(this, clazz); }
99516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
99616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint MonitorEnter(jobject obj)
99716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->MonitorEnter(this, obj); }
99816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
99916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint MonitorExit(jobject obj)
100016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->MonitorExit(this, obj); }
100116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
100216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint GetJavaVM(JavaVM** vm)
100316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetJavaVM(this, vm); }
100416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
100516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetStringRegion(jstring str, jsize start, jsize len, jchar* buf)
100616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->GetStringRegion(this, str, start, len, buf); }
100716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
100816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void GetStringUTFRegion(jstring str, jsize start, jsize len, char* buf)
100916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStringUTFRegion(this, str, start, len, buf); }
101016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
101116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy)
101216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetPrimitiveArrayCritical(this, array, isCopy); }
101316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
101416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode)
101516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleasePrimitiveArrayCritical(this, array, carray, mode); }
101616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
101716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const jchar* GetStringCritical(jstring string, jboolean* isCopy)
101816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetStringCritical(this, string, isCopy); }
101916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
102016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void ReleaseStringCritical(jstring string, const jchar* carray)
102116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->ReleaseStringCritical(this, string, carray); }
102216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
102316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jweak NewWeakGlobalRef(jobject obj)
102416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewWeakGlobalRef(this, obj); }
102516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
102616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void DeleteWeakGlobalRef(jweak obj)
102716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { functions->DeleteWeakGlobalRef(this, obj); }
102816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
102916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean ExceptionCheck()
103016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->ExceptionCheck(this); }
103116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
103216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject NewDirectByteBuffer(void* address, jlong capacity)
103316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->NewDirectByteBuffer(this, address, capacity); }
103416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
103516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void* GetDirectBufferAddress(jobject buf)
103616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetDirectBufferAddress(this, buf); }
103716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
103816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jlong GetDirectBufferCapacity(jobject buf)
103916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetDirectBufferCapacity(this, buf); }
104016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
104116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    /* added in JNI 1.6 */
104216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobjectRefType GetObjectRefType(jobject obj)
104316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetObjectRefType(this, obj); }
104416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif /*__cplusplus*/
104516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang};
104616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
104716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
104816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
104916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * JNI invocation interface.
105016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
105116559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct JNIInvokeInterface {
105216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       reserved0;
105316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       reserved1;
105416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       reserved2;
105516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
105616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*DestroyJavaVM)(JavaVM*);
105716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*AttachCurrentThread)(JavaVM*, JNIEnv**, void*);
105816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*DetachCurrentThread)(JavaVM*);
105916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*GetEnv)(JavaVM*, void**, jint);
106016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        (*AttachCurrentThreadAsDaemon)(JavaVM*, JNIEnv**, void*);
106116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang};
106216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
106316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
106416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * C++ version.
106516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
106616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct _JavaVM {
106716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const struct JNIInvokeInterface* functions;
106816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
106916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#if defined(__cplusplus)
107016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint DestroyJavaVM()
107116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->DestroyJavaVM(this); }
107216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint AttachCurrentThread(JNIEnv** p_env, void* thr_args)
107316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->AttachCurrentThread(this, p_env, thr_args); }
107416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint DetachCurrentThread()
107516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->DetachCurrentThread(this); }
107616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint GetEnv(void** env, jint version)
107716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->GetEnv(this, env, version); }
107816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint AttachCurrentThreadAsDaemon(JNIEnv** p_env, void* thr_args)
107916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    { return functions->AttachCurrentThreadAsDaemon(this, p_env, thr_args); }
108016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif /*__cplusplus*/
108116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang};
108216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
108316559ae86908b88ba7644fac078f9168cbbcae10Ying Wangstruct JavaVMAttachArgs {
108416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        version;    /* must be >= JNI_VERSION_1_2 */
108516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const char* name;       /* NULL or name of thread as modified UTF-8 str */
108616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jobject     group;      /* global ref of a ThreadGroup object, or NULL */
108716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang};
108816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef struct JavaVMAttachArgs JavaVMAttachArgs;
108916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
109016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
109116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * JNI 1.2+ initialization.  (As of 1.6, the pre-1.2 structures are no
109216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * longer supported.)
109316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
109416559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef struct JavaVMOption {
109516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    const char* optionString;
109616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    void*       extraInfo;
109716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang} JavaVMOption;
109816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
109916559ae86908b88ba7644fac078f9168cbbcae10Ying Wangtypedef struct JavaVMInitArgs {
110016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        version;    /* use JNI_VERSION_1_2 or later */
110116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
110216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jint        nOptions;
110316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    JavaVMOption* options;
110416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang    jboolean    ignoreUnrecognized;
110516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang} JavaVMInitArgs;
110616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
110716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#ifdef __cplusplus
110816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangextern "C" {
110916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif
111016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
111116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * VM initialization functions.
111216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang *
111316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Note these are the only symbols exported for JNI by the VM.
111416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
111516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#if 0  /* In practice, these are not exported by the NDK so don't declare them */
111616559ae86908b88ba7644fac078f9168cbbcae10Ying Wangjint JNI_GetDefaultJavaVMInitArgs(void*);
111716559ae86908b88ba7644fac078f9168cbbcae10Ying Wangjint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*);
111816559ae86908b88ba7644fac078f9168cbbcae10Ying Wangjint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*);
111916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif
112016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
112116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNIIMPORT
112216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNIEXPORT  __attribute__ ((visibility ("default")))
112316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNICALL
112416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
112516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
112616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Prototypes for functions exported by loadable shared libs.  These are
112716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * called by JNI, not provided by JNI.
112816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
112916559ae86908b88ba7644fac078f9168cbbcae10Ying WangJNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved);
113016559ae86908b88ba7644fac078f9168cbbcae10Ying WangJNIEXPORT void JNI_OnUnload(JavaVM* vm, void* reserved);
113116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
113216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#ifdef __cplusplus
113316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang}
113416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif
113516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
113616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
113716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang/*
113816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang * Manifest constants.
113916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang */
114016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_FALSE   0
114116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_TRUE    1
114216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
114316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_VERSION_1_1 0x00010001
114416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_VERSION_1_2 0x00010002
114516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_VERSION_1_4 0x00010004
114616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_VERSION_1_6 0x00010006
114716559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
114816559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_OK          (0)         /* no error */
114916559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_ERR         (-1)        /* generic error */
115016559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_EDETACHED   (-2)        /* thread detached from the VM */
115116559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_EVERSION    (-3)        /* JNI version error */
115216559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
115316559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_COMMIT      1           /* copy content, do not free buffer */
115416559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#define JNI_ABORT       2           /* free buffer w/o copying back */
115516559ae86908b88ba7644fac078f9168cbbcae10Ying Wang
115616559ae86908b88ba7644fac078f9168cbbcae10Ying Wang#endif  /* JNI_H_ */
1157