00001
00013 #ifndef JAUNE_CLIB_H
00014 #define JAUNE_CLIB_H 1
00015
00022 enum _ClibMagic
00023 {
00028 CLASSMAGIC = 0x1234
00029 };
00030
00031 #define NULL 0
00032 #define STATIC
00033
00039 #ifdef ASM_GBZ80_TYPES_INCLUDE
00040 #define UINTX_INTX_DEFINED 1
00041 #endif
00042
00043 #if !UINTX_INTX_DEFINED
00044 typedef unsigned short UINT16;
00045 typedef signed short INT16;
00046
00047 typedef unsigned char UINT8;
00048 typedef signed char INT8;
00049 #endif
00050
00051 typedef unsigned char BOOL;
00052 typedef unsigned int UINT;
00053 typedef signed int INT;
00054
00055 typedef UINT JBOOLEAN;
00056 typedef INT JBYTE;
00057 typedef INT JSHORT;
00058 typedef UINT JCHAR;
00059 typedef INT JINT;
00060
00061 #define JFALSE 0
00062 #define JTRUE 1
00063
00072 typedef struct
00073 {
00075 UINT16 uId;
00077 void *p;
00078 } TableEntry;
00079
00081 typedef struct _Class Class;
00082
00085 struct _Class
00086 {
00088 Class *pSuper;
00094 UINT16 uFieldSize;
00098 TableEntry *pMethodTable;
00102 TableEntry *pMethodTableEnd;
00106 TableEntry *pInterfaceMethodTable;
00110 TableEntry *pInterfaceMethodTableEnd;
00115 TableEntry *pFieldTable;
00117 TableEntry *pFieldTableEnd;
00120 Class **pImplsTable;
00122 Class **pImplsTableEnd;
00124 const char *szName;
00126 UINT16 uMagic;
00127 };
00128
00132 typedef struct _Instance
00133 {
00135 Class *pClass;
00136 } Instance;
00137
00140 typedef struct _Array
00141 {
00142 Instance header;
00144 UINT16 uLength;
00145 } Array;
00146
00151 typedef struct _String
00152 {
00153 Instance header;
00155 UINT16 uLength;
00157 UINT8 sz[1];
00158 } String;
00159
00166 typedef struct _StringBufferData
00167 {
00168 Instance header;
00169 char sz[1];
00170 } StringBufferData;
00171
00174 typedef struct _StringBuffer
00175 {
00176 Instance header;
00178 UINT16 uLength;
00181 UINT16 uMaxLength;
00184 StringBufferData *pData;
00185 } StringBuffer;
00186
00196 extern Class ByteArray_class;
00197 extern Class ReferenceArray_class;
00198 extern Class WordArray_class;
00199 extern Class JLJString_class;
00200 extern Class JLJStringBuffer_class;
00201 extern Class StringBufferData_class;
00202
00207 void _cthrow(const char *pMsg);
00210 void _cassert(const char *pMsg, int line);
00211
00225 #define TRYTHROW(_a, _msg) \
00226 if (!(_a)) _cthrow(_msg);
00227
00230 #ifdef DISABLE_ASSERT
00231 #define ASSERT(_a, _msg)
00232
00233 #else
00234 #define ASSERT(_a, _msg) \
00235 if (!(_a)) _cassert(_msg " at " __FILE__ ":", __LINE__);
00236
00237 #endif
00238
00248 #define NUMELEMS(_a) \
00249 (sizeof(_a)/sizeof(_a[0]))
00250
00254 #define UNUSED(_a) \
00255 if (0 && (_a));
00256
00260 #if DISABLE_VALIDATE
00261 #define VALIDATE(_a, _c1)
00262 #define CHECKINSTANCEISCLASS(_a)
00263
00264 #else
00265 #define VALIDATE(_a, _cl) \
00266 ASSERT(_a, "Null object pointer"); \
00267 ASSERT((_a)->header.pClass == &(_cl), "Wrong class of object passed in")
00268
00269 #define CHECKINSTANCEISCLASS(_a) \
00270 ASSERT(_a, "Null object pointer"); \
00271 ASSERT((_a)->pClass->uMagic == CLASSMAGIC, "Parameter is not a class instance");
00272
00273 #endif
00274
00275 #endif