server 0.0.1
basicserverinfrastructure

src/interface/class.c

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