From eed32242fe76c27cadefe22a58dc208f76fe6b4f Mon Sep 17 00:00:00 2001 From: Rongsong Shen Date: Sat, 14 Feb 2026 18:07:07 +0800 Subject: [PATCH] add vget_vec/vput_vec --- include/rtti/typeinfo.h | 14 +++++++++---- src/varray.c | 44 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/include/rtti/typeinfo.h b/include/rtti/typeinfo.h index 06b1b1f..0d68da4 100644 --- a/include/rtti/typeinfo.h +++ b/include/rtti/typeinfo.h @@ -163,14 +163,18 @@ typedef struct { typedef int (*vstore_fn_t)(meta_obj_t*, void*); typedef int (*vget_fn_t)(meta_obj_t*, int, void**); +typedef int (*vget_vec_fn_t)(meta_obj_t*, int, int*, void**); typedef int (*vput_fn_t)(meta_obj_t*, int, void*); +typedef int (*vput_vec_fn_t)(meta_obj_t*, int, int*, void**); typedef int (*vclear_fn_t)(meta_obj_t*, int); typedef struct { - vstore_fn_t vstore; - vget_fn_t vget; - vput_fn_t vput; - vclear_fn_t vclear; + vstore_fn_t vstore; + vget_fn_t vget; + vget_vec_fn_t vget_vec; + vput_fn_t vput; + vput_vec_fn_t vput_vec; + vclear_fn_t vclear; } intf_varray_t; typedef struct { @@ -236,7 +240,9 @@ extern int key_find(var, void*, void**); extern int vstore(var, void*); extern int vget(var, int, void**); +extern int vget_vec(var, int, int*, void**); extern int vput(var, int, void*); +extern int vput_vec(var, int, int*, void**); extern int vclear(var, int); #endif diff --git a/src/varray.c b/src/varray.c index d2bdc28..9dd883e 100644 --- a/src/varray.c +++ b/src/varray.c @@ -65,6 +65,50 @@ int vput(var v, int idx, void* data) return method(obj, idx, data); } +int vget_vec(var v, int count, int* idxs, void** data) +{ + meta_obj_t* obj = NULL; + vget_vec_fn_t method = NULL; + + if ((count < 1) || (idxs == NULL) || (data == NULL)) { + return -EINVAL; + } + + obj = RTTI_DATA_TO_OBJ(v); + if (RTTI_OBJ_INVALID(obj)) { + return -EINVAL; + } + + RTTI_GET_METHOD(method, obj, varray, vget_vec); + if (method == NULL) { + return -EINVAL; + } + + return method(obj, count, idxs, data); +} + +int vput_vec(var v, int count, int* idxs, void** data) +{ + meta_obj_t* obj = NULL; + vput_vec_fn_t method = NULL; + + if ((count < 1) || (idxs == NULL) || (data == NULL)) { + return -EINVAL; + } + + obj = RTTI_DATA_TO_OBJ(v); + if (RTTI_OBJ_INVALID(obj)) { + return -EINVAL; + } + + RTTI_GET_METHOD(method, obj, varray, vput_vec); + if (method == NULL) { + return -EINVAL; + } + + return method(obj, count, idxs, data); +} + int vclear(var v, int idx) { meta_obj_t* obj = NULL;