111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (C) 2006 The Android Open Source Project 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Licensed under the Apache License, Version 2.0 (the "License"); 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * you may not use this file except in compliance with the License. 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You may obtain a copy of the License at 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * http://www.apache.org/licenses/LICENSE-2.0 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Unless required by applicable law or agreed to in writing, software 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distributed under the License is distributed on an "AS IS" BASIS, 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * See the License for the specific language governing permissions and 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limitations under the License. 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * JNI specification, as defined by Sun: 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Everything here is expected to be VM-neutral. 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef JNI_H_ 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_H_ 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <sys/cdefs.h> 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <stdarg.h> 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Primitive types that match up with Java equivalents. 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef HAVE_INTTYPES_H 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <inttypes.h> /* C99 */ 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef uint8_t jboolean; /* unsigned 8 bits */ 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int8_t jbyte; /* signed 8 bits */ 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef uint16_t jchar; /* unsigned 16 bits */ 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int16_t jshort; /* signed 16 bits */ 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int32_t jint; /* signed 32 bits */ 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int64_t jlong; /* signed 64 bits */ 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef float jfloat; /* 32-bit IEEE 754 */ 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef double jdouble; /* 64-bit IEEE 754 */ 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef unsigned char jboolean; /* unsigned 8 bits */ 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef signed char jbyte; /* signed 8 bits */ 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef unsigned short jchar; /* unsigned 16 bits */ 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef short jshort; /* signed 16 bits */ 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef int jint; /* signed 32 bits */ 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef long long jlong; /* signed 64 bits */ 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef float jfloat; /* 32-bit IEEE 754 */ 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef double jdouble; /* 64-bit IEEE 754 */ 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* "cardinal indices and sizes" */ 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jint jsize; 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Reference types, in C++ 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jobject {}; 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jclass : public _jobject {}; 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jstring : public _jobject {}; 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jarray : public _jobject {}; 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jobjectArray : public _jarray {}; 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jbooleanArray : public _jarray {}; 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jbyteArray : public _jarray {}; 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jcharArray : public _jarray {}; 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jshortArray : public _jarray {}; 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jintArray : public _jarray {}; 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jlongArray : public _jarray {}; 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jfloatArray : public _jarray {}; 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jdoubleArray : public _jarray {}; 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _jthrowable : public _jobject {}; 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jobject* jobject; 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jclass* jclass; 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jstring* jstring; 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jarray* jarray; 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jobjectArray* jobjectArray; 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jbooleanArray* jbooleanArray; 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jbyteArray* jbyteArray; 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jcharArray* jcharArray; 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jshortArray* jshortArray; 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jintArray* jintArray; 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jlongArray* jlongArray; 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jfloatArray* jfloatArray; 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jdoubleArray* jdoubleArray; 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jthrowable* jthrowable; 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _jobject* jweak; 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else /* not __cplusplus */ 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Reference types, in C. 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef void* jobject; 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jobject jclass; 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jobject jstring; 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jobject jarray; 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jobjectArray; 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jbooleanArray; 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jbyteArray; 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jcharArray; 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jshortArray; 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jintArray; 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jlongArray; 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jfloatArray; 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jarray jdoubleArray; 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jobject jthrowable; 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef jobject jweak; 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* not __cplusplus */ 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _jfieldID; /* opaque structure */ 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct _jfieldID* jfieldID; /* field IDs */ 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _jmethodID; /* opaque structure */ 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct _jmethodID* jmethodID; /* method IDs */ 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct JNIInvokeInterface; 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef union jvalue { 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean z; 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte b; 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar c; 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort s; 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint i; 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong j; 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat f; 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble d; 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject l; 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} jvalue; 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef enum jobjectRefType { 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert JNIInvalidRefType = 0, 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert JNILocalRefType = 1, 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert JNIGlobalRefType = 2, 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert JNIWeakGlobalRefType = 3 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} jobjectRefType; 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct { 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* name; 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* signature; 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* fnPtr; 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} JNINativeMethod; 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _JNIEnv; 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _JavaVM; 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef const struct JNINativeInterface* C_JNIEnv; 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__cplusplus) 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _JNIEnv JNIEnv; 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef _JavaVM JavaVM; 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef const struct JNINativeInterface* JNIEnv; 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef const struct JNIInvokeInterface* JavaVM; 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Table of interface function pointers. 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct JNINativeInterface { 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* reserved0; 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* reserved1; 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* reserved2; 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* reserved3; 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*GetVersion)(JNIEnv *); 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass (*DefineClass)(JNIEnv*, const char*, jobject, const jbyte*, 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize); 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass (*FindClass)(JNIEnv*, const char*); 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID (*FromReflectedMethod)(JNIEnv*, jobject); 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfieldID (*FromReflectedField)(JNIEnv*, jobject); 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* spec doesn't show jboolean parameter */ 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*ToReflectedMethod)(JNIEnv*, jclass, jmethodID, jboolean); 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass (*GetSuperclass)(JNIEnv*, jclass); 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*IsAssignableFrom)(JNIEnv*, jclass, jclass); 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* spec doesn't show jboolean parameter */ 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*ToReflectedField)(JNIEnv*, jclass, jfieldID, jboolean); 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*Throw)(JNIEnv*, jthrowable); 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*ThrowNew)(JNIEnv *, jclass, const char *); 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jthrowable (*ExceptionOccurred)(JNIEnv*); 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ExceptionDescribe)(JNIEnv*); 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ExceptionClear)(JNIEnv*); 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*FatalError)(JNIEnv*, const char*); 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*PushLocalFrame)(JNIEnv*, jint); 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*PopLocalFrame)(JNIEnv*, jobject); 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*NewGlobalRef)(JNIEnv*, jobject); 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*DeleteGlobalRef)(JNIEnv*, jobject); 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*DeleteLocalRef)(JNIEnv*, jobject); 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*IsSameObject)(JNIEnv*, jobject, jobject); 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*NewLocalRef)(JNIEnv*, jobject); 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*EnsureLocalCapacity)(JNIEnv*, jint); 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*AllocObject)(JNIEnv*, jclass); 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*NewObject)(JNIEnv*, jclass, jmethodID, ...); 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*NewObjectV)(JNIEnv*, jclass, jmethodID, va_list); 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*NewObjectA)(JNIEnv*, jclass, jmethodID, jvalue*); 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass (*GetObjectClass)(JNIEnv*, jobject); 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*IsInstanceOf)(JNIEnv*, jobject, jclass); 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID (*GetMethodID)(JNIEnv*, jclass, const char*, const char*); 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...); 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallObjectMethodV)(JNIEnv*, jobject, jmethodID, va_list); 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallObjectMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallBooleanMethod)(JNIEnv*, jobject, jmethodID, ...); 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallBooleanMethodV)(JNIEnv*, jobject, jmethodID, va_list); 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallBooleanMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallByteMethod)(JNIEnv*, jobject, jmethodID, ...); 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallByteMethodV)(JNIEnv*, jobject, jmethodID, va_list); 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallByteMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallCharMethod)(JNIEnv*, jobject, jmethodID, ...); 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallCharMethodV)(JNIEnv*, jobject, jmethodID, va_list); 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallCharMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallShortMethod)(JNIEnv*, jobject, jmethodID, ...); 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallShortMethodV)(JNIEnv*, jobject, jmethodID, va_list); 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallShortMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallIntMethod)(JNIEnv*, jobject, jmethodID, ...); 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallIntMethodV)(JNIEnv*, jobject, jmethodID, va_list); 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallIntMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallLongMethod)(JNIEnv*, jobject, jmethodID, ...); 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallLongMethodV)(JNIEnv*, jobject, jmethodID, va_list); 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallLongMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallFloatMethod)(JNIEnv*, jobject, jmethodID, ...) __NDK_FPABI__; 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallFloatMethodV)(JNIEnv*, jobject, jmethodID, va_list) __NDK_FPABI__; 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallFloatMethodA)(JNIEnv*, jobject, jmethodID, jvalue*) __NDK_FPABI__; 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallDoubleMethod)(JNIEnv*, jobject, jmethodID, ...) __NDK_FPABI__; 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallDoubleMethodV)(JNIEnv*, jobject, jmethodID, va_list) __NDK_FPABI__; 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallDoubleMethodA)(JNIEnv*, jobject, jmethodID, jvalue*) __NDK_FPABI__; 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallVoidMethod)(JNIEnv*, jobject, jmethodID, ...); 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallVoidMethodV)(JNIEnv*, jobject, jmethodID, va_list); 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallVoidMethodA)(JNIEnv*, jobject, jmethodID, jvalue*); 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallNonvirtualObjectMethod)(JNIEnv*, jobject, jclass, 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallNonvirtualObjectMethodV)(JNIEnv*, jobject, jclass, 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallNonvirtualObjectMethodA)(JNIEnv*, jobject, jclass, 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallNonvirtualBooleanMethod)(JNIEnv*, jobject, jclass, 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallNonvirtualBooleanMethodV)(JNIEnv*, jobject, jclass, 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallNonvirtualBooleanMethodA)(JNIEnv*, jobject, jclass, 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallNonvirtualByteMethod)(JNIEnv*, jobject, jclass, 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallNonvirtualByteMethodV)(JNIEnv*, jobject, jclass, 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallNonvirtualByteMethodA)(JNIEnv*, jobject, jclass, 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallNonvirtualCharMethod)(JNIEnv*, jobject, jclass, 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallNonvirtualCharMethodV)(JNIEnv*, jobject, jclass, 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallNonvirtualCharMethodA)(JNIEnv*, jobject, jclass, 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallNonvirtualShortMethod)(JNIEnv*, jobject, jclass, 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallNonvirtualShortMethodV)(JNIEnv*, jobject, jclass, 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallNonvirtualShortMethodA)(JNIEnv*, jobject, jclass, 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallNonvirtualIntMethod)(JNIEnv*, jobject, jclass, 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallNonvirtualIntMethodV)(JNIEnv*, jobject, jclass, 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallNonvirtualIntMethodA)(JNIEnv*, jobject, jclass, 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallNonvirtualLongMethod)(JNIEnv*, jobject, jclass, 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallNonvirtualLongMethodV)(JNIEnv*, jobject, jclass, 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallNonvirtualLongMethodA)(JNIEnv*, jobject, jclass, 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallNonvirtualFloatMethod)(JNIEnv*, jobject, jclass, 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...) __NDK_FPABI__; 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallNonvirtualFloatMethodV)(JNIEnv*, jobject, jclass, 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list) __NDK_FPABI__; 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallNonvirtualFloatMethodA)(JNIEnv*, jobject, jclass, 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*) __NDK_FPABI__; 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallNonvirtualDoubleMethod)(JNIEnv*, jobject, jclass, 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...) __NDK_FPABI__; 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallNonvirtualDoubleMethodV)(JNIEnv*, jobject, jclass, 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list) __NDK_FPABI__; 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallNonvirtualDoubleMethodA)(JNIEnv*, jobject, jclass, 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*) __NDK_FPABI__; 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallNonvirtualVoidMethod)(JNIEnv*, jobject, jclass, 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, ...); 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallNonvirtualVoidMethodV)(JNIEnv*, jobject, jclass, 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, va_list); 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallNonvirtualVoidMethodA)(JNIEnv*, jobject, jclass, 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID, jvalue*); 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfieldID (*GetFieldID)(JNIEnv*, jclass, const char*, const char*); 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*GetObjectField)(JNIEnv*, jobject, jfieldID); 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*GetBooleanField)(JNIEnv*, jobject, jfieldID); 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*GetByteField)(JNIEnv*, jobject, jfieldID); 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*GetCharField)(JNIEnv*, jobject, jfieldID); 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*GetShortField)(JNIEnv*, jobject, jfieldID); 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*GetIntField)(JNIEnv*, jobject, jfieldID); 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*GetLongField)(JNIEnv*, jobject, jfieldID); 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*GetFloatField)(JNIEnv*, jobject, jfieldID) __NDK_FPABI__; 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*GetDoubleField)(JNIEnv*, jobject, jfieldID) __NDK_FPABI__; 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetObjectField)(JNIEnv*, jobject, jfieldID, jobject); 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetBooleanField)(JNIEnv*, jobject, jfieldID, jboolean); 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetByteField)(JNIEnv*, jobject, jfieldID, jbyte); 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetCharField)(JNIEnv*, jobject, jfieldID, jchar); 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetShortField)(JNIEnv*, jobject, jfieldID, jshort); 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetIntField)(JNIEnv*, jobject, jfieldID, jint); 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetLongField)(JNIEnv*, jobject, jfieldID, jlong); 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetFloatField)(JNIEnv*, jobject, jfieldID, jfloat) __NDK_FPABI__; 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetDoubleField)(JNIEnv*, jobject, jfieldID, jdouble) __NDK_FPABI__; 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID (*GetStaticMethodID)(JNIEnv*, jclass, const char*, const char*); 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...); 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallStaticObjectMethodV)(JNIEnv*, jclass, jmethodID, va_list); 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*CallStaticObjectMethodA)(JNIEnv*, jclass, jmethodID, jvalue*); 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...); 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallStaticBooleanMethodV)(JNIEnv*, jclass, jmethodID, 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list); 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*CallStaticBooleanMethodA)(JNIEnv*, jclass, jmethodID, 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jvalue*); 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallStaticByteMethod)(JNIEnv*, jclass, jmethodID, ...); 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallStaticByteMethodV)(JNIEnv*, jclass, jmethodID, va_list); 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*CallStaticByteMethodA)(JNIEnv*, jclass, jmethodID, jvalue*); 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallStaticCharMethod)(JNIEnv*, jclass, jmethodID, ...); 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallStaticCharMethodV)(JNIEnv*, jclass, jmethodID, va_list); 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*CallStaticCharMethodA)(JNIEnv*, jclass, jmethodID, jvalue*); 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallStaticShortMethod)(JNIEnv*, jclass, jmethodID, ...); 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallStaticShortMethodV)(JNIEnv*, jclass, jmethodID, va_list); 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*CallStaticShortMethodA)(JNIEnv*, jclass, jmethodID, jvalue*); 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallStaticIntMethod)(JNIEnv*, jclass, jmethodID, ...); 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallStaticIntMethodV)(JNIEnv*, jclass, jmethodID, va_list); 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*CallStaticIntMethodA)(JNIEnv*, jclass, jmethodID, jvalue*); 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallStaticLongMethod)(JNIEnv*, jclass, jmethodID, ...); 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallStaticLongMethodV)(JNIEnv*, jclass, jmethodID, va_list); 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*CallStaticLongMethodA)(JNIEnv*, jclass, jmethodID, jvalue*); 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallStaticFloatMethod)(JNIEnv*, jclass, jmethodID, ...) __NDK_FPABI__; 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallStaticFloatMethodV)(JNIEnv*, jclass, jmethodID, va_list) __NDK_FPABI__; 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*CallStaticFloatMethodA)(JNIEnv*, jclass, jmethodID, jvalue*) __NDK_FPABI__; 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallStaticDoubleMethod)(JNIEnv*, jclass, jmethodID, ...) __NDK_FPABI__; 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallStaticDoubleMethodV)(JNIEnv*, jclass, jmethodID, va_list) __NDK_FPABI__; 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*CallStaticDoubleMethodA)(JNIEnv*, jclass, jmethodID, jvalue*) __NDK_FPABI__; 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...); 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallStaticVoidMethodV)(JNIEnv*, jclass, jmethodID, va_list); 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*CallStaticVoidMethodA)(JNIEnv*, jclass, jmethodID, jvalue*); 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfieldID (*GetStaticFieldID)(JNIEnv*, jclass, const char*, 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*); 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*GetStaticObjectField)(JNIEnv*, jclass, jfieldID); 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*GetStaticBooleanField)(JNIEnv*, jclass, jfieldID); 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte (*GetStaticByteField)(JNIEnv*, jclass, jfieldID); 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar (*GetStaticCharField)(JNIEnv*, jclass, jfieldID); 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort (*GetStaticShortField)(JNIEnv*, jclass, jfieldID); 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*GetStaticIntField)(JNIEnv*, jclass, jfieldID); 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*GetStaticLongField)(JNIEnv*, jclass, jfieldID); 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat (*GetStaticFloatField)(JNIEnv*, jclass, jfieldID) __NDK_FPABI__; 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble (*GetStaticDoubleField)(JNIEnv*, jclass, jfieldID) __NDK_FPABI__; 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticObjectField)(JNIEnv*, jclass, jfieldID, jobject); 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticBooleanField)(JNIEnv*, jclass, jfieldID, jboolean); 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticByteField)(JNIEnv*, jclass, jfieldID, jbyte); 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticCharField)(JNIEnv*, jclass, jfieldID, jchar); 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticShortField)(JNIEnv*, jclass, jfieldID, jshort); 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticIntField)(JNIEnv*, jclass, jfieldID, jint); 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticLongField)(JNIEnv*, jclass, jfieldID, jlong); 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticFloatField)(JNIEnv*, jclass, jfieldID, jfloat) __NDK_FPABI__; 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetStaticDoubleField)(JNIEnv*, jclass, jfieldID, jdouble) __NDK_FPABI__; 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jstring (*NewString)(JNIEnv*, const jchar*, jsize); 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize (*GetStringLength)(JNIEnv*, jstring); 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jchar* (*GetStringChars)(JNIEnv*, jstring, jboolean*); 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseStringChars)(JNIEnv*, jstring, const jchar*); 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jstring (*NewStringUTF)(JNIEnv*, const char*); 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize (*GetStringUTFLength)(JNIEnv*, jstring); 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* JNI spec says this returns const jbyte*, but that's inconsistent */ 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* (*GetStringUTFChars)(JNIEnv*, jstring, jboolean*); 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseStringUTFChars)(JNIEnv*, jstring, const char*); 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize (*GetArrayLength)(JNIEnv*, jarray); 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobjectArray (*NewObjectArray)(JNIEnv*, jsize, jclass, jobject); 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*GetObjectArrayElement)(JNIEnv*, jobjectArray, jsize); 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetObjectArrayElement)(JNIEnv*, jobjectArray, jsize, jobject); 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbooleanArray (*NewBooleanArray)(JNIEnv*, jsize); 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyteArray (*NewByteArray)(JNIEnv*, jsize); 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jcharArray (*NewCharArray)(JNIEnv*, jsize); 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshortArray (*NewShortArray)(JNIEnv*, jsize); 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jintArray (*NewIntArray)(JNIEnv*, jsize); 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlongArray (*NewLongArray)(JNIEnv*, jsize); 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloatArray (*NewFloatArray)(JNIEnv*, jsize); 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdoubleArray (*NewDoubleArray)(JNIEnv*, jsize); 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean* (*GetBooleanArrayElements)(JNIEnv*, jbooleanArray, jboolean*); 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte* (*GetByteArrayElements)(JNIEnv*, jbyteArray, jboolean*); 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar* (*GetCharArrayElements)(JNIEnv*, jcharArray, jboolean*); 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort* (*GetShortArrayElements)(JNIEnv*, jshortArray, jboolean*); 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint* (*GetIntArrayElements)(JNIEnv*, jintArray, jboolean*); 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong* (*GetLongArrayElements)(JNIEnv*, jlongArray, jboolean*); 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat* (*GetFloatArrayElements)(JNIEnv*, jfloatArray, jboolean*); 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble* (*GetDoubleArrayElements)(JNIEnv*, jdoubleArray, jboolean*); 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseBooleanArrayElements)(JNIEnv*, jbooleanArray, 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean*, jint); 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseByteArrayElements)(JNIEnv*, jbyteArray, 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte*, jint); 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseCharArrayElements)(JNIEnv*, jcharArray, 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar*, jint); 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseShortArrayElements)(JNIEnv*, jshortArray, 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort*, jint); 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseIntArrayElements)(JNIEnv*, jintArray, 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint*, jint); 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseLongArrayElements)(JNIEnv*, jlongArray, 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong*, jint); 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseFloatArrayElements)(JNIEnv*, jfloatArray, 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat*, jint); 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseDoubleArrayElements)(JNIEnv*, jdoubleArray, 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble*, jint); 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetBooleanArrayRegion)(JNIEnv*, jbooleanArray, 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jboolean*); 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetByteArrayRegion)(JNIEnv*, jbyteArray, 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jbyte*); 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetCharArrayRegion)(JNIEnv*, jcharArray, 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jchar*); 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetShortArrayRegion)(JNIEnv*, jshortArray, 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jshort*); 44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetIntArrayRegion)(JNIEnv*, jintArray, 44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jint*); 44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetLongArrayRegion)(JNIEnv*, jlongArray, 44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jlong*); 44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetFloatArrayRegion)(JNIEnv*, jfloatArray, 44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jfloat*); 44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetDoubleArrayRegion)(JNIEnv*, jdoubleArray, 45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, jdouble*); 45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* spec shows these without const; some jni.h do, some don't */ 45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetBooleanArrayRegion)(JNIEnv*, jbooleanArray, 45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jboolean*); 45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetByteArrayRegion)(JNIEnv*, jbyteArray, 45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jbyte*); 45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetCharArrayRegion)(JNIEnv*, jcharArray, 45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jchar*); 45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetShortArrayRegion)(JNIEnv*, jshortArray, 46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jshort*); 46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetIntArrayRegion)(JNIEnv*, jintArray, 46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jint*); 46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetLongArrayRegion)(JNIEnv*, jlongArray, 46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jlong*); 46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetFloatArrayRegion)(JNIEnv*, jfloatArray, 46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jfloat*); 46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*SetDoubleArrayRegion)(JNIEnv*, jdoubleArray, 46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize, jsize, const jdouble*); 46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*RegisterNatives)(JNIEnv*, jclass, const JNINativeMethod*, 47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint); 47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*UnregisterNatives)(JNIEnv*, jclass); 47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*MonitorEnter)(JNIEnv*, jobject); 47411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*MonitorExit)(JNIEnv*, jobject); 47511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*GetJavaVM)(JNIEnv*, JavaVM**); 47611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetStringRegion)(JNIEnv*, jstring, jsize, jsize, jchar*); 47811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*GetStringUTFRegion)(JNIEnv*, jstring, jsize, jsize, char*); 47911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* (*GetPrimitiveArrayCritical)(JNIEnv*, jarray, jboolean*); 48111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleasePrimitiveArrayCritical)(JNIEnv*, jarray, void*, jint); 48211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jchar* (*GetStringCritical)(JNIEnv*, jstring, jboolean*); 48411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*ReleaseStringCritical)(JNIEnv*, jstring, const jchar*); 48511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jweak (*NewWeakGlobalRef)(JNIEnv*, jobject); 48711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void (*DeleteWeakGlobalRef)(JNIEnv*, jweak); 48811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean (*ExceptionCheck)(JNIEnv*); 49011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 49111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject (*NewDirectByteBuffer)(JNIEnv*, void*, jlong); 49211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* (*GetDirectBufferAddress)(JNIEnv*, jobject); 49311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong (*GetDirectBufferCapacity)(JNIEnv*, jobject); 49411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 49511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* added in JNI 1.6 */ 49611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobjectRefType (*GetObjectRefType)(JNIEnv*, jobject); 49711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 49811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 49911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 50011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * C++ object wrapper. 50111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 50211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This is usually overlaid on a C struct whose first element is a 50311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * JNINativeInterface*. We rely somewhat on compiler behavior. 50411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 50511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _JNIEnv { 50611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* do not rename this; it does not seem to be entirely opaque */ 50711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const struct JNINativeInterface* functions; 50811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 50911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__cplusplus) 51011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 51111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint GetVersion() 51211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetVersion(this); } 51311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 51411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass DefineClass(const char *name, jobject loader, const jbyte* buf, 51511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize bufLen) 51611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->DefineClass(this, name, loader, buf, bufLen); } 51711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 51811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass FindClass(const char* name) 51911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->FindClass(this, name); } 52011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 52111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID FromReflectedMethod(jobject method) 52211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->FromReflectedMethod(this, method); } 52311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 52411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfieldID FromReflectedField(jobject field) 52511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->FromReflectedField(this, field); } 52611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 52711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) 52811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->ToReflectedMethod(this, cls, methodID, isStatic); } 52911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 53011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass GetSuperclass(jclass clazz) 53111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetSuperclass(this, clazz); } 53211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 53311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean IsAssignableFrom(jclass clazz1, jclass clazz2) 53411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->IsAssignableFrom(this, clazz1, clazz2); } 53511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 53611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) 53711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->ToReflectedField(this, cls, fieldID, isStatic); } 53811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 53911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint Throw(jthrowable obj) 54011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->Throw(this, obj); } 54111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 54211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint ThrowNew(jclass clazz, const char* message) 54311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->ThrowNew(this, clazz, message); } 54411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 54511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jthrowable ExceptionOccurred() 54611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->ExceptionOccurred(this); } 54711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 54811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ExceptionDescribe() 54911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ExceptionDescribe(this); } 55011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 55111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ExceptionClear() 55211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ExceptionClear(this); } 55311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 55411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void FatalError(const char* msg) 55511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->FatalError(this, msg); } 55611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 55711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint PushLocalFrame(jint capacity) 55811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->PushLocalFrame(this, capacity); } 55911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 56011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject PopLocalFrame(jobject result) 56111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->PopLocalFrame(this, result); } 56211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 56311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject NewGlobalRef(jobject obj) 56411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewGlobalRef(this, obj); } 56511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 56611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void DeleteGlobalRef(jobject globalRef) 56711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->DeleteGlobalRef(this, globalRef); } 56811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 56911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void DeleteLocalRef(jobject localRef) 57011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->DeleteLocalRef(this, localRef); } 57111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean IsSameObject(jobject ref1, jobject ref2) 57311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->IsSameObject(this, ref1, ref2); } 57411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject NewLocalRef(jobject ref) 57611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewLocalRef(this, ref); } 57711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 57811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint EnsureLocalCapacity(jint capacity) 57911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->EnsureLocalCapacity(this, capacity); } 58011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 58111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject AllocObject(jclass clazz) 58211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->AllocObject(this, clazz); } 58311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 58411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject NewObject(jclass clazz, jmethodID methodID, ...) 58511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 58611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args; 58711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_start(args, methodID); 58811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject result = functions->NewObjectV(this, clazz, methodID, args); 58911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_end(args); 59011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return result; 59111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 59211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 59311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject NewObjectV(jclass clazz, jmethodID methodID, va_list args) 59411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewObjectV(this, clazz, methodID, args); } 59511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 59611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject NewObjectA(jclass clazz, jmethodID methodID, jvalue* args) 59711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewObjectA(this, clazz, methodID, args); } 59811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 59911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jclass GetObjectClass(jobject obj) 60011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetObjectClass(this, obj); } 60111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 60211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean IsInstanceOf(jobject obj, jclass clazz) 60311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->IsInstanceOf(this, obj, clazz); } 60411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 60511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID GetMethodID(jclass clazz, const char* name, const char* sig) 60611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetMethodID(this, clazz, name, sig); } 60711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 60811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_TYPE_METHOD(_jtype, _jname) \ 60911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 61011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype Call##_jname##Method(jobject obj, jmethodID methodID, ...) \ 61111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { \ 61211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype result; \ 61311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args; \ 61411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_start(args, methodID); \ 61511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result = functions->Call##_jname##MethodV(this, obj, methodID, \ 61611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert args); \ 61711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_end(args); \ 61811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return result; \ 61911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 62011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_TYPE_METHODV(_jtype, _jname) \ 62111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 62211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype Call##_jname##MethodV(jobject obj, jmethodID methodID, \ 62311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args) \ 62411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->Call##_jname##MethodV(this, obj, methodID, args); } 62511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_TYPE_METHODA(_jtype, _jname) \ 62611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 62711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype Call##_jname##MethodA(jobject obj, jmethodID methodID, \ 62811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jvalue* args) \ 62911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->Call##_jname##MethodA(this, obj, methodID, args); } 63011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 63111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_TYPE(_jtype, _jname) \ 63211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE_METHOD(_jtype, _jname) \ 63311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE_METHODV(_jtype, _jname) \ 63411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE_METHODA(_jtype, _jname) 63511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 63611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jobject, Object) 63711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jboolean, Boolean) 63811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jbyte, Byte) 63911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jchar, Char) 64011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jshort, Short) 64111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jint, Int) 64211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jlong, Long) 64311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jfloat, Float) 64411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_TYPE(jdouble, Double) 64511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 64611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallVoidMethod(jobject obj, jmethodID methodID, ...) 64711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 64811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args; 64911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_start(args, methodID); 65011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert functions->CallVoidMethodV(this, obj, methodID, args); 65111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_end(args); 65211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 65311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallVoidMethodV(jobject obj, jmethodID methodID, va_list args) 65411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->CallVoidMethodV(this, obj, methodID, args); } 65511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallVoidMethodA(jobject obj, jmethodID methodID, jvalue* args) 65611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->CallVoidMethodA(this, obj, methodID, args); } 65711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 65811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_NONVIRT_TYPE_METHOD(_jtype, _jname) \ 65911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 66011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype CallNonvirtual##_jname##Method(jobject obj, jclass clazz, \ 66111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID methodID, ...) \ 66211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { \ 66311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype result; \ 66411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args; \ 66511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_start(args, methodID); \ 66611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result = functions->CallNonvirtual##_jname##MethodV(this, obj, \ 66711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert clazz, methodID, args); \ 66811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_end(args); \ 66911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return result; \ 67011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 67111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_NONVIRT_TYPE_METHODV(_jtype, _jname) \ 67211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 67311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype CallNonvirtual##_jname##MethodV(jobject obj, jclass clazz, \ 67411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID methodID, va_list args) \ 67511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->CallNonvirtual##_jname##MethodV(this, obj, clazz, \ 67611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert methodID, args); } 67711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_NONVIRT_TYPE_METHODA(_jtype, _jname) \ 67811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 67911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype CallNonvirtual##_jname##MethodA(jobject obj, jclass clazz, \ 68011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID methodID, jvalue* args) \ 68111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->CallNonvirtual##_jname##MethodA(this, obj, clazz, \ 68211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert methodID, args); } 68311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 68411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_NONVIRT_TYPE(_jtype, _jname) \ 68511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE_METHOD(_jtype, _jname) \ 68611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE_METHODV(_jtype, _jname) \ 68711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE_METHODA(_jtype, _jname) 68811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 68911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jobject, Object) 69011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jboolean, Boolean) 69111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jbyte, Byte) 69211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jchar, Char) 69311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jshort, Short) 69411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jint, Int) 69511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jlong, Long) 69611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jfloat, Float) 69711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_NONVIRT_TYPE(jdouble, Double) 69811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 69911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallNonvirtualVoidMethod(jobject obj, jclass clazz, 70011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID methodID, ...) 70111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 70211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args; 70311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_start(args, methodID); 70411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args); 70511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_end(args); 70611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 70711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallNonvirtualVoidMethodV(jobject obj, jclass clazz, 70811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID methodID, va_list args) 70911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->CallNonvirtualVoidMethodV(this, obj, clazz, methodID, args); } 71011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallNonvirtualVoidMethodA(jobject obj, jclass clazz, 71111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID methodID, jvalue* args) 71211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->CallNonvirtualVoidMethodA(this, obj, clazz, methodID, args); } 71311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 71411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfieldID GetFieldID(jclass clazz, const char* name, const char* sig) 71511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetFieldID(this, clazz, name, sig); } 71611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 71711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject GetObjectField(jobject obj, jfieldID fieldID) 71811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetObjectField(this, obj, fieldID); } 71911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean GetBooleanField(jobject obj, jfieldID fieldID) 72011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetBooleanField(this, obj, fieldID); } 72111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte GetByteField(jobject obj, jfieldID fieldID) 72211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetByteField(this, obj, fieldID); } 72311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar GetCharField(jobject obj, jfieldID fieldID) 72411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetCharField(this, obj, fieldID); } 72511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort GetShortField(jobject obj, jfieldID fieldID) 72611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetShortField(this, obj, fieldID); } 72711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint GetIntField(jobject obj, jfieldID fieldID) 72811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetIntField(this, obj, fieldID); } 72911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong GetLongField(jobject obj, jfieldID fieldID) 73011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetLongField(this, obj, fieldID); } 73111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 73211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat GetFloatField(jobject obj, jfieldID fieldID) 73311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetFloatField(this, obj, fieldID); } 73411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 73511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble GetDoubleField(jobject obj, jfieldID fieldID) 73611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetDoubleField(this, obj, fieldID); } 73711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 73811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetObjectField(jobject obj, jfieldID fieldID, jobject value) 73911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetObjectField(this, obj, fieldID, value); } 74011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetBooleanField(jobject obj, jfieldID fieldID, jboolean value) 74111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetBooleanField(this, obj, fieldID, value); } 74211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetByteField(jobject obj, jfieldID fieldID, jbyte value) 74311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetByteField(this, obj, fieldID, value); } 74411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetCharField(jobject obj, jfieldID fieldID, jchar value) 74511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetCharField(this, obj, fieldID, value); } 74611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetShortField(jobject obj, jfieldID fieldID, jshort value) 74711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetShortField(this, obj, fieldID, value); } 74811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetIntField(jobject obj, jfieldID fieldID, jint value) 74911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetIntField(this, obj, fieldID, value); } 75011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetLongField(jobject obj, jfieldID fieldID, jlong value) 75111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetLongField(this, obj, fieldID, value); } 75211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 75311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetFloatField(jobject obj, jfieldID fieldID, jfloat value) 75411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetFloatField(this, obj, fieldID, value); } 75511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 75611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetDoubleField(jobject obj, jfieldID fieldID, jdouble value) 75711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetDoubleField(this, obj, fieldID, value); } 75811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 75911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jmethodID GetStaticMethodID(jclass clazz, const char* name, const char* sig) 76011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticMethodID(this, clazz, name, sig); } 76111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 76211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_STATIC_TYPE_METHOD(_jtype, _jname) \ 76311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 76411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype CallStatic##_jname##Method(jclass clazz, jmethodID methodID, \ 76511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ...) \ 76611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { \ 76711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype result; \ 76811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args; \ 76911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_start(args, methodID); \ 77011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result = functions->CallStatic##_jname##MethodV(this, clazz, \ 77111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert methodID, args); \ 77211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_end(args); \ 77311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return result; \ 77411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 77511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_STATIC_TYPE_METHODV(_jtype, _jname) \ 77611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 77711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype CallStatic##_jname##MethodV(jclass clazz, jmethodID methodID, \ 77811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args) \ 77911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->CallStatic##_jname##MethodV(this, clazz, methodID, \ 78011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert args); } 78111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_STATIC_TYPE_METHODA(_jtype, _jname) \ 78211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ \ 78311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _jtype CallStatic##_jname##MethodA(jclass clazz, jmethodID methodID, \ 78411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jvalue* args) \ 78511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->CallStatic##_jname##MethodA(this, clazz, methodID, \ 78611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert args); } 78711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 78811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define CALL_STATIC_TYPE(_jtype, _jname) \ 78911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE_METHOD(_jtype, _jname) \ 79011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE_METHODV(_jtype, _jname) \ 79111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE_METHODA(_jtype, _jname) 79211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 79311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jobject, Object) 79411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jboolean, Boolean) 79511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jbyte, Byte) 79611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jchar, Char) 79711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jshort, Short) 79811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jint, Int) 79911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jlong, Long) 80011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jfloat, Float) 80111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert CALL_STATIC_TYPE(jdouble, Double) 80211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 80311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallStaticVoidMethod(jclass clazz, jmethodID methodID, ...) 80411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { 80511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_list args; 80611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_start(args, methodID); 80711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert functions->CallStaticVoidMethodV(this, clazz, methodID, args); 80811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert va_end(args); 80911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 81011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallStaticVoidMethodV(jclass clazz, jmethodID methodID, va_list args) 81111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->CallStaticVoidMethodV(this, clazz, methodID, args); } 81211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void CallStaticVoidMethodA(jclass clazz, jmethodID methodID, jvalue* args) 81311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->CallStaticVoidMethodA(this, clazz, methodID, args); } 81411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 81511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfieldID GetStaticFieldID(jclass clazz, const char* name, const char* sig) 81611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticFieldID(this, clazz, name, sig); } 81711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 81811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) 81911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticObjectField(this, clazz, fieldID); } 82011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) 82111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticBooleanField(this, clazz, fieldID); } 82211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) 82311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticByteField(this, clazz, fieldID); } 82411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar GetStaticCharField(jclass clazz, jfieldID fieldID) 82511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticCharField(this, clazz, fieldID); } 82611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort GetStaticShortField(jclass clazz, jfieldID fieldID) 82711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticShortField(this, clazz, fieldID); } 82811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint GetStaticIntField(jclass clazz, jfieldID fieldID) 82911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticIntField(this, clazz, fieldID); } 83011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong GetStaticLongField(jclass clazz, jfieldID fieldID) 83111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticLongField(this, clazz, fieldID); } 83211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 83311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) 83411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticFloatField(this, clazz, fieldID); } 83511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 83611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) 83711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStaticDoubleField(this, clazz, fieldID); } 83811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 83911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticObjectField(jclass clazz, jfieldID fieldID, jobject value) 84011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticObjectField(this, clazz, fieldID, value); } 84111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticBooleanField(jclass clazz, jfieldID fieldID, jboolean value) 84211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticBooleanField(this, clazz, fieldID, value); } 84311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticByteField(jclass clazz, jfieldID fieldID, jbyte value) 84411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticByteField(this, clazz, fieldID, value); } 84511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticCharField(jclass clazz, jfieldID fieldID, jchar value) 84611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticCharField(this, clazz, fieldID, value); } 84711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticShortField(jclass clazz, jfieldID fieldID, jshort value) 84811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticShortField(this, clazz, fieldID, value); } 84911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticIntField(jclass clazz, jfieldID fieldID, jint value) 85011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticIntField(this, clazz, fieldID, value); } 85111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticLongField(jclass clazz, jfieldID fieldID, jlong value) 85211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticLongField(this, clazz, fieldID, value); } 85311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 85411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticFloatField(jclass clazz, jfieldID fieldID, jfloat value) 85511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticFloatField(this, clazz, fieldID, value); } 85611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __NDK_FPABI__ 85711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetStaticDoubleField(jclass clazz, jfieldID fieldID, jdouble value) 85811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetStaticDoubleField(this, clazz, fieldID, value); } 85911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jstring NewString(const jchar* unicodeChars, jsize len) 86111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewString(this, unicodeChars, len); } 86211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize GetStringLength(jstring string) 86411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStringLength(this, string); } 86511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jchar* GetStringChars(jstring string, jboolean* isCopy) 86711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStringChars(this, string, isCopy); } 86811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 86911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseStringChars(jstring string, const jchar* chars) 87011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseStringChars(this, string, chars); } 87111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 87211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jstring NewStringUTF(const char* bytes) 87311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewStringUTF(this, bytes); } 87411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 87511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize GetStringUTFLength(jstring string) 87611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStringUTFLength(this, string); } 87711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 87811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* GetStringUTFChars(jstring string, jboolean* isCopy) 87911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStringUTFChars(this, string, isCopy); } 88011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 88111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseStringUTFChars(jstring string, const char* utf) 88211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseStringUTFChars(this, string, utf); } 88311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 88411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jsize GetArrayLength(jarray array) 88511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetArrayLength(this, array); } 88611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 88711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobjectArray NewObjectArray(jsize length, jclass elementClass, 88811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject initialElement) 88911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewObjectArray(this, length, elementClass, 89011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert initialElement); } 89111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 89211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject GetObjectArrayElement(jobjectArray array, jsize index) 89311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetObjectArrayElement(this, array, index); } 89411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 89511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetObjectArrayElement(jobjectArray array, jsize index, jobject value) 89611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetObjectArrayElement(this, array, index, value); } 89711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 89811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbooleanArray NewBooleanArray(jsize length) 89911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewBooleanArray(this, length); } 90011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyteArray NewByteArray(jsize length) 90111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewByteArray(this, length); } 90211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jcharArray NewCharArray(jsize length) 90311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewCharArray(this, length); } 90411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshortArray NewShortArray(jsize length) 90511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewShortArray(this, length); } 90611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jintArray NewIntArray(jsize length) 90711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewIntArray(this, length); } 90811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlongArray NewLongArray(jsize length) 90911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewLongArray(this, length); } 91011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloatArray NewFloatArray(jsize length) 91111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewFloatArray(this, length); } 91211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdoubleArray NewDoubleArray(jsize length) 91311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewDoubleArray(this, length); } 91411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 91511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean* GetBooleanArrayElements(jbooleanArray array, jboolean* isCopy) 91611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetBooleanArrayElements(this, array, isCopy); } 91711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte* GetByteArrayElements(jbyteArray array, jboolean* isCopy) 91811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetByteArrayElements(this, array, isCopy); } 91911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar* GetCharArrayElements(jcharArray array, jboolean* isCopy) 92011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetCharArrayElements(this, array, isCopy); } 92111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort* GetShortArrayElements(jshortArray array, jboolean* isCopy) 92211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetShortArrayElements(this, array, isCopy); } 92311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint* GetIntArrayElements(jintArray array, jboolean* isCopy) 92411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetIntArrayElements(this, array, isCopy); } 92511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong* GetLongArrayElements(jlongArray array, jboolean* isCopy) 92611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetLongArrayElements(this, array, isCopy); } 92711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat* GetFloatArrayElements(jfloatArray array, jboolean* isCopy) 92811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetFloatArrayElements(this, array, isCopy); } 92911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble* GetDoubleArrayElements(jdoubleArray array, jboolean* isCopy) 93011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetDoubleArrayElements(this, array, isCopy); } 93111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 93211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseBooleanArrayElements(jbooleanArray array, jboolean* elems, 93311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 93411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseBooleanArrayElements(this, array, elems, mode); } 93511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseByteArrayElements(jbyteArray array, jbyte* elems, 93611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 93711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseByteArrayElements(this, array, elems, mode); } 93811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseCharArrayElements(jcharArray array, jchar* elems, 93911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 94011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseCharArrayElements(this, array, elems, mode); } 94111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseShortArrayElements(jshortArray array, jshort* elems, 94211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 94311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseShortArrayElements(this, array, elems, mode); } 94411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseIntArrayElements(jintArray array, jint* elems, 94511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 94611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseIntArrayElements(this, array, elems, mode); } 94711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseLongArrayElements(jlongArray array, jlong* elems, 94811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 94911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseLongArrayElements(this, array, elems, mode); } 95011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseFloatArrayElements(jfloatArray array, jfloat* elems, 95111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 95211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseFloatArrayElements(this, array, elems, mode); } 95311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseDoubleArrayElements(jdoubleArray array, jdouble* elems, 95411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint mode) 95511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseDoubleArrayElements(this, array, elems, mode); } 95611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 95711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len, 95811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean* buf) 95911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetBooleanArrayRegion(this, array, start, len, buf); } 96011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetByteArrayRegion(jbyteArray array, jsize start, jsize len, 96111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jbyte* buf) 96211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetByteArrayRegion(this, array, start, len, buf); } 96311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetCharArrayRegion(jcharArray array, jsize start, jsize len, 96411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jchar* buf) 96511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetCharArrayRegion(this, array, start, len, buf); } 96611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetShortArrayRegion(jshortArray array, jsize start, jsize len, 96711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jshort* buf) 96811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetShortArrayRegion(this, array, start, len, buf); } 96911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetIntArrayRegion(jintArray array, jsize start, jsize len, 97011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint* buf) 97111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetIntArrayRegion(this, array, start, len, buf); } 97211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetLongArrayRegion(jlongArray array, jsize start, jsize len, 97311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong* buf) 97411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetLongArrayRegion(this, array, start, len, buf); } 97511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetFloatArrayRegion(jfloatArray array, jsize start, jsize len, 97611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jfloat* buf) 97711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetFloatArrayRegion(this, array, start, len, buf); } 97811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len, 97911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jdouble* buf) 98011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetDoubleArrayRegion(this, array, start, len, buf); } 98111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 98211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len, 98311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jboolean* buf) 98411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetBooleanArrayRegion(this, array, start, len, buf); } 98511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetByteArrayRegion(jbyteArray array, jsize start, jsize len, 98611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jbyte* buf) 98711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetByteArrayRegion(this, array, start, len, buf); } 98811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetCharArrayRegion(jcharArray array, jsize start, jsize len, 98911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jchar* buf) 99011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetCharArrayRegion(this, array, start, len, buf); } 99111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetShortArrayRegion(jshortArray array, jsize start, jsize len, 99211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jshort* buf) 99311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetShortArrayRegion(this, array, start, len, buf); } 99411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetIntArrayRegion(jintArray array, jsize start, jsize len, 99511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jint* buf) 99611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetIntArrayRegion(this, array, start, len, buf); } 99711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetLongArrayRegion(jlongArray array, jsize start, jsize len, 99811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jlong* buf) 99911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetLongArrayRegion(this, array, start, len, buf); } 100011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len, 100111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jfloat* buf) 100211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetFloatArrayRegion(this, array, start, len, buf); } 100311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len, 100411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jdouble* buf) 100511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->SetDoubleArrayRegion(this, array, start, len, buf); } 100611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 100711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint RegisterNatives(jclass clazz, const JNINativeMethod* methods, 100811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint nMethods) 100911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->RegisterNatives(this, clazz, methods, nMethods); } 101011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 101111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint UnregisterNatives(jclass clazz) 101211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->UnregisterNatives(this, clazz); } 101311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 101411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint MonitorEnter(jobject obj) 101511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->MonitorEnter(this, obj); } 101611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 101711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint MonitorExit(jobject obj) 101811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->MonitorExit(this, obj); } 101911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 102011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint GetJavaVM(JavaVM** vm) 102111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetJavaVM(this, vm); } 102211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 102311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetStringRegion(jstring str, jsize start, jsize len, jchar* buf) 102411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->GetStringRegion(this, str, start, len, buf); } 102511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 102611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void GetStringUTFRegion(jstring str, jsize start, jsize len, char* buf) 102711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStringUTFRegion(this, str, start, len, buf); } 102811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 102911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* GetPrimitiveArrayCritical(jarray array, jboolean* isCopy) 103011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetPrimitiveArrayCritical(this, array, isCopy); } 103111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 103211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleasePrimitiveArrayCritical(jarray array, void* carray, jint mode) 103311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleasePrimitiveArrayCritical(this, array, carray, mode); } 103411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 103511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const jchar* GetStringCritical(jstring string, jboolean* isCopy) 103611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetStringCritical(this, string, isCopy); } 103711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 103811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void ReleaseStringCritical(jstring string, const jchar* carray) 103911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->ReleaseStringCritical(this, string, carray); } 104011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 104111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jweak NewWeakGlobalRef(jobject obj) 104211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewWeakGlobalRef(this, obj); } 104311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 104411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void DeleteWeakGlobalRef(jweak obj) 104511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { functions->DeleteWeakGlobalRef(this, obj); } 104611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 104711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean ExceptionCheck() 104811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->ExceptionCheck(this); } 104911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 105011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject NewDirectByteBuffer(void* address, jlong capacity) 105111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->NewDirectByteBuffer(this, address, capacity); } 105211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 105311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* GetDirectBufferAddress(jobject buf) 105411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetDirectBufferAddress(this, buf); } 105511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 105611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jlong GetDirectBufferCapacity(jobject buf) 105711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetDirectBufferCapacity(this, buf); } 105811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 105911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* added in JNI 1.6 */ 106011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobjectRefType GetObjectRefType(jobject obj) 106111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetObjectRefType(this, obj); } 106211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*__cplusplus*/ 106311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 106411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 106511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 106611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 106711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * JNI invocation interface. 106811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 106911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct JNIInvokeInterface { 107011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* reserved0; 107111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* reserved1; 107211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* reserved2; 107311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 107411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*DestroyJavaVM)(JavaVM*); 107511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*AttachCurrentThread)(JavaVM*, JNIEnv**, void*); 107611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*DetachCurrentThread)(JavaVM*); 107711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*GetEnv)(JavaVM*, void**, jint); 107811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint (*AttachCurrentThreadAsDaemon)(JavaVM*, JNIEnv**, void*); 107911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 108011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 108111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 108211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * C++ version. 108311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 108411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _JavaVM { 108511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const struct JNIInvokeInterface* functions; 108611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 108711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(__cplusplus) 108811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint DestroyJavaVM() 108911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->DestroyJavaVM(this); } 109011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint AttachCurrentThread(JNIEnv** p_env, void* thr_args) 109111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->AttachCurrentThread(this, p_env, thr_args); } 109211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint DetachCurrentThread() 109311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->DetachCurrentThread(this); } 109411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint GetEnv(void** env, jint version) 109511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->GetEnv(this, env, version); } 109611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint AttachCurrentThreadAsDaemon(JNIEnv** p_env, void* thr_args) 109711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return functions->AttachCurrentThreadAsDaemon(this, p_env, thr_args); } 109811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*__cplusplus*/ 109911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 110011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 110111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct JavaVMAttachArgs { 110211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint version; /* must be >= JNI_VERSION_1_2 */ 110311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* name; /* NULL or name of thread as modified UTF-8 str */ 110411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jobject group; /* global ref of a ThreadGroup object, or NULL */ 110511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 110611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct JavaVMAttachArgs JavaVMAttachArgs; 110711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 110811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 110911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * JNI 1.2+ initialization. (As of 1.6, the pre-1.2 structures are no 111011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * longer supported.) 111111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 111211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct JavaVMOption { 111311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* optionString; 111411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* extraInfo; 111511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} JavaVMOption; 111611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 111711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct JavaVMInitArgs { 111811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint version; /* use JNI_VERSION_1_2 or later */ 111911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 112011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jint nOptions; 112111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert JavaVMOption* options; 112211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert jboolean ignoreUnrecognized; 112311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} JavaVMInitArgs; 112411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 112511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus 112611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern "C" { 112711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 112811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 112911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * VM initialization functions. 113011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 113111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Note these are the only symbols exported for JNI by the VM. 113211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 113311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if 0 /* In practice, these are not exported by the NDK so don't declare them */ 113411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertjint JNI_GetDefaultJavaVMInitArgs(void*); 113511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertjint JNI_CreateJavaVM(JavaVM**, JNIEnv**, void*); 113611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertjint JNI_GetCreatedJavaVMs(JavaVM**, jsize, jsize*); 113711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 113811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 113911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNIIMPORT 114011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNIEXPORT __attribute__ ((visibility ("default"))) 114111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNICALL __NDK_FPABI__ 114211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 114311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 114411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Prototypes for functions exported by loadable shared libs. These are 114511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * called by JNI, not provided by JNI. 114611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 114711cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertJNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void* reserved); 114811cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertJNIEXPORT void JNICALL JNI_OnUnload(JavaVM* vm, void* reserved); 114911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 115011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus 115111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 115211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 115311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 115411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 115511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 115611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Manifest constants. 115711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 115811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_FALSE 0 115911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_TRUE 1 116011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 116111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_VERSION_1_1 0x00010001 116211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_VERSION_1_2 0x00010002 116311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_VERSION_1_4 0x00010004 116411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_VERSION_1_6 0x00010006 116511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 116611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_OK (0) /* no error */ 116711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_ERR (-1) /* generic error */ 116811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_EDETACHED (-2) /* thread detached from the VM */ 116911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_EVERSION (-3) /* JNI version error */ 117011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 117111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_COMMIT 1 /* copy content, do not free buffer */ 117211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define JNI_ABORT 2 /* free buffer w/o copying back */ 117311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 117411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* JNI_H_ */ 1175