diff --git a/include/rtti/typeinfo.h b/include/rtti/typeinfo.h index af283e0..91fd2b3 100644 --- a/include/rtti/typeinfo.h +++ b/include/rtti/typeinfo.h @@ -164,11 +164,13 @@ typedef struct { typedef int (*vstore_fn_t)(meta_obj_t*, void*); typedef int (*vget_fn_t)(meta_obj_t*, int, void**); typedef int (*vput_fn_t)(meta_obj_t*, int, void*); +typedef void (*vclear_fn_t)(meta_obj_t*); typedef struct { vstore_fn_t vstore; vget_fn_t vget; vput_fn_t vput; + vclear_fn_t vclear; } intf_varray_t; typedef struct { diff --git a/src/varray.c b/src/varray.c index eb51bca..9feb876 100644 --- a/src/varray.c +++ b/src/varray.c @@ -64,3 +64,26 @@ int vput(var v, int idx, void* data) return method(obj, idx, data); } + +void vclear(var v) +{ + meta_obj_t* obj = NULL; + vclear_fn_t method = NULL; + + obj = RTTI_DATA_TO_OBJ(v); + if (RTTI_OBJ_INVALID(obj)) { + errno = EINVAL; + return; + } + + RTTI_GET_METHOD(method, obj, varray, vclear); + if (method == NULL) { + errno = EINVAL; + + return; + } + + method(obj); + + return; +}