add destroy_() for better support reference API
This commit is contained in:
parent
e5f3983952
commit
c1e4069706
2 changed files with 25 additions and 7 deletions
|
|
@ -188,6 +188,7 @@ struct meta_obj_ {
|
||||||
|
|
||||||
extern var makeInstance(typeinfo_t*, ...);
|
extern var makeInstance(typeinfo_t*, ...);
|
||||||
extern void destroy(var);
|
extern void destroy(var);
|
||||||
|
extern void destroy_(var, obj_destroy_fn_t);
|
||||||
extern int is_rtti_obj(var);
|
extern int is_rtti_obj(var);
|
||||||
extern typeinfo_t* typeOf(var);
|
extern typeinfo_t* typeOf(var);
|
||||||
extern int instanceOf(var, typeinfo_t*);
|
extern int instanceOf(var, typeinfo_t*);
|
||||||
|
|
|
||||||
31
src/create.c
31
src/create.c
|
|
@ -56,10 +56,32 @@ var makeInstance(typeinfo_t* type, ...)
|
||||||
return obj->data;
|
return obj->data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void objDestroy_(meta_obj_t* obj, obj_destroy_fn_t killer)
|
||||||
|
{
|
||||||
|
void* p = NULL;
|
||||||
|
|
||||||
|
if (killer != NULL) {
|
||||||
|
killer(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
p = RTTI_OBJ_TO_PRIV(obj);
|
||||||
|
free(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
void destroy_(var v, obj_destroy_fn_t killer)
|
||||||
|
{
|
||||||
|
meta_obj_t* obj = RTTI_DATA_TO_OBJ(v);
|
||||||
|
|
||||||
|
if (RTTI_OBJ_INVALID(obj)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
objDestroy_(obj, killer);
|
||||||
|
}
|
||||||
|
|
||||||
void destroy(var v)
|
void destroy(var v)
|
||||||
{
|
{
|
||||||
typeinfo_t* type = NULL;
|
typeinfo_t* type = NULL;
|
||||||
void* p = NULL;
|
|
||||||
meta_obj_t* obj = NULL;
|
meta_obj_t* obj = NULL;
|
||||||
|
|
||||||
obj = RTTI_DATA_TO_OBJ(v);
|
obj = RTTI_DATA_TO_OBJ(v);
|
||||||
|
|
@ -72,12 +94,7 @@ void destroy(var v)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type->destroy != NULL) {
|
objDestroy_(obj, type->destroy);
|
||||||
type->destroy(obj);
|
|
||||||
}
|
|
||||||
|
|
||||||
p = RTTI_OBJ_TO_PRIV(obj);
|
|
||||||
free(p);
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue