array.h 3.47 KB
Newer Older
Tom Tromey committed
1
// array.h - Header file for CNI arrays.  -*- c++ -*-
Tom Tromey committed
2

3
/* Copyright (C) 1998, 1999, 2000, 2001, 2002  Free Software Foundation
Tom Tromey committed
4 5 6 7 8 9 10

   This file is part of libgcj.

This software is copyrighted work licensed under the terms of the
Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
details.  */

Tom Tromey committed
11 12
#ifndef __GCJ_ARRAY_H__
#define __GCJ_ARRAY_H__
Tom Tromey committed
13 14 15 16 17 18 19

#include <java/lang/Object.h>

extern "Java" {

class __JArray : public java::lang::Object
{
20 21 22 23 24 25 26
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)
  {
  }
Tom Tromey committed
27
public:
28
  const jsize length;
Tom Tromey committed
29 30 31 32
  friend jsize JvGetArrayLength (__JArray*);
};

template<class T>
33 34 35 36 37 38 39 40
class JArray;

template<class T>
inline T* elements(JArray<T>& x);
template<class T>
inline T* elements(JArray<T>* x);

template<class T>
Tom Tromey committed
41 42 43 44 45 46 47 48 49 50 51
class JArray : public __JArray
{
  T data[0];
public:
  friend T* elements<>(JArray<T>& x);
  friend T* elements<>(JArray<T>* x);
  // T* getData() { return data; }
  // T& operator[](jint i) { return data[i]; }
};

template<class T>
52
inline T* elements(JArray<T>& x) { return x.data; }
Tom Tromey committed
53
template<class T>
54
inline T* elements(JArray<T>* x) { return x->data; }
Tom Tromey committed
55

56
} // end extern "Java"
Tom Tromey committed
57 58 59 60 61 62 63 64 65 66 67 68 69 70

/* These typesdefs match those in JNI. */
typedef __JArray *jarray;
typedef JArray<jobject> *jobjectArray;
typedef JArray<jboolean> *jbooleanArray;
typedef JArray<jbyte> *jbyteArray;
typedef JArray<jchar> *jcharArray;
typedef JArray<jshort> *jshortArray;
typedef JArray<jint> *jintArray;
typedef JArray<jlong> *jlongArray;
typedef JArray<jfloat> *jfloatArray;
typedef JArray<jdouble> *jdoubleArray;
typedef JArray<jstring> *jstringArray;

71
extern java::lang::Class _Jv_byteClass, _Jv_shortClass, _Jv_intClass,
72 73
  _Jv_longClass, _Jv_booleanClass, _Jv_charClass, _Jv_floatClass,
  _Jv_doubleClass, _Jv_voidClass;
74 75 76
/* 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
77

Tom Tromey committed
78
extern "C" jobjectArray _Jv_NewObjectArray(jsize length, jclass, jobject init);
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
extern "C" jobject _Jv_NewPrimArray (jclass eltype, jint count);

extern inline jobjectArray 
JvNewObjectArray (jsize length, jclass cls, jobject init)
{ 
  return _Jv_NewObjectArray (length, cls, init); 
}

extern inline jcharArray 
JvNewCharArray (jint length)
{
  return (jcharArray) _Jv_NewPrimArray (JvPrimClass (char), length);
}

extern inline jbooleanArray 
JvNewBooleanArray (jint length)
{
  return (jbooleanArray) _Jv_NewPrimArray (JvPrimClass (boolean), length);
}

extern inline jbyteArray 
JvNewByteArray (jint length)
{
  return (jbyteArray) _Jv_NewPrimArray (JvPrimClass (byte), length);
}

extern inline jshortArray 
JvNewShortArray (jint length)
{
  return (jshortArray) _Jv_NewPrimArray (JvPrimClass (short), length);
}

extern inline jintArray 
JvNewIntArray (jint length)
{
  return (jintArray) _Jv_NewPrimArray (JvPrimClass (int), length);
}

extern inline jlongArray 
JvNewLongArray (jint length)
{
  return (jlongArray) _Jv_NewPrimArray (JvPrimClass (long), length);
}

extern inline jfloatArray 
JvNewFloatArray (jint length)
{
  return (jfloatArray) _Jv_NewPrimArray (JvPrimClass (float), length);
}

extern inline jdoubleArray 
JvNewDoubleArray (jint length)
{
  return (jdoubleArray) _Jv_NewPrimArray (JvPrimClass (double), length);
}
Tom Tromey committed
134 135 136 137 138 139


extern "C" jstringArray JvConvertArgv(int argc, const char **argv);

inline jsize JvGetArrayLength (jarray array) { return array->length; }

Tom Tromey committed
140
#endif /* __GCJ_ARRAY_H__ */