vis
a vi-like editor based on Plan 9's structural regular expressions
git clone https://9o.is/git/vis.git
commit 3e679c586493c400e38c3598d80f7d7899ccd0d1 parent 51bdb4a820ea8dd18044ca4816fb87cefab1728d Author: Marc André Tanner <mat@brain-dump.org> Date: Tue, 27 Dec 2016 23:21:20 +0100 array: implement array_remove Diffstat:
| M | array.c | | | 12 | ++++++++++++ |
| M | array.h | | | 2 | ++ |
2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/array.c b/array.c @@ -108,6 +108,18 @@ bool array_add_ptr(Array *arr, void *item) { return true; } +bool array_remove(Array *arr, size_t idx) { + if (idx >= arr->len) { + errno = EINVAL; + return false; + } + char *dest = arr->items + idx * arr->elem_size; + char *src = arr->items + (idx + 1) * arr->elem_size; + memmove(dest, src, (arr->len - idx) * arr->elem_size); + arr->len--; + return true; +} + size_t array_length(Array *arr) { return arr->len; } diff --git a/array.h b/array.h @@ -50,6 +50,8 @@ bool array_set_ptr(Array*, size_t idx, void *item); /* add a new element to the end of the array */ bool array_add(Array*, void *item); bool array_add_ptr(Array*, void *item); +/* remove an element by index, might not shrink/release underlying memory */ +bool array_remove(Array*, size_t idx); /* return the number of elements currently stored in the array */ size_t array_length(Array*);