Add refpool.

This commit is contained in:
Jonathan Schleifer 2012-04-22 15:09:52 +02:00
parent aee2af3ae0
commit a8ae30c3c4
6 changed files with 216 additions and 33 deletions

View file

@ -25,8 +25,10 @@
*/
#include <stdlib.h>
#include <assert.h>
#include "object.h"
#include "refpool.h"
void*
cfw_new(CFWClass *class, ...)
@ -54,6 +56,39 @@ cfw_new(CFWClass *class, ...)
return obj;
}
void*
cfw_new_p(CFWClass *class, ...)
{
CFWObject *obj;
assert(class != cfw_refpool);
if ((obj = malloc(class->size)) == NULL)
return NULL;
obj->cls = class;
obj->ref_cnt = 1;
if (class->ctor != NULL) {
va_list args;
va_start(args, class);
if (!class->ctor(obj, args)) {
cfw_unref(obj);
return NULL;
}
va_end(args);
}
if (!cfw_refpool_add(obj)) {
cfw_unref(obj);
return NULL;
}
return obj;
}
void*
cfw_ref(void *ptr)
{