// array.h - Header file for CNI arrays. -*- c++ -*-
-/* Copyright (C) 1998, 1999 Free Software Foundation
+/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation
This file is part of libgcj.
class __JArray : public java::lang::Object
{
+protected:
+ // This is just a hack to work around a warning emitted by the C++
+ // compiler. We initialize `length' evilly, but it doesn't know
+ // that.
+ __JArray () : length (0)
+ {
+ }
public:
- // FIXME: we'd like this to be `const' but that causes problems with
- // the C++ compiler.
- jsize length;
+ const jsize length;
friend jsize JvGetArrayLength (__JArray*);
};
+template<class T>
+class JArray;
+
+template<class T>
+inline T* elements(JArray<T>& x);
+template<class T>
+inline T* elements(JArray<T>* x);
+
template<class T>
class JArray : public __JArray
{
};
template<class T>
-T* elements(JArray<T>& x) { return x.data; }
+inline T* elements(JArray<T>& x) { return x.data; }
template<class T>
-T* elements(JArray<T>* x) { return x->data; }
+inline T* elements(JArray<T>* x) { return x->data; }
-}; // end extern "Java"
+} // end extern "Java"
/* These typesdefs match those in JNI. */
typedef __JArray *jarray;
typedef JArray<jdouble> *jdoubleArray;
typedef JArray<jstring> *jstringArray;
-extern class _Jv_PrimClass _Jv_byteClass, _Jv_shortClass, _Jv_intClass,
+extern java::lang::Class _Jv_byteClass, _Jv_shortClass, _Jv_intClass,
_Jv_longClass, _Jv_booleanClass, _Jv_charClass, _Jv_floatClass,
_Jv_doubleClass, _Jv_voidClass;
-#define JvPrimClass(TYPE) ((jclass) & _Jv_##TYPE##Class)
+/* The definition of this macro cannot be enclosed in parentheses
+ because "JvPrimClass(x)" is used as a template argument. */
+#define JvPrimClass(TYPE) & _Jv_##TYPE##Class
extern "C" jobjectArray _Jv_NewObjectArray(jsize length, jclass, jobject init);
extern "C" jobject _Jv_NewPrimArray (jclass eltype, jint count);