36 #define CBool unsigned char 60 #define C_DEBUG_DIAG_LEVEL 2 67 #define CDefaultFree free 68 #define CFree CDefaultFree 71 #define CMalloc malloc 74 typedef void (*CFreeType)(
void* );
88 #define C_VTABLE_OFFSET _vo 93 #define C_PRINT( ... ) printf( __VA_ARGS__ ) 94 #define C_FAILED_ASSERT_HANDLE( ) for( ;; ) 101 #if C_DEBUG_DIAG_LEVEL == 2 103 #define C_ASSERT_VIRTUAL_MESSAGE \ 104 "Virtual method not linked. Possible causes:\n"\ 105 "\t* [A0] Class constructor did not link virtual table with CVTable\n"\ 106 "\t* [A1] Constructor was never called on object\n"\ 107 "\t* [A2] Constructor was called, but super's constructor was not called\n"\ 108 "\t* [A3] Virtual table function assignment is incomplete\n" 110 #define C_ASSERT_OBJECT_MESSAGE \ 111 "NULL pointer used as input\n" 113 #define C_ASSERT_CAST_MESSAGE \ 114 "Failure to cast object. Possible causes:\n"\ 115 "\t* [C0] Did not call interface constructor, CInterface( )\n"\ 116 "\t* [C1] Did not call super's constructor.\n" 118 extern const char* CAssertVirtualMessage_;
119 extern const char* CAssertObjectMessage_;
120 extern const char* CAssertCastMessage_;
124 #define CAssertVirtualMessage_ NULL 125 #define CAssertObjectMessage_ NULL 126 #define CAssertCastMessage_ NULL 135 extern void CAssert(
char exp,
char const* msg,
char const* file,
int line );
137 #define CAssert( exp, msg, file, line ) \ 145 #define C_ASSERT_VIRTUAL( method )\ 146 CAssert( ((method)==NULL), CAssertVirtualMessage_, __FILE__, __LINE__ ) 147 #define C_ASSERT_OBJECT( object )\ 148 CAssert( ((object)==NULL), CAssertObjectMessage_, __FILE__, __LINE__ ) 149 #define C_ASSERT_CAST( object, file, line )\ 150 CAssert( (object) == NULL, CAssertCastMessage_, file, line ) 289 CFreeType CObject_Free;
308 void (*CDestructor)(
void* );
364 #define CObject( self ) \ 365 CObject_Constructor(self) 369 #define CDestroy( mem ) \ 370 CObject_Destroy((void*) (mem)) 374 #define CDynamic( obj ) \ 375 CObject_SetFree(((struct CClass*) (obj))->C_ROOT, CDefaultFree) 379 #define CFreeWith( obj, freep ) \ 380 CObject_SetFree(((struct CClass*) (obj))->C_ROOT, (freep)) 426 void CInterface(
void*
self,
void* iface,
const void* vtable );
433 #define CAssertVirtual( func )\ 434 C_ASSERT_VIRTUAL(func) 437 #define CAssertObject( object )\ 438 C_ASSERT_OBJECT((object)) 441 #if C_DEBUG_DIAG_LEVEL == 0 442 #define CCast( self_ )\ 443 CObjectCast_(self_, NULL, 0) 445 #define CCast( self_ )\ 446 CObjectCast_( self_, __FILE__, __LINE__ ) 485 void*
CObjectCast_(
void* super_reference,
const char* file_name,
int line_num );
508 void CVTable(
void*
self,
const void* vtable);
void * CObjectCast_(void *super_reference, const char *file_name, int line_num)
Definition: Class.c:99
#define C_VTABLE
Definition: Class.h:86
void CObject_Destroy(struct CObject *self)
Definition: Class.c:107
const void * CGetVTable(void *self_)
Definition: Class.c:66
#define C_ROOT
Definition: Class.h:82
#define C_VTABLE_OFFSET
Definition: Class.h:88
Base interface.
Definition: Class.h:398
Base class.
Definition: Class.h:283
First variables in every object's memory allocation.
Definition: Class.h:256
void CObject_SetFree(struct CObject *self, CFreeType free_method)
Definition: Class.c:131
struct CObject * CObject_Constructor(struct CObject *self)
Definition: Class.c:160
CObject's virtual table declaration.
Definition: Class.h:306
void CVTable(void *self, const void *vtable)
Definition: Class.c:61