Array access standardization

This commit is contained in:
2022-06-08 20:56:59 +03:00
parent 01a62cfaf3
commit ab75d629d3
4 changed files with 17 additions and 27 deletions
+10 -18
View File
@@ -38,6 +38,7 @@ ssize_t libcdsb_array_find(const arr_t* x, const void* v, vtype vt) {
return -1;
}
ssize_t libcdsb_array_push(arr_t* x, const void* v, vtype vt) {
ssize_t i = x->size;
vnode_t n = vnode_tcreate(x->type, v, vt);
@@ -51,32 +52,23 @@ ssize_t libcdsb_array_push(arr_t* x, const void* v, vtype vt) {
return i;
}
ssize_t libcdsb_array_get(val_t* x, arr_t* s, ssize_t i, _Bool cut) {
if (i < 0 && (i += s->size) < 0) i = 0;
int libcdsb_array_get(vtype_array* x, ssize_t i, void* _, array_access_callback callback, vtype_bool cut) {
if (i < s->size) {
assert(!is_null(s->mem));
int r = 0;
if (cut) {
if (!is_null(x)) {
vnode_t n = vnode_create(array_internal_at(s, i), s->type);
value_set(x, n, s->type, VF_WRITEABLE|VF_REMOVABLE);
}
if (i < 0 && (i += x->size) < 0) i = 0;
array_cut(s, i, 1);
} else value_set(x, array_internal_at(s, i), s->type, VF_WRITEABLE);
} else {
i = -1;
memset(x, 0, sizeof(*x));
}
if (i < x->size) {
if (callback) r = callback(array_internal_at(x, i), i, x->type, _);
if (cut) array_cut(x, i, 1);
} else return -1;
return i;
return r;
}
/*#####################################################################################################################*/
int libcdsb_array_foreach(vtype_array* x, void* data, array_foreach_callback callback, _Bool flush) {
int libcdsb_array_foreach(vtype_array* x, void* data, array_access_callback callback, _Bool flush) {
void* p;
void* e;