diff options
| -rw-r--r-- | array.c | 12 | ||||
| -rw-r--r-- | array.h | 2 |
2 files changed, 14 insertions, 0 deletions
@@ -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; } @@ -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*); |
