BWAPI
EISBot/c_src/include/jni/jni.h
Go to the documentation of this file.
00001 /*
00002  * @(#)jni.h    1.62 06/02/02
00003  *
00004  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
00005  * SUN PROPRIETARY/CONFIDENTIAL.  Use is subject to license terms.
00006  */
00007 
00008 /*
00009  * We used part of Netscape's Java Runtime Interface (JRI) as the starting
00010  * point of our design and implementation.
00011  */
00012 
00013 /******************************************************************************
00014  * Java Runtime Interface
00015  * Copyright (c) 1996 Netscape Communications Corporation. All rights reserved.
00016  *****************************************************************************/
00017 
00018 #ifndef _JAVASOFT_JNI_H_
00019 #define _JAVASOFT_JNI_H_
00020 
00021 #include <stdio.h>
00022 #include <stdarg.h>
00023 
00024 /* jni_md.h contains the machine-dependent typedefs for jbyte, jint
00025    and jlong */
00026 
00027 #include "jni_md.h"
00028 
00029 #ifdef __cplusplus
00030 extern "C" {
00031 #endif
00032 
00033 /*
00034  * JNI Types
00035  */
00036 
00037 #ifndef JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H
00038 
00039 typedef unsigned char   jboolean;
00040 typedef unsigned short  jchar;
00041 typedef short           jshort;
00042 typedef float           jfloat;
00043 typedef double          jdouble;
00044 
00045 typedef jint            jsize;
00046 
00047 #ifdef __cplusplus
00048 
00049 class _jobject {};
00050 class _jclass : public _jobject {};
00051 class _jthrowable : public _jobject {};
00052 class _jstring : public _jobject {};
00053 class _jarray : public _jobject {};
00054 class _jbooleanArray : public _jarray {};
00055 class _jbyteArray : public _jarray {};
00056 class _jcharArray : public _jarray {};
00057 class _jshortArray : public _jarray {};
00058 class _jintArray : public _jarray {};
00059 class _jlongArray : public _jarray {};
00060 class _jfloatArray : public _jarray {};
00061 class _jdoubleArray : public _jarray {};
00062 class _jobjectArray : public _jarray {};
00063 
00064 typedef _jobject *jobject;
00065 typedef _jclass *jclass;
00066 typedef _jthrowable *jthrowable;
00067 typedef _jstring *jstring;
00068 typedef _jarray *jarray;
00069 typedef _jbooleanArray *jbooleanArray;
00070 typedef _jbyteArray *jbyteArray;
00071 typedef _jcharArray *jcharArray;
00072 typedef _jshortArray *jshortArray;
00073 typedef _jintArray *jintArray;
00074 typedef _jlongArray *jlongArray;
00075 typedef _jfloatArray *jfloatArray;
00076 typedef _jdoubleArray *jdoubleArray;
00077 typedef _jobjectArray *jobjectArray;
00078 
00079 #else
00080 
00081 struct _jobject;
00082 
00083 typedef struct _jobject *jobject;
00084 typedef jobject jclass;
00085 typedef jobject jthrowable;
00086 typedef jobject jstring;
00087 typedef jobject jarray;
00088 typedef jarray jbooleanArray;
00089 typedef jarray jbyteArray;
00090 typedef jarray jcharArray;
00091 typedef jarray jshortArray;
00092 typedef jarray jintArray;
00093 typedef jarray jlongArray;
00094 typedef jarray jfloatArray;
00095 typedef jarray jdoubleArray;
00096 typedef jarray jobjectArray;
00097 
00098 #endif
00099 
00100 typedef jobject jweak;
00101 
00102 typedef union jvalue {
00103     jboolean z;
00104     jbyte    b;
00105     jchar    c;
00106     jshort   s;
00107     jint     i;
00108     jlong    j;
00109     jfloat   f;
00110     jdouble  d;
00111     jobject  l;
00112 } jvalue;
00113 
00114 struct _jfieldID;
00115 typedef struct _jfieldID *jfieldID;
00116 
00117 struct _jmethodID;
00118 typedef struct _jmethodID *jmethodID;
00119 
00120 /* Return values from jobjectRefType */
00121 typedef enum _jobjectType {
00122      JNIInvalidRefType    = 0,
00123      JNILocalRefType      = 1,
00124      JNIGlobalRefType     = 2,
00125      JNIWeakGlobalRefType = 3 
00126 } jobjectRefType;
00127 
00128 
00129 #endif /* JNI_TYPES_ALREADY_DEFINED_IN_JNI_MD_H */
00130 
00131 /*
00132  * jboolean constants
00133  */
00134 
00135 #define JNI_FALSE 0
00136 #define JNI_TRUE 1
00137 
00138 /*
00139  * possible return values for JNI functions.
00140  */
00141 
00142 #define JNI_OK           0                 /* success */
00143 #define JNI_ERR          (-1)              /* unknown error */
00144 #define JNI_EDETACHED    (-2)              /* thread detached from the VM */
00145 #define JNI_EVERSION     (-3)              /* JNI version error */
00146 #define JNI_ENOMEM       (-4)              /* not enough memory */
00147 #define JNI_EEXIST       (-5)              /* VM already created */
00148 #define JNI_EINVAL       (-6)              /* invalid arguments */
00149 
00150 /*
00151  * used in ReleaseScalarArrayElements
00152  */
00153 
00154 #define JNI_COMMIT 1
00155 #define JNI_ABORT 2
00156 
00157 /*
00158  * used in RegisterNatives to describe native method name, signature,
00159  * and function pointer.
00160  */
00161 
00162 typedef struct {
00163     char *name;
00164     char *signature;
00165     void *fnPtr;
00166 } JNINativeMethod;
00167 
00168 /*
00169  * JNI Native Method Interface.
00170  */
00171 
00172 struct JNINativeInterface_;
00173 
00174 struct JNIEnv_;
00175 
00176 #ifdef __cplusplus
00177 typedef JNIEnv_ JNIEnv;
00178 #else
00179 typedef const struct JNINativeInterface_ *JNIEnv;
00180 #endif
00181 
00182 /*
00183  * JNI Invocation Interface.
00184  */
00185 
00186 struct JNIInvokeInterface_;
00187 
00188 struct JavaVM_;
00189 
00190 #ifdef __cplusplus
00191 typedef JavaVM_ JavaVM;
00192 #else
00193 typedef const struct JNIInvokeInterface_ *JavaVM;
00194 #endif
00195 
00196 struct JNINativeInterface_ {
00197     void *reserved0;
00198     void *reserved1;
00199     void *reserved2;
00200 
00201     void *reserved3;
00202     jint (JNICALL *GetVersion)(JNIEnv *env);
00203 
00204     jclass (JNICALL *DefineClass)
00205       (JNIEnv *env, const char *name, jobject loader, const jbyte *buf,
00206        jsize len);
00207     jclass (JNICALL *FindClass)
00208       (JNIEnv *env, const char *name);
00209 
00210     jmethodID (JNICALL *FromReflectedMethod)
00211       (JNIEnv *env, jobject method);
00212     jfieldID (JNICALL *FromReflectedField)
00213       (JNIEnv *env, jobject field);
00214 
00215     jobject (JNICALL *ToReflectedMethod)
00216       (JNIEnv *env, jclass cls, jmethodID methodID, jboolean isStatic);
00217 
00218     jclass (JNICALL *GetSuperclass)
00219       (JNIEnv *env, jclass sub);
00220     jboolean (JNICALL *IsAssignableFrom)
00221       (JNIEnv *env, jclass sub, jclass sup);
00222 
00223     jobject (JNICALL *ToReflectedField)
00224       (JNIEnv *env, jclass cls, jfieldID fieldID, jboolean isStatic);
00225 
00226     jint (JNICALL *Throw)
00227       (JNIEnv *env, jthrowable obj);
00228     jint (JNICALL *ThrowNew)
00229       (JNIEnv *env, jclass clazz, const char *msg);
00230     jthrowable (JNICALL *ExceptionOccurred)
00231       (JNIEnv *env);
00232     void (JNICALL *ExceptionDescribe)
00233       (JNIEnv *env);
00234     void (JNICALL *ExceptionClear)
00235       (JNIEnv *env);
00236     void (JNICALL *FatalError)
00237       (JNIEnv *env, const char *msg);
00238 
00239     jint (JNICALL *PushLocalFrame)
00240       (JNIEnv *env, jint capacity);
00241     jobject (JNICALL *PopLocalFrame)
00242       (JNIEnv *env, jobject result);
00243 
00244     jobject (JNICALL *NewGlobalRef)
00245       (JNIEnv *env, jobject lobj);
00246     void (JNICALL *DeleteGlobalRef)
00247       (JNIEnv *env, jobject gref);
00248     void (JNICALL *DeleteLocalRef)
00249       (JNIEnv *env, jobject obj);
00250     jboolean (JNICALL *IsSameObject)
00251       (JNIEnv *env, jobject obj1, jobject obj2);
00252     jobject (JNICALL *NewLocalRef)
00253       (JNIEnv *env, jobject ref);
00254     jint (JNICALL *EnsureLocalCapacity)
00255       (JNIEnv *env, jint capacity);
00256 
00257     jobject (JNICALL *AllocObject)
00258       (JNIEnv *env, jclass clazz);
00259     jobject (JNICALL *NewObject)
00260       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00261     jobject (JNICALL *NewObjectV)
00262       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00263     jobject (JNICALL *NewObjectA)
00264       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00265 
00266     jclass (JNICALL *GetObjectClass)
00267       (JNIEnv *env, jobject obj);
00268     jboolean (JNICALL *IsInstanceOf)
00269       (JNIEnv *env, jobject obj, jclass clazz);
00270 
00271     jmethodID (JNICALL *GetMethodID)
00272       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
00273 
00274     jobject (JNICALL *CallObjectMethod)
00275       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00276     jobject (JNICALL *CallObjectMethodV)
00277       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00278     jobject (JNICALL *CallObjectMethodA)
00279       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
00280 
00281     jboolean (JNICALL *CallBooleanMethod)
00282       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00283     jboolean (JNICALL *CallBooleanMethodV)
00284       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00285     jboolean (JNICALL *CallBooleanMethodA)
00286       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
00287 
00288     jbyte (JNICALL *CallByteMethod)
00289       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00290     jbyte (JNICALL *CallByteMethodV)
00291       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00292     jbyte (JNICALL *CallByteMethodA)
00293       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
00294 
00295     jchar (JNICALL *CallCharMethod)
00296       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00297     jchar (JNICALL *CallCharMethodV)
00298       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00299     jchar (JNICALL *CallCharMethodA)
00300       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
00301 
00302     jshort (JNICALL *CallShortMethod)
00303       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00304     jshort (JNICALL *CallShortMethodV)
00305       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00306     jshort (JNICALL *CallShortMethodA)
00307       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
00308 
00309     jint (JNICALL *CallIntMethod)
00310       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00311     jint (JNICALL *CallIntMethodV)
00312       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00313     jint (JNICALL *CallIntMethodA)
00314       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
00315 
00316     jlong (JNICALL *CallLongMethod)
00317       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00318     jlong (JNICALL *CallLongMethodV)
00319       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00320     jlong (JNICALL *CallLongMethodA)
00321       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
00322 
00323     jfloat (JNICALL *CallFloatMethod)
00324       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00325     jfloat (JNICALL *CallFloatMethodV)
00326       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00327     jfloat (JNICALL *CallFloatMethodA)
00328       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
00329 
00330     jdouble (JNICALL *CallDoubleMethod)
00331       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00332     jdouble (JNICALL *CallDoubleMethodV)
00333       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00334     jdouble (JNICALL *CallDoubleMethodA)
00335       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue *args);
00336 
00337     void (JNICALL *CallVoidMethod)
00338       (JNIEnv *env, jobject obj, jmethodID methodID, ...);
00339     void (JNICALL *CallVoidMethodV)
00340       (JNIEnv *env, jobject obj, jmethodID methodID, va_list args);
00341     void (JNICALL *CallVoidMethodA)
00342       (JNIEnv *env, jobject obj, jmethodID methodID, const jvalue * args);
00343 
00344     jobject (JNICALL *CallNonvirtualObjectMethod)
00345       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00346     jobject (JNICALL *CallNonvirtualObjectMethodV)
00347       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00348        va_list args);
00349     jobject (JNICALL *CallNonvirtualObjectMethodA)
00350       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00351        const jvalue * args);
00352 
00353     jboolean (JNICALL *CallNonvirtualBooleanMethod)
00354       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00355     jboolean (JNICALL *CallNonvirtualBooleanMethodV)
00356       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00357        va_list args);
00358     jboolean (JNICALL *CallNonvirtualBooleanMethodA)
00359       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00360        const jvalue * args);
00361 
00362     jbyte (JNICALL *CallNonvirtualByteMethod)
00363       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00364     jbyte (JNICALL *CallNonvirtualByteMethodV)
00365       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00366        va_list args);
00367     jbyte (JNICALL *CallNonvirtualByteMethodA)
00368       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00369        const jvalue *args);
00370 
00371     jchar (JNICALL *CallNonvirtualCharMethod)
00372       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00373     jchar (JNICALL *CallNonvirtualCharMethodV)
00374       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00375        va_list args);
00376     jchar (JNICALL *CallNonvirtualCharMethodA)
00377       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00378        const jvalue *args);
00379 
00380     jshort (JNICALL *CallNonvirtualShortMethod)
00381       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00382     jshort (JNICALL *CallNonvirtualShortMethodV)
00383       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00384        va_list args);
00385     jshort (JNICALL *CallNonvirtualShortMethodA)
00386       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00387        const jvalue *args);
00388 
00389     jint (JNICALL *CallNonvirtualIntMethod)
00390       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00391     jint (JNICALL *CallNonvirtualIntMethodV)
00392       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00393        va_list args);
00394     jint (JNICALL *CallNonvirtualIntMethodA)
00395       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00396        const jvalue *args);
00397 
00398     jlong (JNICALL *CallNonvirtualLongMethod)
00399       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00400     jlong (JNICALL *CallNonvirtualLongMethodV)
00401       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00402        va_list args);
00403     jlong (JNICALL *CallNonvirtualLongMethodA)
00404       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00405        const jvalue *args);
00406 
00407     jfloat (JNICALL *CallNonvirtualFloatMethod)
00408       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00409     jfloat (JNICALL *CallNonvirtualFloatMethodV)
00410       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00411        va_list args);
00412     jfloat (JNICALL *CallNonvirtualFloatMethodA)
00413       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00414        const jvalue *args);
00415 
00416     jdouble (JNICALL *CallNonvirtualDoubleMethod)
00417       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00418     jdouble (JNICALL *CallNonvirtualDoubleMethodV)
00419       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00420        va_list args);
00421     jdouble (JNICALL *CallNonvirtualDoubleMethodA)
00422       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00423        const jvalue *args);
00424 
00425     void (JNICALL *CallNonvirtualVoidMethod)
00426       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID, ...);
00427     void (JNICALL *CallNonvirtualVoidMethodV)
00428       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00429        va_list args);
00430     void (JNICALL *CallNonvirtualVoidMethodA)
00431       (JNIEnv *env, jobject obj, jclass clazz, jmethodID methodID,
00432        const jvalue * args);
00433 
00434     jfieldID (JNICALL *GetFieldID)
00435       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
00436 
00437     jobject (JNICALL *GetObjectField)
00438       (JNIEnv *env, jobject obj, jfieldID fieldID);
00439     jboolean (JNICALL *GetBooleanField)
00440       (JNIEnv *env, jobject obj, jfieldID fieldID);
00441     jbyte (JNICALL *GetByteField)
00442       (JNIEnv *env, jobject obj, jfieldID fieldID);
00443     jchar (JNICALL *GetCharField)
00444       (JNIEnv *env, jobject obj, jfieldID fieldID);
00445     jshort (JNICALL *GetShortField)
00446       (JNIEnv *env, jobject obj, jfieldID fieldID);
00447     jint (JNICALL *GetIntField)
00448       (JNIEnv *env, jobject obj, jfieldID fieldID);
00449     jlong (JNICALL *GetLongField)
00450       (JNIEnv *env, jobject obj, jfieldID fieldID);
00451     jfloat (JNICALL *GetFloatField)
00452       (JNIEnv *env, jobject obj, jfieldID fieldID);
00453     jdouble (JNICALL *GetDoubleField)
00454       (JNIEnv *env, jobject obj, jfieldID fieldID);
00455 
00456     void (JNICALL *SetObjectField)
00457       (JNIEnv *env, jobject obj, jfieldID fieldID, jobject val);
00458     void (JNICALL *SetBooleanField)
00459       (JNIEnv *env, jobject obj, jfieldID fieldID, jboolean val);
00460     void (JNICALL *SetByteField)
00461       (JNIEnv *env, jobject obj, jfieldID fieldID, jbyte val);
00462     void (JNICALL *SetCharField)
00463       (JNIEnv *env, jobject obj, jfieldID fieldID, jchar val);
00464     void (JNICALL *SetShortField)
00465       (JNIEnv *env, jobject obj, jfieldID fieldID, jshort val);
00466     void (JNICALL *SetIntField)
00467       (JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
00468     void (JNICALL *SetLongField)
00469       (JNIEnv *env, jobject obj, jfieldID fieldID, jlong val);
00470     void (JNICALL *SetFloatField)
00471       (JNIEnv *env, jobject obj, jfieldID fieldID, jfloat val);
00472     void (JNICALL *SetDoubleField)
00473       (JNIEnv *env, jobject obj, jfieldID fieldID, jdouble val);
00474 
00475     jmethodID (JNICALL *GetStaticMethodID)
00476       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
00477 
00478     jobject (JNICALL *CallStaticObjectMethod)
00479       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00480     jobject (JNICALL *CallStaticObjectMethodV)
00481       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00482     jobject (JNICALL *CallStaticObjectMethodA)
00483       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00484 
00485     jboolean (JNICALL *CallStaticBooleanMethod)
00486       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00487     jboolean (JNICALL *CallStaticBooleanMethodV)
00488       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00489     jboolean (JNICALL *CallStaticBooleanMethodA)
00490       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00491 
00492     jbyte (JNICALL *CallStaticByteMethod)
00493       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00494     jbyte (JNICALL *CallStaticByteMethodV)
00495       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00496     jbyte (JNICALL *CallStaticByteMethodA)
00497       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00498 
00499     jchar (JNICALL *CallStaticCharMethod)
00500       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00501     jchar (JNICALL *CallStaticCharMethodV)
00502       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00503     jchar (JNICALL *CallStaticCharMethodA)
00504       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00505 
00506     jshort (JNICALL *CallStaticShortMethod)
00507       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00508     jshort (JNICALL *CallStaticShortMethodV)
00509       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00510     jshort (JNICALL *CallStaticShortMethodA)
00511       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00512 
00513     jint (JNICALL *CallStaticIntMethod)
00514       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00515     jint (JNICALL *CallStaticIntMethodV)
00516       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00517     jint (JNICALL *CallStaticIntMethodA)
00518       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00519 
00520     jlong (JNICALL *CallStaticLongMethod)
00521       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00522     jlong (JNICALL *CallStaticLongMethodV)
00523       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00524     jlong (JNICALL *CallStaticLongMethodA)
00525       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00526 
00527     jfloat (JNICALL *CallStaticFloatMethod)
00528       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00529     jfloat (JNICALL *CallStaticFloatMethodV)
00530       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00531     jfloat (JNICALL *CallStaticFloatMethodA)
00532       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00533 
00534     jdouble (JNICALL *CallStaticDoubleMethod)
00535       (JNIEnv *env, jclass clazz, jmethodID methodID, ...);
00536     jdouble (JNICALL *CallStaticDoubleMethodV)
00537       (JNIEnv *env, jclass clazz, jmethodID methodID, va_list args);
00538     jdouble (JNICALL *CallStaticDoubleMethodA)
00539       (JNIEnv *env, jclass clazz, jmethodID methodID, const jvalue *args);
00540 
00541     void (JNICALL *CallStaticVoidMethod)
00542       (JNIEnv *env, jclass cls, jmethodID methodID, ...);
00543     void (JNICALL *CallStaticVoidMethodV)
00544       (JNIEnv *env, jclass cls, jmethodID methodID, va_list args);
00545     void (JNICALL *CallStaticVoidMethodA)
00546       (JNIEnv *env, jclass cls, jmethodID methodID, const jvalue * args);
00547 
00548     jfieldID (JNICALL *GetStaticFieldID)
00549       (JNIEnv *env, jclass clazz, const char *name, const char *sig);
00550     jobject (JNICALL *GetStaticObjectField)
00551       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00552     jboolean (JNICALL *GetStaticBooleanField)
00553       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00554     jbyte (JNICALL *GetStaticByteField)
00555       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00556     jchar (JNICALL *GetStaticCharField)
00557       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00558     jshort (JNICALL *GetStaticShortField)
00559       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00560     jint (JNICALL *GetStaticIntField)
00561       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00562     jlong (JNICALL *GetStaticLongField)
00563       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00564     jfloat (JNICALL *GetStaticFloatField)
00565       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00566     jdouble (JNICALL *GetStaticDoubleField)
00567       (JNIEnv *env, jclass clazz, jfieldID fieldID);
00568 
00569     void (JNICALL *SetStaticObjectField)
00570       (JNIEnv *env, jclass clazz, jfieldID fieldID, jobject value);
00571     void (JNICALL *SetStaticBooleanField)
00572       (JNIEnv *env, jclass clazz, jfieldID fieldID, jboolean value);
00573     void (JNICALL *SetStaticByteField)
00574       (JNIEnv *env, jclass clazz, jfieldID fieldID, jbyte value);
00575     void (JNICALL *SetStaticCharField)
00576       (JNIEnv *env, jclass clazz, jfieldID fieldID, jchar value);
00577     void (JNICALL *SetStaticShortField)
00578       (JNIEnv *env, jclass clazz, jfieldID fieldID, jshort value);
00579     void (JNICALL *SetStaticIntField)
00580       (JNIEnv *env, jclass clazz, jfieldID fieldID, jint value);
00581     void (JNICALL *SetStaticLongField)
00582       (JNIEnv *env, jclass clazz, jfieldID fieldID, jlong value);
00583     void (JNICALL *SetStaticFloatField)
00584       (JNIEnv *env, jclass clazz, jfieldID fieldID, jfloat value);
00585     void (JNICALL *SetStaticDoubleField)
00586       (JNIEnv *env, jclass clazz, jfieldID fieldID, jdouble value);
00587 
00588     jstring (JNICALL *NewString)
00589       (JNIEnv *env, const jchar *unicode, jsize len);
00590     jsize (JNICALL *GetStringLength)
00591       (JNIEnv *env, jstring str);
00592     const jchar *(JNICALL *GetStringChars)
00593       (JNIEnv *env, jstring str, jboolean *isCopy);
00594     void (JNICALL *ReleaseStringChars)
00595       (JNIEnv *env, jstring str, const jchar *chars);
00596 
00597     jstring (JNICALL *NewStringUTF)
00598       (JNIEnv *env, const char *utf);
00599     jsize (JNICALL *GetStringUTFLength)
00600       (JNIEnv *env, jstring str);
00601     const char* (JNICALL *GetStringUTFChars)
00602       (JNIEnv *env, jstring str, jboolean *isCopy);
00603     void (JNICALL *ReleaseStringUTFChars)
00604       (JNIEnv *env, jstring str, const char* chars);
00605 
00606 
00607     jsize (JNICALL *GetArrayLength)
00608       (JNIEnv *env, jarray array);
00609 
00610     jobjectArray (JNICALL *NewObjectArray)
00611       (JNIEnv *env, jsize len, jclass clazz, jobject init);
00612     jobject (JNICALL *GetObjectArrayElement)
00613       (JNIEnv *env, jobjectArray array, jsize index);
00614     void (JNICALL *SetObjectArrayElement)
00615       (JNIEnv *env, jobjectArray array, jsize index, jobject val);
00616 
00617     jbooleanArray (JNICALL *NewBooleanArray)
00618       (JNIEnv *env, jsize len);
00619     jbyteArray (JNICALL *NewByteArray)
00620       (JNIEnv *env, jsize len);
00621     jcharArray (JNICALL *NewCharArray)
00622       (JNIEnv *env, jsize len);
00623     jshortArray (JNICALL *NewShortArray)
00624       (JNIEnv *env, jsize len);
00625     jintArray (JNICALL *NewIntArray)
00626       (JNIEnv *env, jsize len);
00627     jlongArray (JNICALL *NewLongArray)
00628       (JNIEnv *env, jsize len);
00629     jfloatArray (JNICALL *NewFloatArray)
00630       (JNIEnv *env, jsize len);
00631     jdoubleArray (JNICALL *NewDoubleArray)
00632       (JNIEnv *env, jsize len);
00633 
00634     jboolean * (JNICALL *GetBooleanArrayElements)
00635       (JNIEnv *env, jbooleanArray array, jboolean *isCopy);
00636     jbyte * (JNICALL *GetByteArrayElements)
00637       (JNIEnv *env, jbyteArray array, jboolean *isCopy);
00638     jchar * (JNICALL *GetCharArrayElements)
00639       (JNIEnv *env, jcharArray array, jboolean *isCopy);
00640     jshort * (JNICALL *GetShortArrayElements)
00641       (JNIEnv *env, jshortArray array, jboolean *isCopy);
00642     jint * (JNICALL *GetIntArrayElements)
00643       (JNIEnv *env, jintArray array, jboolean *isCopy);
00644     jlong * (JNICALL *GetLongArrayElements)
00645       (JNIEnv *env, jlongArray array, jboolean *isCopy);
00646     jfloat * (JNICALL *GetFloatArrayElements)
00647       (JNIEnv *env, jfloatArray array, jboolean *isCopy);
00648     jdouble * (JNICALL *GetDoubleArrayElements)
00649       (JNIEnv *env, jdoubleArray array, jboolean *isCopy);
00650 
00651     void (JNICALL *ReleaseBooleanArrayElements)
00652       (JNIEnv *env, jbooleanArray array, jboolean *elems, jint mode);
00653     void (JNICALL *ReleaseByteArrayElements)
00654       (JNIEnv *env, jbyteArray array, jbyte *elems, jint mode);
00655     void (JNICALL *ReleaseCharArrayElements)
00656       (JNIEnv *env, jcharArray array, jchar *elems, jint mode);
00657     void (JNICALL *ReleaseShortArrayElements)
00658       (JNIEnv *env, jshortArray array, jshort *elems, jint mode);
00659     void (JNICALL *ReleaseIntArrayElements)
00660       (JNIEnv *env, jintArray array, jint *elems, jint mode);
00661     void (JNICALL *ReleaseLongArrayElements)
00662       (JNIEnv *env, jlongArray array, jlong *elems, jint mode);
00663     void (JNICALL *ReleaseFloatArrayElements)
00664       (JNIEnv *env, jfloatArray array, jfloat *elems, jint mode);
00665     void (JNICALL *ReleaseDoubleArrayElements)
00666       (JNIEnv *env, jdoubleArray array, jdouble *elems, jint mode);
00667 
00668     void (JNICALL *GetBooleanArrayRegion)
00669       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, jboolean *buf);
00670     void (JNICALL *GetByteArrayRegion)
00671       (JNIEnv *env, jbyteArray array, jsize start, jsize len, jbyte *buf);
00672     void (JNICALL *GetCharArrayRegion)
00673       (JNIEnv *env, jcharArray array, jsize start, jsize len, jchar *buf);
00674     void (JNICALL *GetShortArrayRegion)
00675       (JNIEnv *env, jshortArray array, jsize start, jsize len, jshort *buf);
00676     void (JNICALL *GetIntArrayRegion)
00677       (JNIEnv *env, jintArray array, jsize start, jsize len, jint *buf);
00678     void (JNICALL *GetLongArrayRegion)
00679       (JNIEnv *env, jlongArray array, jsize start, jsize len, jlong *buf);
00680     void (JNICALL *GetFloatArrayRegion)
00681       (JNIEnv *env, jfloatArray array, jsize start, jsize len, jfloat *buf);
00682     void (JNICALL *GetDoubleArrayRegion)
00683       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, jdouble *buf);
00684 
00685     void (JNICALL *SetBooleanArrayRegion)
00686       (JNIEnv *env, jbooleanArray array, jsize start, jsize l, const jboolean *buf);
00687     void (JNICALL *SetByteArrayRegion)
00688       (JNIEnv *env, jbyteArray array, jsize start, jsize len, const jbyte *buf);
00689     void (JNICALL *SetCharArrayRegion)
00690       (JNIEnv *env, jcharArray array, jsize start, jsize len, const jchar *buf);
00691     void (JNICALL *SetShortArrayRegion)
00692       (JNIEnv *env, jshortArray array, jsize start, jsize len, const jshort *buf);
00693     void (JNICALL *SetIntArrayRegion)
00694       (JNIEnv *env, jintArray array, jsize start, jsize len, const jint *buf);
00695     void (JNICALL *SetLongArrayRegion)
00696       (JNIEnv *env, jlongArray array, jsize start, jsize len, const jlong *buf);
00697     void (JNICALL *SetFloatArrayRegion)
00698       (JNIEnv *env, jfloatArray array, jsize start, jsize len, const jfloat *buf);
00699     void (JNICALL *SetDoubleArrayRegion)
00700       (JNIEnv *env, jdoubleArray array, jsize start, jsize len, const jdouble *buf);
00701 
00702     jint (JNICALL *RegisterNatives)
00703       (JNIEnv *env, jclass clazz, const JNINativeMethod *methods,
00704        jint nMethods);
00705     jint (JNICALL *UnregisterNatives)
00706       (JNIEnv *env, jclass clazz);
00707 
00708     jint (JNICALL *MonitorEnter)
00709       (JNIEnv *env, jobject obj);
00710     jint (JNICALL *MonitorExit)
00711       (JNIEnv *env, jobject obj);
00712 
00713     jint (JNICALL *GetJavaVM)
00714       (JNIEnv *env, JavaVM **vm);
00715 
00716     void (JNICALL *GetStringRegion)
00717       (JNIEnv *env, jstring str, jsize start, jsize len, jchar *buf);
00718     void (JNICALL *GetStringUTFRegion)
00719       (JNIEnv *env, jstring str, jsize start, jsize len, char *buf);
00720 
00721     void * (JNICALL *GetPrimitiveArrayCritical)
00722       (JNIEnv *env, jarray array, jboolean *isCopy);
00723     void (JNICALL *ReleasePrimitiveArrayCritical)
00724       (JNIEnv *env, jarray array, void *carray, jint mode);
00725 
00726     const jchar * (JNICALL *GetStringCritical)
00727       (JNIEnv *env, jstring string, jboolean *isCopy);
00728     void (JNICALL *ReleaseStringCritical)
00729       (JNIEnv *env, jstring string, const jchar *cstring);
00730 
00731     jweak (JNICALL *NewWeakGlobalRef)
00732        (JNIEnv *env, jobject obj);
00733     void (JNICALL *DeleteWeakGlobalRef)
00734        (JNIEnv *env, jweak ref);
00735 
00736     jboolean (JNICALL *ExceptionCheck)
00737        (JNIEnv *env);
00738 
00739     jobject (JNICALL *NewDirectByteBuffer)
00740        (JNIEnv* env, void* address, jlong capacity);
00741     void* (JNICALL *GetDirectBufferAddress)
00742        (JNIEnv* env, jobject buf);
00743     jlong (JNICALL *GetDirectBufferCapacity)
00744        (JNIEnv* env, jobject buf);
00745 
00746     /* New JNI 1.6 Features */
00747 
00748     jobjectRefType (JNICALL *GetObjectRefType)
00749         (JNIEnv* env, jobject obj);
00750 };
00751 
00752 /*
00753  * We use inlined functions for C++ so that programmers can write:
00754  *
00755  *    env->FindClass("java/lang/String")
00756  *
00757  * in C++ rather than:
00758  *
00759  *    (*env)->FindClass(env, "java/lang/String")
00760  *
00761  * in C.
00762  */
00763 
00764 struct JNIEnv_ {
00765     const struct JNINativeInterface_ *functions;
00766 #ifdef __cplusplus
00767 
00768     jint GetVersion() {
00769         return functions->GetVersion(this);
00770     }
00771     jclass DefineClass(const char *name, jobject loader, const jbyte *buf,
00772                        jsize len) {
00773         return functions->DefineClass(this, name, loader, buf, len);
00774     }
00775     jclass FindClass(const char *name) {
00776         return functions->FindClass(this, name);
00777     }
00778     jmethodID FromReflectedMethod(jobject method) {
00779         return functions->FromReflectedMethod(this,method);
00780     }
00781     jfieldID FromReflectedField(jobject field) {
00782         return functions->FromReflectedField(this,field);
00783     }
00784 
00785     jobject ToReflectedMethod(jclass cls, jmethodID methodID, jboolean isStatic) {
00786         return functions->ToReflectedMethod(this, cls, methodID, isStatic);
00787     }
00788 
00789     jclass GetSuperclass(jclass sub) {
00790         return functions->GetSuperclass(this, sub);
00791     }
00792     jboolean IsAssignableFrom(jclass sub, jclass sup) {
00793         return functions->IsAssignableFrom(this, sub, sup);
00794     }
00795 
00796     jobject ToReflectedField(jclass cls, jfieldID fieldID, jboolean isStatic) {
00797         return functions->ToReflectedField(this,cls,fieldID,isStatic);
00798     }
00799 
00800     jint Throw(jthrowable obj) {
00801         return functions->Throw(this, obj);
00802     }
00803     jint ThrowNew(jclass clazz, const char *msg) {
00804         return functions->ThrowNew(this, clazz, msg);
00805     }
00806     jthrowable ExceptionOccurred() {
00807         return functions->ExceptionOccurred(this);
00808     }
00809     void ExceptionDescribe() {
00810         functions->ExceptionDescribe(this);
00811     }
00812     void ExceptionClear() {
00813         functions->ExceptionClear(this);
00814     }
00815     void FatalError(const char *msg) {
00816         functions->FatalError(this, msg);
00817     }
00818 
00819     jint PushLocalFrame(jint capacity) {
00820         return functions->PushLocalFrame(this,capacity);
00821     }
00822     jobject PopLocalFrame(jobject result) {
00823         return functions->PopLocalFrame(this,result);
00824     }
00825 
00826     jobject NewGlobalRef(jobject lobj) {
00827         return functions->NewGlobalRef(this,lobj);
00828     }
00829     void DeleteGlobalRef(jobject gref) {
00830         functions->DeleteGlobalRef(this,gref);
00831     }
00832     void DeleteLocalRef(jobject obj) {
00833         functions->DeleteLocalRef(this, obj);
00834     }
00835 
00836     jboolean IsSameObject(jobject obj1, jobject obj2) {
00837         return functions->IsSameObject(this,obj1,obj2);
00838     }
00839 
00840     jobject NewLocalRef(jobject ref) {
00841         return functions->NewLocalRef(this,ref);
00842     }
00843     jint EnsureLocalCapacity(jint capacity) {
00844         return functions->EnsureLocalCapacity(this,capacity);
00845     }
00846 
00847     jobject AllocObject(jclass clazz) {
00848         return functions->AllocObject(this,clazz);
00849     }
00850     jobject NewObject(jclass clazz, jmethodID methodID, ...) {
00851         va_list args;
00852         jobject result;
00853         va_start(args, methodID);
00854         result = functions->NewObjectV(this,clazz,methodID,args);
00855         va_end(args);
00856         return result;
00857     }
00858     jobject NewObjectV(jclass clazz, jmethodID methodID,
00859                        va_list args) {
00860         return functions->NewObjectV(this,clazz,methodID,args);
00861     }
00862     jobject NewObjectA(jclass clazz, jmethodID methodID,
00863                        const jvalue *args) {
00864         return functions->NewObjectA(this,clazz,methodID,args);
00865     }
00866 
00867     jclass GetObjectClass(jobject obj) {
00868         return functions->GetObjectClass(this,obj);
00869     }
00870     jboolean IsInstanceOf(jobject obj, jclass clazz) {
00871         return functions->IsInstanceOf(this,obj,clazz);
00872     }
00873 
00874     jmethodID GetMethodID(jclass clazz, const char *name,
00875                           const char *sig) {
00876         return functions->GetMethodID(this,clazz,name,sig);
00877     }
00878 
00879     jobject CallObjectMethod(jobject obj, jmethodID methodID, ...) {
00880         va_list args;
00881         jobject result;
00882         va_start(args,methodID);
00883         result = functions->CallObjectMethodV(this,obj,methodID,args);
00884         va_end(args);
00885         return result;
00886     }
00887     jobject CallObjectMethodV(jobject obj, jmethodID methodID,
00888                         va_list args) {
00889         return functions->CallObjectMethodV(this,obj,methodID,args);
00890     }
00891     jobject CallObjectMethodA(jobject obj, jmethodID methodID,
00892                         const jvalue * args) {
00893         return functions->CallObjectMethodA(this,obj,methodID,args);
00894     }
00895 
00896     jboolean CallBooleanMethod(jobject obj,
00897                                jmethodID methodID, ...) {
00898         va_list args;
00899         jboolean result;
00900         va_start(args,methodID);
00901         result = functions->CallBooleanMethodV(this,obj,methodID,args);
00902         va_end(args);
00903         return result;
00904     }
00905     jboolean CallBooleanMethodV(jobject obj, jmethodID methodID,
00906                                 va_list args) {
00907         return functions->CallBooleanMethodV(this,obj,methodID,args);
00908     }
00909     jboolean CallBooleanMethodA(jobject obj, jmethodID methodID,
00910                                 const jvalue * args) {
00911         return functions->CallBooleanMethodA(this,obj,methodID, args);
00912     }
00913 
00914     jbyte CallByteMethod(jobject obj, jmethodID methodID, ...) {
00915         va_list args;
00916         jbyte result;
00917         va_start(args,methodID);
00918         result = functions->CallByteMethodV(this,obj,methodID,args);
00919         va_end(args);
00920         return result;
00921     }
00922     jbyte CallByteMethodV(jobject obj, jmethodID methodID,
00923                           va_list args) {
00924         return functions->CallByteMethodV(this,obj,methodID,args);
00925     }
00926     jbyte CallByteMethodA(jobject obj, jmethodID methodID,
00927                           const jvalue * args) {
00928         return functions->CallByteMethodA(this,obj,methodID,args);
00929     }
00930 
00931     jchar CallCharMethod(jobject obj, jmethodID methodID, ...) {
00932         va_list args;
00933         jchar result;
00934         va_start(args,methodID);
00935         result = functions->CallCharMethodV(this,obj,methodID,args);
00936         va_end(args);
00937         return result;
00938     }
00939     jchar CallCharMethodV(jobject obj, jmethodID methodID,
00940                           va_list args) {
00941         return functions->CallCharMethodV(this,obj,methodID,args);
00942     }
00943     jchar CallCharMethodA(jobject obj, jmethodID methodID,
00944                           const jvalue * args) {
00945         return functions->CallCharMethodA(this,obj,methodID,args);
00946     }
00947 
00948     jshort CallShortMethod(jobject obj, jmethodID methodID, ...) {
00949         va_list args;
00950         jshort result;
00951         va_start(args,methodID);
00952         result = functions->CallShortMethodV(this,obj,methodID,args);
00953         va_end(args);
00954         return result;
00955     }
00956     jshort CallShortMethodV(jobject obj, jmethodID methodID,
00957                             va_list args) {
00958         return functions->CallShortMethodV(this,obj,methodID,args);
00959     }
00960     jshort CallShortMethodA(jobject obj, jmethodID methodID,
00961                             const jvalue * args) {
00962         return functions->CallShortMethodA(this,obj,methodID,args);
00963     }
00964 
00965     jint CallIntMethod(jobject obj, jmethodID methodID, ...) {
00966         va_list args;
00967         jint result;
00968         va_start(args,methodID);
00969         result = functions->CallIntMethodV(this,obj,methodID,args);
00970         va_end(args);
00971         return result;
00972     }
00973     jint CallIntMethodV(jobject obj, jmethodID methodID,
00974                         va_list args) {
00975         return functions->CallIntMethodV(this,obj,methodID,args);
00976     }
00977     jint CallIntMethodA(jobject obj, jmethodID methodID,
00978                         const jvalue * args) {
00979         return functions->CallIntMethodA(this,obj,methodID,args);
00980     }
00981 
00982     jlong CallLongMethod(jobject obj, jmethodID methodID, ...) {
00983         va_list args;
00984         jlong result;
00985         va_start(args,methodID);
00986         result = functions->CallLongMethodV(this,obj,methodID,args);
00987         va_end(args);
00988         return result;
00989     }
00990     jlong CallLongMethodV(jobject obj, jmethodID methodID,
00991                           va_list args) {
00992         return functions->CallLongMethodV(this,obj,methodID,args);
00993     }
00994     jlong CallLongMethodA(jobject obj, jmethodID methodID,
00995                           const jvalue * args) {
00996         return functions->CallLongMethodA(this,obj,methodID,args);
00997     }
00998 
00999     jfloat CallFloatMethod(jobject obj, jmethodID methodID, ...) {
01000         va_list args;
01001         jfloat result;
01002         va_start(args,methodID);
01003         result = functions->CallFloatMethodV(this,obj,methodID,args);
01004         va_end(args);
01005         return result;
01006     }
01007     jfloat CallFloatMethodV(jobject obj, jmethodID methodID,
01008                             va_list args) {
01009         return functions->CallFloatMethodV(this,obj,methodID,args);
01010     }
01011     jfloat CallFloatMethodA(jobject obj, jmethodID methodID,
01012                             const jvalue * args) {
01013         return functions->CallFloatMethodA(this,obj,methodID,args);
01014     }
01015 
01016     jdouble CallDoubleMethod(jobject obj, jmethodID methodID, ...) {
01017         va_list args;
01018         jdouble result;
01019         va_start(args,methodID);
01020         result = functions->CallDoubleMethodV(this,obj,methodID,args);
01021         va_end(args);
01022         return result;
01023     }
01024     jdouble CallDoubleMethodV(jobject obj, jmethodID methodID,
01025                         va_list args) {
01026         return functions->CallDoubleMethodV(this,obj,methodID,args);
01027     }
01028     jdouble CallDoubleMethodA(jobject obj, jmethodID methodID,
01029                         const jvalue * args) {
01030         return functions->CallDoubleMethodA(this,obj,methodID,args);
01031     }
01032 
01033     void CallVoidMethod(jobject obj, jmethodID methodID, ...) {
01034         va_list args;
01035         va_start(args,methodID);
01036         functions->CallVoidMethodV(this,obj,methodID,args);
01037         va_end(args);
01038     }
01039     void CallVoidMethodV(jobject obj, jmethodID methodID,
01040                          va_list args) {
01041         functions->CallVoidMethodV(this,obj,methodID,args);
01042     }
01043     void CallVoidMethodA(jobject obj, jmethodID methodID,
01044                          const jvalue * args) {
01045         functions->CallVoidMethodA(this,obj,methodID,args);
01046     }
01047 
01048     jobject CallNonvirtualObjectMethod(jobject obj, jclass clazz,
01049                                        jmethodID methodID, ...) {
01050         va_list args;
01051         jobject result;
01052         va_start(args,methodID);
01053         result = functions->CallNonvirtualObjectMethodV(this,obj,clazz,
01054                                                         methodID,args);
01055         va_end(args);
01056         return result;
01057     }
01058     jobject CallNonvirtualObjectMethodV(jobject obj, jclass clazz,
01059                                         jmethodID methodID, va_list args) {
01060         return functions->CallNonvirtualObjectMethodV(this,obj,clazz,
01061                                                       methodID,args);
01062     }
01063     jobject CallNonvirtualObjectMethodA(jobject obj, jclass clazz,
01064                                         jmethodID methodID, const jvalue * args) {
01065         return functions->CallNonvirtualObjectMethodA(this,obj,clazz,
01066                                                       methodID,args);
01067     }
01068 
01069     jboolean CallNonvirtualBooleanMethod(jobject obj, jclass clazz,
01070                                          jmethodID methodID, ...) {
01071         va_list args;
01072         jboolean result;
01073         va_start(args,methodID);
01074         result = functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
01075                                                          methodID,args);
01076         va_end(args);
01077         return result;
01078     }
01079     jboolean CallNonvirtualBooleanMethodV(jobject obj, jclass clazz,
01080                                           jmethodID methodID, va_list args) {
01081         return functions->CallNonvirtualBooleanMethodV(this,obj,clazz,
01082                                                        methodID,args);
01083     }
01084     jboolean CallNonvirtualBooleanMethodA(jobject obj, jclass clazz,
01085                                           jmethodID methodID, const jvalue * args) {
01086         return functions->CallNonvirtualBooleanMethodA(this,obj,clazz,
01087                                                        methodID, args);
01088     }
01089 
01090     jbyte CallNonvirtualByteMethod(jobject obj, jclass clazz,
01091                                    jmethodID methodID, ...) {
01092         va_list args;
01093         jbyte result;
01094         va_start(args,methodID);
01095         result = functions->CallNonvirtualByteMethodV(this,obj,clazz,
01096                                                       methodID,args);
01097         va_end(args);
01098         return result;
01099     }
01100     jbyte CallNonvirtualByteMethodV(jobject obj, jclass clazz,
01101                                     jmethodID methodID, va_list args) {
01102         return functions->CallNonvirtualByteMethodV(this,obj,clazz,
01103                                                     methodID,args);
01104     }
01105     jbyte CallNonvirtualByteMethodA(jobject obj, jclass clazz,
01106                                     jmethodID methodID, const jvalue * args) {
01107         return functions->CallNonvirtualByteMethodA(this,obj,clazz,
01108                                                     methodID,args);
01109     }
01110 
01111     jchar CallNonvirtualCharMethod(jobject obj, jclass clazz,
01112                                    jmethodID methodID, ...) {
01113         va_list args;
01114         jchar result;
01115         va_start(args,methodID);
01116         result = functions->CallNonvirtualCharMethodV(this,obj,clazz,
01117                                                       methodID,args);
01118         va_end(args);
01119         return result;
01120     }
01121     jchar CallNonvirtualCharMethodV(jobject obj, jclass clazz,
01122                                     jmethodID methodID, va_list args) {
01123         return functions->CallNonvirtualCharMethodV(this,obj,clazz,
01124                                                     methodID,args);
01125     }
01126     jchar CallNonvirtualCharMethodA(jobject obj, jclass clazz,
01127                                     jmethodID methodID, const jvalue * args) {
01128         return functions->CallNonvirtualCharMethodA(this,obj,clazz,
01129                                                     methodID,args);
01130     }
01131 
01132     jshort CallNonvirtualShortMethod(jobject obj, jclass clazz,
01133                                      jmethodID methodID, ...) {
01134         va_list args;
01135         jshort result;
01136         va_start(args,methodID);
01137         result = functions->CallNonvirtualShortMethodV(this,obj,clazz,
01138                                                        methodID,args);
01139         va_end(args);
01140         return result;
01141     }
01142     jshort CallNonvirtualShortMethodV(jobject obj, jclass clazz,
01143                                       jmethodID methodID, va_list args) {
01144         return functions->CallNonvirtualShortMethodV(this,obj,clazz,
01145                                                      methodID,args);
01146     }
01147     jshort CallNonvirtualShortMethodA(jobject obj, jclass clazz,
01148                                       jmethodID methodID, const jvalue * args) {
01149         return functions->CallNonvirtualShortMethodA(this,obj,clazz,
01150                                                      methodID,args);
01151     }
01152 
01153     jint CallNonvirtualIntMethod(jobject obj, jclass clazz,
01154                                  jmethodID methodID, ...) {
01155         va_list args;
01156         jint result;
01157         va_start(args,methodID);
01158         result = functions->CallNonvirtualIntMethodV(this,obj,clazz,
01159                                                      methodID,args);
01160         va_end(args);
01161         return result;
01162     }
01163     jint CallNonvirtualIntMethodV(jobject obj, jclass clazz,
01164                                   jmethodID methodID, va_list args) {
01165         return functions->CallNonvirtualIntMethodV(this,obj,clazz,
01166                                                    methodID,args);
01167     }
01168     jint CallNonvirtualIntMethodA(jobject obj, jclass clazz,
01169                                   jmethodID methodID, const jvalue * args) {
01170         return functions->CallNonvirtualIntMethodA(this,obj,clazz,
01171                                                    methodID,args);
01172     }
01173 
01174     jlong CallNonvirtualLongMethod(jobject obj, jclass clazz,
01175                                    jmethodID methodID, ...) {
01176         va_list args;
01177         jlong result;
01178         va_start(args,methodID);
01179         result = functions->CallNonvirtualLongMethodV(this,obj,clazz,
01180                                                       methodID,args);
01181         va_end(args);
01182         return result;
01183     }
01184     jlong CallNonvirtualLongMethodV(jobject obj, jclass clazz,
01185                                     jmethodID methodID, va_list args) {
01186         return functions->CallNonvirtualLongMethodV(this,obj,clazz,
01187                                                     methodID,args);
01188     }
01189     jlong CallNonvirtualLongMethodA(jobject obj, jclass clazz,
01190                                     jmethodID methodID, const jvalue * args) {
01191         return functions->CallNonvirtualLongMethodA(this,obj,clazz,
01192                                                     methodID,args);
01193     }
01194 
01195     jfloat CallNonvirtualFloatMethod(jobject obj, jclass clazz,
01196                                      jmethodID methodID, ...) {
01197         va_list args;
01198         jfloat result;
01199         va_start(args,methodID);
01200         result = functions->CallNonvirtualFloatMethodV(this,obj,clazz,
01201                                                        methodID,args);
01202         va_end(args);
01203         return result;
01204     }
01205     jfloat CallNonvirtualFloatMethodV(jobject obj, jclass clazz,
01206                                       jmethodID methodID,
01207                                       va_list args) {
01208         return functions->CallNonvirtualFloatMethodV(this,obj,clazz,
01209                                                      methodID,args);
01210     }
01211     jfloat CallNonvirtualFloatMethodA(jobject obj, jclass clazz,
01212                                       jmethodID methodID,
01213                                       const jvalue * args) {
01214         return functions->CallNonvirtualFloatMethodA(this,obj,clazz,
01215                                                      methodID,args);
01216     }
01217 
01218     jdouble CallNonvirtualDoubleMethod(jobject obj, jclass clazz,
01219                                        jmethodID methodID, ...) {
01220         va_list args;
01221         jdouble result;
01222         va_start(args,methodID);
01223         result = functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
01224                                                         methodID,args);
01225         va_end(args);
01226         return result;
01227     }
01228     jdouble CallNonvirtualDoubleMethodV(jobject obj, jclass clazz,
01229                                         jmethodID methodID,
01230                                         va_list args) {
01231         return functions->CallNonvirtualDoubleMethodV(this,obj,clazz,
01232                                                       methodID,args);
01233     }
01234     jdouble CallNonvirtualDoubleMethodA(jobject obj, jclass clazz,
01235                                         jmethodID methodID,
01236                                         const jvalue * args) {
01237         return functions->CallNonvirtualDoubleMethodA(this,obj,clazz,
01238                                                       methodID,args);
01239     }
01240 
01241     void CallNonvirtualVoidMethod(jobject obj, jclass clazz,
01242                                   jmethodID methodID, ...) {
01243         va_list args;
01244         va_start(args,methodID);
01245         functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
01246         va_end(args);
01247     }
01248     void CallNonvirtualVoidMethodV(jobject obj, jclass clazz,
01249                                    jmethodID methodID,
01250                                    va_list args) {
01251         functions->CallNonvirtualVoidMethodV(this,obj,clazz,methodID,args);
01252     }
01253     void CallNonvirtualVoidMethodA(jobject obj, jclass clazz,
01254                                    jmethodID methodID,
01255                                    const jvalue * args) {
01256         functions->CallNonvirtualVoidMethodA(this,obj,clazz,methodID,args);
01257     }
01258 
01259     jfieldID GetFieldID(jclass clazz, const char *name,
01260                         const char *sig) {
01261         return functions->GetFieldID(this,clazz,name,sig);
01262     }
01263 
01264     jobject GetObjectField(jobject obj, jfieldID fieldID) {
01265         return functions->GetObjectField(this,obj,fieldID);
01266     }
01267     jboolean GetBooleanField(jobject obj, jfieldID fieldID) {
01268         return functions->GetBooleanField(this,obj,fieldID);
01269     }
01270     jbyte GetByteField(jobject obj, jfieldID fieldID) {
01271         return functions->GetByteField(this,obj,fieldID);
01272     }
01273     jchar GetCharField(jobject obj, jfieldID fieldID) {
01274         return functions->GetCharField(this,obj,fieldID);
01275     }
01276     jshort GetShortField(jobject obj, jfieldID fieldID) {
01277         return functions->GetShortField(this,obj,fieldID);
01278     }
01279     jint GetIntField(jobject obj, jfieldID fieldID) {
01280         return functions->GetIntField(this,obj,fieldID);
01281     }
01282     jlong GetLongField(jobject obj, jfieldID fieldID) {
01283         return functions->GetLongField(this,obj,fieldID);
01284     }
01285     jfloat GetFloatField(jobject obj, jfieldID fieldID) {
01286         return functions->GetFloatField(this,obj,fieldID);
01287     }
01288     jdouble GetDoubleField(jobject obj, jfieldID fieldID) {
01289         return functions->GetDoubleField(this,obj,fieldID);
01290     }
01291 
01292     void SetObjectField(jobject obj, jfieldID fieldID, jobject val) {
01293         functions->SetObjectField(this,obj,fieldID,val);
01294     }
01295     void SetBooleanField(jobject obj, jfieldID fieldID,
01296                          jboolean val) {
01297         functions->SetBooleanField(this,obj,fieldID,val);
01298     }
01299     void SetByteField(jobject obj, jfieldID fieldID,
01300                       jbyte val) {
01301         functions->SetByteField(this,obj,fieldID,val);
01302     }
01303     void SetCharField(jobject obj, jfieldID fieldID,
01304                       jchar val) {
01305         functions->SetCharField(this,obj,fieldID,val);
01306     }
01307     void SetShortField(jobject obj, jfieldID fieldID,
01308                        jshort val) {
01309         functions->SetShortField(this,obj,fieldID,val);
01310     }
01311     void SetIntField(jobject obj, jfieldID fieldID,
01312                      jint val) {
01313         functions->SetIntField(this,obj,fieldID,val);
01314     }
01315     void SetLongField(jobject obj, jfieldID fieldID,
01316                       jlong val) {
01317         functions->SetLongField(this,obj,fieldID,val);
01318     }
01319     void SetFloatField(jobject obj, jfieldID fieldID,
01320                        jfloat val) {
01321         functions->SetFloatField(this,obj,fieldID,val);
01322     }
01323     void SetDoubleField(jobject obj, jfieldID fieldID,
01324                         jdouble val) {
01325         functions->SetDoubleField(this,obj,fieldID,val);
01326     }
01327 
01328     jmethodID GetStaticMethodID(jclass clazz, const char *name,
01329                                 const char *sig) {
01330         return functions->GetStaticMethodID(this,clazz,name,sig);
01331     }
01332 
01333     jobject CallStaticObjectMethod(jclass clazz, jmethodID methodID,
01334                              ...) {
01335         va_list args;
01336         jobject result;
01337         va_start(args,methodID);
01338         result = functions->CallStaticObjectMethodV(this,clazz,methodID,args);
01339         va_end(args);
01340         return result;
01341     }
01342     jobject CallStaticObjectMethodV(jclass clazz, jmethodID methodID,
01343                               va_list args) {
01344         return functions->CallStaticObjectMethodV(this,clazz,methodID,args);
01345     }
01346     jobject CallStaticObjectMethodA(jclass clazz, jmethodID methodID,
01347                               const jvalue *args) {
01348         return functions->CallStaticObjectMethodA(this,clazz,methodID,args);
01349     }
01350 
01351     jboolean CallStaticBooleanMethod(jclass clazz,
01352                                      jmethodID methodID, ...) {
01353         va_list args;
01354         jboolean result;
01355         va_start(args,methodID);
01356         result = functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
01357         va_end(args);
01358         return result;
01359     }
01360     jboolean CallStaticBooleanMethodV(jclass clazz,
01361                                       jmethodID methodID, va_list args) {
01362         return functions->CallStaticBooleanMethodV(this,clazz,methodID,args);
01363     }
01364     jboolean CallStaticBooleanMethodA(jclass clazz,
01365                                       jmethodID methodID, const jvalue *args) {
01366         return functions->CallStaticBooleanMethodA(this,clazz,methodID,args);
01367     }
01368 
01369     jbyte CallStaticByteMethod(jclass clazz,
01370                                jmethodID methodID, ...) {
01371         va_list args;
01372         jbyte result;
01373         va_start(args,methodID);
01374         result = functions->CallStaticByteMethodV(this,clazz,methodID,args);
01375         va_end(args);
01376         return result;
01377     }
01378     jbyte CallStaticByteMethodV(jclass clazz,
01379                                 jmethodID methodID, va_list args) {
01380         return functions->CallStaticByteMethodV(this,clazz,methodID,args);
01381     }
01382     jbyte CallStaticByteMethodA(jclass clazz,
01383                                 jmethodID methodID, const jvalue *args) {
01384         return functions->CallStaticByteMethodA(this,clazz,methodID,args);
01385     }
01386 
01387     jchar CallStaticCharMethod(jclass clazz,
01388                                jmethodID methodID, ...) {
01389         va_list args;
01390         jchar result;
01391         va_start(args,methodID);
01392         result = functions->CallStaticCharMethodV(this,clazz,methodID,args);
01393         va_end(args);
01394         return result;
01395     }
01396     jchar CallStaticCharMethodV(jclass clazz,
01397                                 jmethodID methodID, va_list args) {
01398         return functions->CallStaticCharMethodV(this,clazz,methodID,args);
01399     }
01400     jchar CallStaticCharMethodA(jclass clazz,
01401                                 jmethodID methodID, const jvalue *args) {
01402         return functions->CallStaticCharMethodA(this,clazz,methodID,args);
01403     }
01404 
01405     jshort CallStaticShortMethod(jclass clazz,
01406                                  jmethodID methodID, ...) {
01407         va_list args;
01408         jshort result;
01409         va_start(args,methodID);
01410         result = functions->CallStaticShortMethodV(this,clazz,methodID,args);
01411         va_end(args);
01412         return result;
01413     }
01414     jshort CallStaticShortMethodV(jclass clazz,
01415                                   jmethodID methodID, va_list args) {
01416         return functions->CallStaticShortMethodV(this,clazz,methodID,args);
01417     }
01418     jshort CallStaticShortMethodA(jclass clazz,
01419                                   jmethodID methodID, const jvalue *args) {
01420         return functions->CallStaticShortMethodA(this,clazz,methodID,args);
01421     }
01422 
01423     jint CallStaticIntMethod(jclass clazz,
01424                              jmethodID methodID, ...) {
01425         va_list args;
01426         jint result;
01427         va_start(args,methodID);
01428         result = functions->CallStaticIntMethodV(this,clazz,methodID,args);
01429         va_end(args);
01430         return result;
01431     }
01432     jint CallStaticIntMethodV(jclass clazz,
01433                               jmethodID methodID, va_list args) {
01434         return functions->CallStaticIntMethodV(this,clazz,methodID,args);
01435     }
01436     jint CallStaticIntMethodA(jclass clazz,
01437                               jmethodID methodID, const jvalue *args) {
01438         return functions->CallStaticIntMethodA(this,clazz,methodID,args);
01439     }
01440 
01441     jlong CallStaticLongMethod(jclass clazz,
01442                                jmethodID methodID, ...) {
01443         va_list args;
01444         jlong result;
01445         va_start(args,methodID);
01446         result = functions->CallStaticLongMethodV(this,clazz,methodID,args);
01447         va_end(args);
01448         return result;
01449     }
01450     jlong CallStaticLongMethodV(jclass clazz,
01451                                 jmethodID methodID, va_list args) {
01452         return functions->CallStaticLongMethodV(this,clazz,methodID,args);
01453     }
01454     jlong CallStaticLongMethodA(jclass clazz,
01455                                 jmethodID methodID, const jvalue *args) {
01456         return functions->CallStaticLongMethodA(this,clazz,methodID,args);
01457     }
01458 
01459     jfloat CallStaticFloatMethod(jclass clazz,
01460                                  jmethodID methodID, ...) {
01461         va_list args;
01462         jfloat result;
01463         va_start(args,methodID);
01464         result = functions->CallStaticFloatMethodV(this,clazz,methodID,args);
01465         va_end(args);
01466         return result;
01467     }
01468     jfloat CallStaticFloatMethodV(jclass clazz,
01469                                   jmethodID methodID, va_list args) {
01470         return functions->CallStaticFloatMethodV(this,clazz,methodID,args);
01471     }
01472     jfloat CallStaticFloatMethodA(jclass clazz,
01473                                   jmethodID methodID, const jvalue *args) {
01474         return functions->CallStaticFloatMethodA(this,clazz,methodID,args);
01475     }
01476 
01477     jdouble CallStaticDoubleMethod(jclass clazz,
01478                                    jmethodID methodID, ...) {
01479         va_list args;
01480         jdouble result;
01481         va_start(args,methodID);
01482         result = functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
01483         va_end(args);
01484         return result;
01485     }
01486     jdouble CallStaticDoubleMethodV(jclass clazz,
01487                                     jmethodID methodID, va_list args) {
01488         return functions->CallStaticDoubleMethodV(this,clazz,methodID,args);
01489     }
01490     jdouble CallStaticDoubleMethodA(jclass clazz,
01491                                     jmethodID methodID, const jvalue *args) {
01492         return functions->CallStaticDoubleMethodA(this,clazz,methodID,args);
01493     }
01494 
01495     void CallStaticVoidMethod(jclass cls, jmethodID methodID, ...) {
01496         va_list args;
01497         va_start(args,methodID);
01498         functions->CallStaticVoidMethodV(this,cls,methodID,args);
01499         va_end(args);
01500     }
01501     void CallStaticVoidMethodV(jclass cls, jmethodID methodID,
01502                                va_list args) {
01503         functions->CallStaticVoidMethodV(this,cls,methodID,args);
01504     }
01505     void CallStaticVoidMethodA(jclass cls, jmethodID methodID,
01506                                const jvalue * args) {
01507         functions->CallStaticVoidMethodA(this,cls,methodID,args);
01508     }
01509 
01510     jfieldID GetStaticFieldID(jclass clazz, const char *name,
01511                               const char *sig) {
01512         return functions->GetStaticFieldID(this,clazz,name,sig);
01513     }
01514     jobject GetStaticObjectField(jclass clazz, jfieldID fieldID) {
01515         return functions->GetStaticObjectField(this,clazz,fieldID);
01516     }
01517     jboolean GetStaticBooleanField(jclass clazz, jfieldID fieldID) {
01518         return functions->GetStaticBooleanField(this,clazz,fieldID);
01519     }
01520     jbyte GetStaticByteField(jclass clazz, jfieldID fieldID) {
01521         return functions->GetStaticByteField(this,clazz,fieldID);
01522     }
01523     jchar GetStaticCharField(jclass clazz, jfieldID fieldID) {
01524         return functions->GetStaticCharField(this,clazz,fieldID);
01525     }
01526     jshort GetStaticShortField(jclass clazz, jfieldID fieldID) {
01527         return functions->GetStaticShortField(this,clazz,fieldID);
01528     }
01529     jint GetStaticIntField(jclass clazz, jfieldID fieldID) {
01530         return functions->GetStaticIntField(this,clazz,fieldID);
01531     }
01532     jlong GetStaticLongField(jclass clazz, jfieldID fieldID) {
01533         return functions->GetStaticLongField(this,clazz,fieldID);
01534     }
01535     jfloat GetStaticFloatField(jclass clazz, jfieldID fieldID) {
01536         return functions->GetStaticFloatField(this,clazz,fieldID);
01537     }
01538     jdouble GetStaticDoubleField(jclass clazz, jfieldID fieldID) {
01539         return functions->GetStaticDoubleField(this,clazz,fieldID);
01540     }
01541 
01542     void SetStaticObjectField(jclass clazz, jfieldID fieldID,
01543                         jobject value) {
01544       functions->SetStaticObjectField(this,clazz,fieldID,value);
01545     }
01546     void SetStaticBooleanField(jclass clazz, jfieldID fieldID,
01547                         jboolean value) {
01548       functions->SetStaticBooleanField(this,clazz,fieldID,value);
01549     }
01550     void SetStaticByteField(jclass clazz, jfieldID fieldID,
01551                         jbyte value) {
01552       functions->SetStaticByteField(this,clazz,fieldID,value);
01553     }
01554     void SetStaticCharField(jclass clazz, jfieldID fieldID,
01555                         jchar value) {
01556       functions->SetStaticCharField(this,clazz,fieldID,value);
01557     }
01558     void SetStaticShortField(jclass clazz, jfieldID fieldID,
01559                         jshort value) {
01560       functions->SetStaticShortField(this,clazz,fieldID,value);
01561     }
01562     void SetStaticIntField(jclass clazz, jfieldID fieldID,
01563                         jint value) {
01564       functions->SetStaticIntField(this,clazz,fieldID,value);
01565     }
01566     void SetStaticLongField(jclass clazz, jfieldID fieldID,
01567                         jlong value) {
01568       functions->SetStaticLongField(this,clazz,fieldID,value);
01569     }
01570     void SetStaticFloatField(jclass clazz, jfieldID fieldID,
01571                         jfloat value) {
01572       functions->SetStaticFloatField(this,clazz,fieldID,value);
01573     }
01574     void SetStaticDoubleField(jclass clazz, jfieldID fieldID,
01575                         jdouble value) {
01576       functions->SetStaticDoubleField(this,clazz,fieldID,value);
01577     }
01578 
01579     jstring NewString(const jchar *unicode, jsize len) {
01580         return functions->NewString(this,unicode,len);
01581     }
01582     jsize GetStringLength(jstring str) {
01583         return functions->GetStringLength(this,str);
01584     }
01585     const jchar *GetStringChars(jstring str, jboolean *isCopy) {
01586         return functions->GetStringChars(this,str,isCopy);
01587     }
01588     void ReleaseStringChars(jstring str, const jchar *chars) {
01589         functions->ReleaseStringChars(this,str,chars);
01590     }
01591 
01592     jstring NewStringUTF(const char *utf) {
01593         return functions->NewStringUTF(this,utf);
01594     }
01595     jsize GetStringUTFLength(jstring str) {
01596         return functions->GetStringUTFLength(this,str);
01597     }
01598     const char* GetStringUTFChars(jstring str, jboolean *isCopy) {
01599         return functions->GetStringUTFChars(this,str,isCopy);
01600     }
01601     void ReleaseStringUTFChars(jstring str, const char* chars) {
01602         functions->ReleaseStringUTFChars(this,str,chars);
01603     }
01604 
01605     jsize GetArrayLength(jarray array) {
01606         return functions->GetArrayLength(this,array);
01607     }
01608 
01609     jobjectArray NewObjectArray(jsize len, jclass clazz,
01610                                 jobject init) {
01611         return functions->NewObjectArray(this,len,clazz,init);
01612     }
01613     jobject GetObjectArrayElement(jobjectArray array, jsize index) {
01614         return functions->GetObjectArrayElement(this,array,index);
01615     }
01616     void SetObjectArrayElement(jobjectArray array, jsize index,
01617                                jobject val) {
01618         functions->SetObjectArrayElement(this,array,index,val);
01619     }
01620 
01621     jbooleanArray NewBooleanArray(jsize len) {
01622         return functions->NewBooleanArray(this,len);
01623     }
01624     jbyteArray NewByteArray(jsize len) {
01625         return functions->NewByteArray(this,len);
01626     }
01627     jcharArray NewCharArray(jsize len) {
01628         return functions->NewCharArray(this,len);
01629     }
01630     jshortArray NewShortArray(jsize len) {
01631         return functions->NewShortArray(this,len);
01632     }
01633     jintArray NewIntArray(jsize len) {
01634         return functions->NewIntArray(this,len);
01635     }
01636     jlongArray NewLongArray(jsize len) {
01637         return functions->NewLongArray(this,len);
01638     }
01639     jfloatArray NewFloatArray(jsize len) {
01640         return functions->NewFloatArray(this,len);
01641     }
01642     jdoubleArray NewDoubleArray(jsize len) {
01643         return functions->NewDoubleArray(this,len);
01644     }
01645 
01646     jboolean * GetBooleanArrayElements(jbooleanArray array, jboolean *isCopy) {
01647         return functions->GetBooleanArrayElements(this,array,isCopy);
01648     }
01649     jbyte * GetByteArrayElements(jbyteArray array, jboolean *isCopy) {
01650         return functions->GetByteArrayElements(this,array,isCopy);
01651     }
01652     jchar * GetCharArrayElements(jcharArray array, jboolean *isCopy) {
01653         return functions->GetCharArrayElements(this,array,isCopy);
01654     }
01655     jshort * GetShortArrayElements(jshortArray array, jboolean *isCopy) {
01656         return functions->GetShortArrayElements(this,array,isCopy);
01657     }
01658     jint * GetIntArrayElements(jintArray array, jboolean *isCopy) {
01659         return functions->GetIntArrayElements(this,array,isCopy);
01660     }
01661     jlong * GetLongArrayElements(jlongArray array, jboolean *isCopy) {
01662         return functions->GetLongArrayElements(this,array,isCopy);
01663     }
01664     jfloat * GetFloatArrayElements(jfloatArray array, jboolean *isCopy) {
01665         return functions->GetFloatArrayElements(this,array,isCopy);
01666     }
01667     jdouble * GetDoubleArrayElements(jdoubleArray array, jboolean *isCopy) {
01668         return functions->GetDoubleArrayElements(this,array,isCopy);
01669     }
01670 
01671     void ReleaseBooleanArrayElements(jbooleanArray array,
01672                                      jboolean *elems,
01673                                      jint mode) {
01674         functions->ReleaseBooleanArrayElements(this,array,elems,mode);
01675     }
01676     void ReleaseByteArrayElements(jbyteArray array,
01677                                   jbyte *elems,
01678                                   jint mode) {
01679         functions->ReleaseByteArrayElements(this,array,elems,mode);
01680     }
01681     void ReleaseCharArrayElements(jcharArray array,
01682                                   jchar *elems,
01683                                   jint mode) {
01684         functions->ReleaseCharArrayElements(this,array,elems,mode);
01685     }
01686     void ReleaseShortArrayElements(jshortArray array,
01687                                    jshort *elems,
01688                                    jint mode) {
01689         functions->ReleaseShortArrayElements(this,array,elems,mode);
01690     }
01691     void ReleaseIntArrayElements(jintArray array,
01692                                  jint *elems,
01693                                  jint mode) {
01694         functions->ReleaseIntArrayElements(this,array,elems,mode);
01695     }
01696     void ReleaseLongArrayElements(jlongArray array,
01697                                   jlong *elems,
01698                                   jint mode) {
01699         functions->ReleaseLongArrayElements(this,array,elems,mode);
01700     }
01701     void ReleaseFloatArrayElements(jfloatArray array,
01702                                    jfloat *elems,
01703                                    jint mode) {
01704         functions->ReleaseFloatArrayElements(this,array,elems,mode);
01705     }
01706     void ReleaseDoubleArrayElements(jdoubleArray array,
01707                                     jdouble *elems,
01708                                     jint mode) {
01709         functions->ReleaseDoubleArrayElements(this,array,elems,mode);
01710     }
01711 
01712     void GetBooleanArrayRegion(jbooleanArray array,
01713                                jsize start, jsize len, jboolean *buf) {
01714         functions->GetBooleanArrayRegion(this,array,start,len,buf);
01715     }
01716     void GetByteArrayRegion(jbyteArray array,
01717                             jsize start, jsize len, jbyte *buf) {
01718         functions->GetByteArrayRegion(this,array,start,len,buf);
01719     }
01720     void GetCharArrayRegion(jcharArray array,
01721                             jsize start, jsize len, jchar *buf) {
01722         functions->GetCharArrayRegion(this,array,start,len,buf);
01723     }
01724     void GetShortArrayRegion(jshortArray array,
01725                              jsize start, jsize len, jshort *buf) {
01726         functions->GetShortArrayRegion(this,array,start,len,buf);
01727     }
01728     void GetIntArrayRegion(jintArray array,
01729                            jsize start, jsize len, jint *buf) {
01730         functions->GetIntArrayRegion(this,array,start,len,buf);
01731     }
01732     void GetLongArrayRegion(jlongArray array,
01733                             jsize start, jsize len, jlong *buf) {
01734         functions->GetLongArrayRegion(this,array,start,len,buf);
01735     }
01736     void GetFloatArrayRegion(jfloatArray array,
01737                              jsize start, jsize len, jfloat *buf) {
01738         functions->GetFloatArrayRegion(this,array,start,len,buf);
01739     }
01740     void GetDoubleArrayRegion(jdoubleArray array,
01741                               jsize start, jsize len, jdouble *buf) {
01742         functions->GetDoubleArrayRegion(this,array,start,len,buf);
01743     }
01744 
01745     void SetBooleanArrayRegion(jbooleanArray array, jsize start, jsize len,
01746                                const jboolean *buf) {
01747         functions->SetBooleanArrayRegion(this,array,start,len,buf);
01748     }
01749     void SetByteArrayRegion(jbyteArray array, jsize start, jsize len,
01750                             const jbyte *buf) {
01751         functions->SetByteArrayRegion(this,array,start,len,buf);
01752     }
01753     void SetCharArrayRegion(jcharArray array, jsize start, jsize len,
01754                             const jchar *buf) {
01755         functions->SetCharArrayRegion(this,array,start,len,buf);
01756     }
01757     void SetShortArrayRegion(jshortArray array, jsize start, jsize len,
01758                              const jshort *buf) {
01759         functions->SetShortArrayRegion(this,array,start,len,buf);
01760     }
01761     void SetIntArrayRegion(jintArray array, jsize start, jsize len,
01762                            const jint *buf) {
01763         functions->SetIntArrayRegion(this,array,start,len,buf);
01764     }
01765     void SetLongArrayRegion(jlongArray array, jsize start, jsize len,
01766                             const jlong *buf) {
01767         functions->SetLongArrayRegion(this,array,start,len,buf);
01768     }
01769     void SetFloatArrayRegion(jfloatArray array, jsize start, jsize len,
01770                              const jfloat *buf) {
01771         functions->SetFloatArrayRegion(this,array,start,len,buf);
01772     }
01773     void SetDoubleArrayRegion(jdoubleArray array, jsize start, jsize len,
01774                               const jdouble *buf) {
01775         functions->SetDoubleArrayRegion(this,array,start,len,buf);
01776     }
01777 
01778     jint RegisterNatives(jclass clazz, const JNINativeMethod *methods,
01779                          jint nMethods) {
01780         return functions->RegisterNatives(this,clazz,methods,nMethods);
01781     }
01782     jint UnregisterNatives(jclass clazz) {
01783         return functions->UnregisterNatives(this,clazz);
01784     }
01785 
01786     jint MonitorEnter(jobject obj) {
01787         return functions->MonitorEnter(this,obj);
01788     }
01789     jint MonitorExit(jobject obj) {
01790         return functions->MonitorExit(this,obj);
01791     }
01792 
01793     jint GetJavaVM(JavaVM **vm) {
01794         return functions->GetJavaVM(this,vm);
01795     }
01796 
01797     void GetStringRegion(jstring str, jsize start, jsize len, jchar *buf) {
01798         functions->GetStringRegion(this,str,start,len,buf);
01799     }
01800     void GetStringUTFRegion(jstring str, jsize start, jsize len, char *buf) {
01801         functions->GetStringUTFRegion(this,str,start,len,buf);
01802     }
01803 
01804     void * GetPrimitiveArrayCritical(jarray array, jboolean *isCopy) {
01805         return functions->GetPrimitiveArrayCritical(this,array,isCopy);
01806     }
01807     void ReleasePrimitiveArrayCritical(jarray array, void *carray, jint mode) {
01808         functions->ReleasePrimitiveArrayCritical(this,array,carray,mode);
01809     }
01810 
01811     const jchar * GetStringCritical(jstring string, jboolean *isCopy) {
01812         return functions->GetStringCritical(this,string,isCopy);
01813     }
01814     void ReleaseStringCritical(jstring string, const jchar *cstring) {
01815         functions->ReleaseStringCritical(this,string,cstring);
01816     }
01817 
01818     jweak NewWeakGlobalRef(jobject obj) {
01819         return functions->NewWeakGlobalRef(this,obj);
01820     }
01821     void DeleteWeakGlobalRef(jweak ref) {
01822         functions->DeleteWeakGlobalRef(this,ref);
01823     }
01824 
01825     jboolean ExceptionCheck() {
01826         return functions->ExceptionCheck(this);
01827     }
01828 
01829     jobject NewDirectByteBuffer(void* address, jlong capacity) {
01830         return functions->NewDirectByteBuffer(this, address, capacity);
01831     }
01832     void* GetDirectBufferAddress(jobject buf) {
01833         return functions->GetDirectBufferAddress(this, buf);
01834     }
01835     jlong GetDirectBufferCapacity(jobject buf) {
01836         return functions->GetDirectBufferCapacity(this, buf);
01837     }
01838     jobjectRefType GetObjectRefType(jobject obj) {
01839         return functions->GetObjectRefType(this, obj);
01840     }
01841 
01842 #endif /* __cplusplus */
01843 };
01844 
01845 typedef struct JavaVMOption {
01846     char *optionString;
01847     void *extraInfo;
01848 } JavaVMOption;
01849 
01850 typedef struct JavaVMInitArgs {
01851     jint version;
01852 
01853     jint nOptions;
01854     JavaVMOption *options;
01855     jboolean ignoreUnrecognized;
01856 } JavaVMInitArgs;
01857 
01858 typedef struct JavaVMAttachArgs {
01859     jint version;
01860 
01861     char *name;
01862     jobject group;
01863 } JavaVMAttachArgs;
01864 
01865 /* These will be VM-specific. */
01866 
01867 #define JDK1_2
01868 #define JDK1_4
01869 
01870 /* End VM-specific. */
01871 
01872 struct JNIInvokeInterface_ {
01873     void *reserved0;
01874     void *reserved1;
01875     void *reserved2;
01876 
01877     jint (JNICALL *DestroyJavaVM)(JavaVM *vm);
01878 
01879     jint (JNICALL *AttachCurrentThread)(JavaVM *vm, void **penv, void *args);
01880 
01881     jint (JNICALL *DetachCurrentThread)(JavaVM *vm);
01882 
01883     jint (JNICALL *GetEnv)(JavaVM *vm, void **penv, jint version);
01884 
01885     jint (JNICALL *AttachCurrentThreadAsDaemon)(JavaVM *vm, void **penv, void *args);
01886 };
01887 
01888 struct JavaVM_ {
01889     const struct JNIInvokeInterface_ *functions;
01890 #ifdef __cplusplus
01891 
01892     jint DestroyJavaVM() {
01893         return functions->DestroyJavaVM(this);
01894     }
01895     jint AttachCurrentThread(void **penv, void *args) {
01896         return functions->AttachCurrentThread(this, penv, args);
01897     }
01898     jint DetachCurrentThread() {
01899         return functions->DetachCurrentThread(this);
01900     }
01901 
01902     jint GetEnv(void **penv, jint version) {
01903         return functions->GetEnv(this, penv, version);
01904     }
01905     jint AttachCurrentThreadAsDaemon(void **penv, void *args) {
01906         return functions->AttachCurrentThreadAsDaemon(this, penv, args);
01907     }
01908 #endif
01909 };
01910 
01911 #ifdef _JNI_IMPLEMENTATION_
01912 #define _JNI_IMPORT_OR_EXPORT_ JNIEXPORT
01913 #else
01914 #define _JNI_IMPORT_OR_EXPORT_ JNIIMPORT
01915 #endif
01916 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
01917 JNI_GetDefaultJavaVMInitArgs(void *args);
01918 
01919 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
01920 JNI_CreateJavaVM(JavaVM **pvm, void **penv, void *args);
01921 
01922 _JNI_IMPORT_OR_EXPORT_ jint JNICALL
01923 JNI_GetCreatedJavaVMs(JavaVM **, jsize, jsize *);
01924 
01925 /* Defined by native libraries. */
01926 JNIEXPORT jint JNICALL
01927 JNI_OnLoad(JavaVM *vm, void *reserved);
01928 
01929 JNIEXPORT void JNICALL
01930 JNI_OnUnload(JavaVM *vm, void *reserved);
01931 
01932 #define JNI_VERSION_1_1 0x00010001
01933 #define JNI_VERSION_1_2 0x00010002
01934 #define JNI_VERSION_1_4 0x00010004
01935 #define JNI_VERSION_1_6 0x00010006
01936 
01937 #ifdef __cplusplus
01938 } /* extern "C" */
01939 #endif /* __cplusplus */
01940 
01941 #endif /* !_JAVASOFT_JNI_H_ */
01942 
01943 
01944 
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines