add vget_vec/vput_vec
This commit is contained in:
parent
cbda3378da
commit
eed32242fe
2 changed files with 54 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
44
src/varray.c
44
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;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue