Server 0.0.1
HTTP/REST server implementation

src/class/interface/i_class.c

Go to the documentation of this file.
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, &params);
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:
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines