JNIWrapper.h

00001 /*
00002  * @(#)JNIWrapper.h  0.2.0 / 2007-10-07
00003  *
00004  * Copyright (c) 2007, ETF and contributors. All rights reserved.
00005  *
00006  * This software is licensed under the LGPL, version 2.1, license.
00007  * A copy of the license is included in the file LICENSE-LGPL.txt.
00008  */
00009 #ifndef JNIWRAPPER_H
00010 #define JNIWRAPPER_H
00011 
00012 #include "JavaQxCommon.h"
00013 
00014 /*^**************************************************************************^*/
00015 /*- JNIWrapper Class.                                                        -*/
00016 /*^**************************************************************************^*/
00017 
00024 class JAVAQX_EXPORT JNIWrapper
00025 {
00026 public:
00027   static void checkException(JNIEnv *env);
00028   static bool testException(JNIEnv *env);
00029   static void fatalError(JNIEnv *env, const char *errorMessage);
00030   static void throwInternalError(JNIEnv *env, const char *errorMessage = 0);
00031   static void throwOutOfMemoryError(JNIEnv *env, const char *errorMessage = 0);
00032   static void throwRuntimeExcpetion(JNIEnv *env,
00033                                     const char *exceptionMessage = 0);
00034   static jfieldID getFieldID(JNIEnv *env, jclass cls, const char *name,
00035                              const char *sig);
00036   static jfieldID getStaticFieldID(JNIEnv *env, jclass cls, const char *name,
00037                                    const char *sig);
00038   static jmethodID getMethodID(JNIEnv *env, jclass cls, const char *name,
00039                                const char *sig);
00040   static jmethodID getStaticMethodID(JNIEnv *env, jclass cls, const char *name,
00041                                      const char *sig);
00042   static jobject getObjectField(JNIEnv *env, jobject obj, jfieldID fieldID);
00043   static void setObjectField(JNIEnv *env, jobject obj, jfieldID fieldID,
00044                              jobject val);
00045   static jboolean getBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID);
00046   static void setBooleanField(JNIEnv *env, jobject obj, jfieldID fieldID,
00047                               jboolean val);
00048   static jbyte getByteField(JNIEnv *env, jobject obj, jfieldID fieldID);
00049   static void setByteField(JNIEnv *env, jobject obj, jfieldID fieldID,
00050                            jbyte val);
00051   static jchar getCharField(JNIEnv *env, jobject obj, jfieldID fieldID);
00052   static void setCharField(JNIEnv *env, jobject obj, jfieldID fieldID,
00053                            jchar val);
00054   static jshort getShortField(JNIEnv *env, jobject obj, jfieldID fieldID);
00055   static void setShortField(JNIEnv *env, jobject obj, jfieldID fieldID,
00056                             jshort val);
00057   static jint getIntField(JNIEnv *env, jobject obj, jfieldID fieldID);
00058   static void setIntField(JNIEnv *env, jobject obj, jfieldID fieldID, jint val);
00059   static jlong getLongField(JNIEnv *env, jobject obj, jfieldID fieldID);
00060   static void setLongField(JNIEnv *env, jobject obj, jfieldID fieldID,
00061                            jlong val);
00062   static jfloat getFloatField(JNIEnv *env, jobject obj, jfieldID fieldID);
00063   static void setFloatField(JNIEnv *env, jobject obj, jfieldID fieldID,
00064                             jfloat val);
00065   static jdouble getDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID);
00066   static void setDoubleField(JNIEnv *env, jobject obj, jfieldID fieldID,
00067                             jdouble val);
00068   static bool callObjectMethod(JNIEnv *env, jobject &result, jobject obj,
00069                                jmethodID methodID, va_list &args);
00070   static bool callObjectMethod(JNIEnv *env, jobject &result, jobject obj,
00071                                jmethodID methodID, ...);
00072   static bool callBooleanMethod(JNIEnv *env, jboolean &result, jobject obj,
00073                                 jmethodID methodID, va_list &args);
00074   static bool callBooleanMethod(JNIEnv *env, jboolean &result, jobject obj,
00075                                 jmethodID methodID, ...);
00076   static bool callByteMethod(JNIEnv *env, jbyte &result, jobject obj,
00077                              jmethodID methodID, va_list &args);
00078   static bool callByteMethod(JNIEnv *env, jbyte &result, jobject obj,
00079                              jmethodID methodID, ...);
00080   static bool callCharMethod(JNIEnv *env, jchar &result, jobject obj,
00081                              jmethodID methodID, va_list &args);
00082   static bool callCharMethod(JNIEnv *env, jchar &result, jobject obj,
00083                              jmethodID methodID, ...);
00084   static bool callShortMethod(JNIEnv *env, jshort &result, jobject obj,
00085                              jmethodID methodID, va_list &args);
00086   static bool callShortMethod(JNIEnv *env, jshort &result, jobject obj,
00087                              jmethodID methodID, ...);
00088   static bool callIntMethod(JNIEnv *env, jint &result, jobject obj,
00089                             jmethodID methodID, va_list &args);
00090   static bool callIntMethod(JNIEnv *env, jint &result, jobject obj,
00091                             jmethodID methodID, ...);
00092   static bool callLongMethod(JNIEnv *env, jlong &result, jobject obj,
00093                              jmethodID methodID, va_list &args);
00094   static bool callLongMethod(JNIEnv *env, jlong &result, jobject obj,
00095                              jmethodID methodID, ...);
00096   static bool callFloatMethod(JNIEnv *env, jfloat &result, jobject obj,
00097                               jmethodID methodID, va_list &args);
00098   static bool callFloatMethod(JNIEnv *env, jfloat &result, jobject obj,
00099                               jmethodID methodID, ...);
00100   static bool callDoubleMethod(JNIEnv *env, jdouble &result, jobject obj,
00101                                jmethodID methodID, va_list &args);
00102   static bool callDoubleMethod(JNIEnv *env, jdouble &result, jobject obj,
00103                                jmethodID methodID, ...);
00104   static bool callVoidMethod(JNIEnv *env, jobject obj, jmethodID methodID,
00105                              va_list &args);
00106   static bool callVoidMethod(JNIEnv *env, jobject obj, jmethodID methodID, ...);
00107   static jstring toString(JNIEnv *env, jobject obj);
00108   static jstring newString(JNIEnv *env, const jchar *uchars, jsize len);
00109   static jstring newStringUTF(JNIEnv *env, const char *bytes);
00110   static bool callStaticVoidMethod(JNIEnv *env, jclass cls, jmethodID methodID,
00111                                    va_list &args);
00112   static bool callStaticVoidMethod(JNIEnv *env, jclass cls, jmethodID methodID,
00113                                    ...);
00114   static bool callStaticIntMethod(JNIEnv *env, jint &result, jclass cls,
00115                                   jmethodID methodID, va_list &args);
00116   static bool callStaticIntMethod(JNIEnv *env, jint &result, jclass cls,
00117                                   jmethodID methodID, ...);
00118   static jobject newObject(JNIEnv *env, jclass cls, jmethodID constructor,
00119                            va_list &args);
00120   static jobject newObject(JNIEnv *env, jclass cls, jmethodID constructor, ...);
00121   static jobjectArray newObjectArray(JNIEnv *env, jclass cls, jsize len);
00122   static jobjectArray newStringArray(JNIEnv *env, jsize len);
00123   static jbyteArray newByteArray(JNIEnv *env, jsize len);
00124   static jobject newGlobalRef(JNIEnv *env, jobject obj);
00125   static jweak newWeakGlobalRef(JNIEnv *env, jobject obj);
00126   static void deleteGlobalRef(JNIEnv *env, jobject &objref);
00127   static void deleteWeakGlobalRef(JNIEnv *env, jweak &wobjref);
00128   static bool isLiveRef(JNIEnv *env, jweak wobjref);
00129 public:
00130   inline static jclass objectClass();
00131   inline static jclass stringClass();
00132   inline static jmethodID toStringMID();
00133 private:
00134   friend class JVMWrapper; // uses initialize(JNIEnv *env)
00135   static void initialize(JNIEnv *env);
00136 private:
00137   static jclass sm_objectClass;
00138   static jclass sm_stringClass;
00139   static jmethodID sm_toStringMID;
00140 };
00141 
00142 /*^**************************************************************************^*/
00143 /*- JNIWrapper :: Public Static Inline Member Functions.                     -*/
00144 /*^**************************************************************************^*/
00145 
00151 inline jclass JNIWrapper::objectClass()
00152 {
00153   return sm_objectClass;
00154 }
00155 
00161 inline jclass JNIWrapper::stringClass()
00162 {
00163   return sm_stringClass;
00164 }
00165 
00171 inline jmethodID JNIWrapper::toStringMID()
00172 {
00173   return sm_toStringMID;
00174 }
00175 
00176 #endif // JNIWRAPPER_H
00177 
00178 /*^*****************************************************************************
00179   File History:
00180 
00181  - 2007-10-07 18:56:21 Slobodan
00182    Initial version
00183 
00184 *****************************************************************************^*/

Copyright © 2007 ETF and contributors. All Rights Reserved.