mirror of
https://github.com/Andreabont/CExperiments.git
synced 2024-09-19 15:13:05 +00:00
32 lines
589 B
C
32 lines
589 B
C
|
#include <assert.h>
|
||
|
#include <stdlib.h>
|
||
|
#include "objects.h"
|
||
|
|
||
|
void * new(const void * _class, ...) {
|
||
|
const struct Class * class = _class;
|
||
|
void* p = calloc(1, class->size);
|
||
|
|
||
|
assert(p);
|
||
|
|
||
|
* (const struct Class **) p = class;
|
||
|
|
||
|
if (class->constructor) {
|
||
|
va_list ap;
|
||
|
va_start(ap, _class);
|
||
|
p = class->constructor(p, & ap);
|
||
|
va_end(ap);
|
||
|
}
|
||
|
|
||
|
return p;
|
||
|
}
|
||
|
|
||
|
void delete(void * self) {
|
||
|
const struct Class ** cp = self;
|
||
|
|
||
|
if (self && * cp && (* cp)->destructor) {
|
||
|
self = (* cp)->destructor(self);
|
||
|
}
|
||
|
|
||
|
free(self);
|
||
|
}
|