OSDN Git Service

* testsuite/lib/libjava.exp (libjava_find_spec): New function.
[pf3gnuchains/gcc-fork.git] / libjava / include / jni.h
index 789cdee..b5ce334 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1998, 1999, 2000  Red Hat, Inc.
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002  Free Software Foundation
 
    This file is part of libgcj.
 
@@ -14,13 +14,24 @@ details.  */
 #ifndef __GCJ_JNI_H__
 #define __GCJ_JNI_H__
 
+#include <gcj/libgcj-config.h>
+
+/* We include <stdio.h> for compatibility with Sun's <jni.h>.  */
+#include <stdio.h>
+
 #include <stdarg.h>
 #define _Jv_va_list va_list
 
-#ifdef __cplusplus
+#ifdef __GCJ_JNI_IMPL__
 
-/* This is wrong, because it pollutes the name-space too much! */
+/* If __GCJ_JNI_IMPL__ is defined, then we assume that we're building
+   libgcj itself, and we include headers which taint the namespace
+   more than is acceptable for the ordinary JNI user.  */
 #include <gcj/javaprims.h>
+#include <gcj/array.h>
+#include <gnu/gcj/runtime/JNIWeakRef.h>
+
+typedef gnu::gcj::runtime::JNIWeakRef *jweak;
 
 typedef struct _Jv_JNIEnv JNIEnv;
 typedef struct _Jv_JavaVM JavaVM;
@@ -28,8 +39,12 @@ typedef struct _Jv_JavaVM JavaVM;
 #define JNI_TRUE true
 #define JNI_FALSE false
 
-#else /* __cplusplus */
+#else /* __GCJ_JNI_IMPL__ */
 
+# ifdef __GNUC__
+
+/* If we're using gcc, we can use a platform-independent scheme to get
+   the right integer types.  */
 typedef int    jbyte  __attribute__((__mode__(__QI__)));
 typedef int    jshort __attribute__((__mode__(__HI__)));
 typedef int    jint   __attribute__((__mode__(__SI__)));
@@ -40,11 +55,85 @@ typedef float  jfloat;
 typedef double jdouble;
 typedef jint jsize;
 
+# else /* __GNUC__ */
+
+#  ifdef JV_HAVE_INTTYPES_H
+
+/* If <inttypes.h> is available, we use it.  */
+
+#   include <inttypes.h>
+
+typedef int8_t jbyte;
+typedef int16_t jshort;
+typedef int32_t jint;
+typedef int64_t jlong;
+typedef float jfloat;
+typedef double jdouble;
+typedef jint jsize;
+typedef int8_t jboolean;
+typedef uint16_t jchar;
+
+#  else /* JV_HAVE_INTTYPES_H */
+
+/* For now, we require either gcc or <inttypes.h>.  If we did more
+   work at configure time we could get around this, but right now it
+   doesn't seem worth it.  */
+#   error jni.h not ported to this platform
+
+#  endif /* JV_HAVE_INTTYPES_H */
+
+# endif /* __GNUC__ */
+
+# ifdef __cplusplus
+
+/* Define dummy classes and then define the JNI types as pointers.  */
+struct __jobject {};
+struct __jclass : __jobject {};
+struct __jstring : __jobject {};
+struct __jthrowable : __jobject {};
+struct __jweak : __jobject {};
+struct __jarray : __jobject {};
+struct __jobjectArray : __jarray {};
+struct __jbyteArray : __jarray {};
+struct __jshortArray : __jarray {};
+struct __jintArray : __jarray {};
+struct __jlongArray : __jarray {};
+struct __jbooleanArray : __jarray {};
+struct __jcharArray : __jarray {};
+struct __jfloatArray : __jarray {};
+struct __jdoubleArray : __jarray {};
+
+typedef __jobject *jobject;
+typedef __jclass *jclass;
+typedef __jstring *jstring;
+typedef __jthrowable *jthrowable;
+typedef __jweak *jweak;
+typedef __jarray *jarray;
+typedef __jobjectArray *jobjectArray;
+typedef __jbyteArray *jbyteArray;
+typedef __jshortArray *jshortArray;
+typedef __jintArray *jintArray;
+typedef __jlongArray *jlongArray;
+typedef __jbooleanArray *jbooleanArray;
+typedef __jcharArray *jcharArray;
+typedef __jfloatArray *jfloatArray;
+typedef __jdoubleArray *jdoubleArray;
+
+#define JNI_TRUE true
+#define JNI_FALSE false
+
+typedef struct _Jv_JNIEnv JNIEnv;
+typedef struct _Jv_JavaVM JavaVM;
+
+# else /* __cplusplus */
+
+/* For C, simply define the class types as generic pointers.  */
 typedef void *jobject;
 typedef jobject jclass;
 typedef jobject jstring;
-typedef jobject jarray;
 typedef jobject jthrowable;
+typedef jobject jweak;
+typedef jobject jarray;
 typedef jobject jobjectArray;
 typedef jobject jbyteArray;
 typedef jobject jshortArray;
@@ -55,24 +144,24 @@ typedef jobject jcharArray;
 typedef jobject jfloatArray;
 typedef jobject jdoubleArray;
 
-/* Dummy defines.  */
-typedef void *jfieldID;
-typedef void *jmethodID;
+#define JNI_TRUE  1
+#define JNI_FALSE 0
 
 typedef const struct JNINativeInterface *JNIEnv;
 typedef const struct JNIInvokeInterface *JavaVM;
 
-#define JNI_TRUE  1
-#define JNI_FALSE 0
+# endif /* __cplusplus */
 
-#endif /* __cplusplus */
+/* Dummy defines.  */
+typedef void *jfieldID;
+typedef void *jmethodID;
 
-/* FIXME: this is wrong.  */
-typedef jobject jweak;
+#endif /* __GCJ_JNI_IMPL__ */
 
 /* Version numbers.  */
 #define JNI_VERSION_1_1 0x00010001
 #define JNI_VERSION_1_2 0x00010002
+#define JNI_VERSION_1_4 0x00010004
 
 /* Used when releasing array elements.  */
 #define JNI_COMMIT 1
@@ -84,6 +173,12 @@ typedef jobject jweak;
 #define JNI_EDETACHED    -2
 #define JNI_EVERSION     -3
 
+/* Linkage and calling conventions.  This will need updating when we
+   support Windows DLLs.  */
+#define JNIIMPORT
+#define JNIEXPORT
+#define JNICALL
+
 #ifdef __cplusplus
 extern "C"
 {
@@ -166,7 +261,7 @@ struct JNINativeInterface
 
   jobject  (*NewGlobalRef)                 (JNIEnv *, jobject);
   void     (*DeleteGlobalRef)              (JNIEnv *, jobject);
-  void     (*DeleteLocalRef)               (JNIEnv *, jobject);;
+  void     (*DeleteLocalRef)               (JNIEnv *, jobject);
   jboolean (*IsSameObject)                 (JNIEnv *, jobject, jobject);
 
   jobject  (*NewLocalRef)                 (JNIEnv *, jobject);
@@ -435,7 +530,7 @@ struct JNINativeInterface
                                            jfieldID, jdouble);
 
   jstring  (*NewString)                    (JNIEnv *, const jchar *, jsize);
-  jint     (*GetStringLength)              (JNIEnv *, jstring);
+  jsize    (*GetStringLength)              (JNIEnv *, jstring);
   const jchar * (*GetStringChars)          (JNIEnv *, jstring, jboolean *);
   void     (*ReleaseStringChars)           (JNIEnv *, jstring, const jchar *);
   jstring  (*NewStringUTF)                 (JNIEnv *, const char *);
@@ -493,37 +588,37 @@ struct JNINativeInterface
 
   void                 (*GetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
                                            jsize, jsize, jboolean *);
-  void                 (*GetByteArrayRegion)      (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*GetCharArrayRegion)      (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*GetShortArrayRegion)     (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*GetIntArrayRegion)       (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*GetLongArrayRegion)      (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*GetFloatArrayRegion)     (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*GetDoubleArrayRegion)    (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
+  void                 (*GetByteArrayRegion)      (JNIEnv *, jbyteArray,
+                                           jsize, jsize, jbyte *);
+  void                 (*GetCharArrayRegion)      (JNIEnv *, jcharArray,
+                                           jsize, jsize, jchar *);
+  void                 (*GetShortArrayRegion)     (JNIEnv *, jshortArray,
+                                           jsize, jsize, jshort *);
+  void                 (*GetIntArrayRegion)       (JNIEnv *, jintArray,
+                                           jsize, jsize, jint *);
+  void                 (*GetLongArrayRegion)      (JNIEnv *, jlongArray,
+                                           jsize, jsize, jlong *);
+  void                 (*GetFloatArrayRegion)     (JNIEnv *, jfloatArray,
+                                           jsize, jsize, jfloat *);
+  void                 (*GetDoubleArrayRegion)    (JNIEnv *, jdoubleArray,
+                                           jsize, jsize, jdouble *);
 
   void                 (*SetBooleanArrayRegion)   (JNIEnv *, jbooleanArray,
                                            jsize, jsize, jboolean *);
-  void                 (*SetByteArrayRegion)      (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*SetCharArrayRegion)      (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*SetShortArrayRegion)     (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*SetIntArrayRegion)       (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*SetLongArrayRegion)      (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*SetFloatArrayRegion)     (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
-  void                 (*SetDoubleArrayRegion)    (JNIEnv *, jbooleanArray,
-                                           jsize, jsize, jboolean *);
+  void                 (*SetByteArrayRegion)      (JNIEnv *, jbyteArray,
+                                           jsize, jsize, jbyte *);
+  void                 (*SetCharArrayRegion)      (JNIEnv *, jcharArray,
+                                           jsize, jsize, jchar *);
+  void                 (*SetShortArrayRegion)     (JNIEnv *, jshortArray,
+                                           jsize, jsize, jshort *);
+  void                 (*SetIntArrayRegion)       (JNIEnv *, jintArray,
+                                           jsize, jsize, jint *);
+  void                 (*SetLongArrayRegion)      (JNIEnv *, jlongArray,
+                                           jsize, jsize, jlong *);
+  void                 (*SetFloatArrayRegion)     (JNIEnv *, jfloatArray,
+                                           jsize, jsize, jfloat *);
+  void                 (*SetDoubleArrayRegion)    (JNIEnv *, jdoubleArray,
+                                           jsize, jsize, jdouble *);
 
   jint     (*RegisterNatives)              (JNIEnv *, jclass,
                                            const JNINativeMethod *, jint);
@@ -547,6 +642,10 @@ struct JNINativeInterface
   void   (*DeleteWeakGlobalRef)            (JNIEnv *, jweak);
 
   jboolean     (*ExceptionCheck)          (JNIEnv *);
+
+  jobject (*NewDirectByteBuffer)           (JNIEnv *, void *, jlong);
+  void *  (*GetDirectBufferAddress)        (JNIEnv *, jobject);
+  jlong   (*GetDirectBufferCapacity)       (JNIEnv *, jobject);
 };
 
 #ifdef __cplusplus
@@ -557,7 +656,7 @@ public:
   /* The method table.  */
   struct JNINativeInterface *p;
 
-  /* FIXME: this is really ugly.  */
+  /* This is ugly, but we must live with it.  */
 #ifndef __GCJ_JNI_IMPL__
 private:
 #endif
@@ -1342,49 +1441,49 @@ public:
   void GetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
   { p->GetBooleanArrayRegion (this, val0, val1, val2, val3); }
 
-  void GetByteArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void GetByteArrayRegion (jbyteArray val0, jsize val1, jsize val2, jbyte * val3)
   { p->GetByteArrayRegion (this, val0, val1, val2, val3); }
 
-  void GetCharArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void GetCharArrayRegion (jcharArray val0, jsize val1, jsize val2, jchar * val3)
   { p->GetCharArrayRegion (this, val0, val1, val2, val3); }
 
-  void GetShortArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void GetShortArrayRegion (jshortArray val0, jsize val1, jsize val2, jshort * val3)
   { p->GetShortArrayRegion (this, val0, val1, val2, val3); }
 
-  void GetIntArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void GetIntArrayRegion (jintArray val0, jsize val1, jsize val2, jint * val3)
   { p->GetIntArrayRegion (this, val0, val1, val2, val3); }
 
-  void GetLongArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void GetLongArrayRegion (jlongArray val0, jsize val1, jsize val2, jlong * val3)
   { p->GetLongArrayRegion (this, val0, val1, val2, val3); }
 
-  void GetFloatArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void GetFloatArrayRegion (jfloatArray val0, jsize val1, jsize val2, jfloat * val3)
   { p->GetFloatArrayRegion (this, val0, val1, val2, val3); }
 
-  void GetDoubleArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void GetDoubleArrayRegion (jdoubleArray val0, jsize val1, jsize val2, jdouble * val3)
   { p->GetDoubleArrayRegion (this, val0, val1, val2, val3); }
 
   void SetBooleanArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
   { p->SetBooleanArrayRegion (this, val0, val1, val2, val3); }
 
-  void SetByteArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void SetByteArrayRegion (jbyteArray val0, jsize val1, jsize val2, jbyte * val3)
   { p->SetByteArrayRegion (this, val0, val1, val2, val3); }
 
-  void SetCharArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void SetCharArrayRegion (jcharArray val0, jsize val1, jsize val2, jchar * val3)
   { p->SetCharArrayRegion (this, val0, val1, val2, val3); }
 
-  void SetShortArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void SetShortArrayRegion (jshortArray val0, jsize val1, jsize val2, jshort * val3)
   { p->SetShortArrayRegion (this, val0, val1, val2, val3); }
 
-  void SetIntArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void SetIntArrayRegion (jintArray val0, jsize val1, jsize val2, jint * val3)
   { p->SetIntArrayRegion (this, val0, val1, val2, val3); }
 
-  void SetLongArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void SetLongArrayRegion (jlongArray val0, jsize val1, jsize val2, jlong * val3)
   { p->SetLongArrayRegion (this, val0, val1, val2, val3); }
 
-  void SetFloatArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void SetFloatArrayRegion (jfloatArray val0, jsize val1, jsize val2, jfloat * val3)
   { p->SetFloatArrayRegion (this, val0, val1, val2, val3); }
 
-  void SetDoubleArrayRegion (jbooleanArray val0, jsize val1, jsize val2, jboolean * val3)
+  void SetDoubleArrayRegion (jdoubleArray val0, jsize val1, jsize val2, jdouble * val3)
   { p->SetDoubleArrayRegion (this, val0, val1, val2, val3); }
 
   jint RegisterNatives (jclass cl0, const JNINativeMethod * val1, jint val2)
@@ -1428,6 +1527,15 @@ public:
 
   jboolean ExceptionCheck ()
   { return p->ExceptionCheck (this); }
+
+  jobject NewDirectByteBuffer (void *addr, jlong capacity)
+  { return p->NewDirectByteBuffer (this, addr, capacity); }
+
+  void *GetDirectBufferAddress (jobject buf)
+  { return p->GetDirectBufferAddress (this, buf); }
+
+  jlong GetDirectBufferCapacity (jobject buf)
+  { return p->GetDirectBufferCapacity (this, buf); }
 };
 #endif /* __cplusplus */
 
@@ -1445,6 +1553,7 @@ struct JNIInvokeInterface
   jint (*AttachCurrentThread)   (JavaVM *, void **, void *);
   jint (*DetachCurrentThread)   (JavaVM *);
   jint (*GetEnv)                (JavaVM *, void **, jint);
+  jint (*AttachCurrentThreadAsDaemon) (JavaVM *, void **, void *);
 };
 
 #ifdef __cplusplus
@@ -1469,6 +1578,9 @@ public:
 
   jint GetEnv (void **penv, jint version)
   { return functions->GetEnv (this, penv, version); }
+
+  jint AttachCurrentThreadAsDaemon (void **penv, void *args)
+  { return functions->AttachCurrentThreadAsDaemon (this, penv, args); }
 };
 #endif /* __cplusplus */