|
server 0.0.1
basicserverinfrastructure
|
00001 #include <stdarg.h> 00002 #include <stdlib.h> 00003 #include <assert.h> 00004 00005 #include "class.h" 00006 #include "interface/class.h" 00007 00008 const 00009 struct interface i_Class = { 00010 "class", 00011 3 00012 }; 00013 00014 void * 00015 classNew(class_ptr class, ...) 00016 { 00017 void * object = calloc(1, class->object_size + sizeof(void*)); 00018 va_list params; 00019 00020 if (class->init) class->init(); 00021 00022 * (class_ptr *)object = class; 00023 object += sizeof(void*); 00024 00025 va_start(params, class); 00026 CALL(object, Class, ctor, ¶ms); 00027 va_end(params); 00028 00029 return object; 00030 } 00031 00032 void 00033 classDelete(void ** object) 00034 { 00035 CALL(*object, Class, dtor); 00036 00037 free(*object - sizeof(void*)); 00038 *object = NULL; 00039 } 00040 00041 void * 00042 classClone(void * _object) 00043 { 00044 class_ptr class = class_getClass(_object); 00045 void * object = calloc(1, class->object_size + sizeof(void*)); 00046 00047 * (class_ptr *)object = class; 00048 object += sizeof(void*); 00049 00050 #undef clone 00051 CALL(object, Class, clone, _object); 00052 00053 return object; 00054 } 00055 00056 // vim: set ts=4 sw=4: