|
Server 0.0.1
HTTP/REST server implementation
|
00001 00023 #include <stdarg.h> 00024 #include <stdlib.h> 00025 #include <assert.h> 00026 00027 #include "class/class.h" 00028 #include "class/interface/class.h" 00029 00030 const 00031 struct interface i_Class = { 00032 "class", 00033 3 00034 }; 00035 00036 void * 00037 classNew(class_ptr class, ...) 00038 { 00039 void * object = calloc(1, class->object_size + sizeof(void*)); 00040 va_list params; 00041 int ret; 00042 00043 * (class_ptr *)object = class; 00044 object += sizeof(void*); 00045 00046 va_start(params, class); 00047 RETCALL(object, Class, ctor, ret, ¶ms); 00048 va_end(params); 00049 00050 if (-1 == ret) { 00051 classDelete(&object); 00052 } 00053 00054 return object; 00055 } 00056 00057 void 00058 classDelete(void ** object) 00059 { 00060 if (NULL != *object) { 00061 CALL(*object, Class, dtor); 00062 00063 free(*object - sizeof(void*)); 00064 *object = NULL; 00065 } 00066 } 00067 00068 void * 00069 classClone(void * _object) 00070 { 00071 class_ptr class = GET_CLASS(_object); 00072 void * object = calloc(1, class->object_size + sizeof(void*)); 00073 00074 * (class_ptr *)object = class; 00075 object += sizeof(void*); 00076 00077 #undef clone 00078 CALL(object, Class, clone, _object); 00079 00080 return object; 00081 } 00082 00083 // vim: set ts=4 sw=4: