diff options
| author | Marc André Tanner <mat@brain-dump.org> | 2016-12-27 23:21:20 +0100 |
|---|---|---|
| committer | Marc André Tanner <mat@brain-dump.org> | 2016-12-27 23:21:20 +0100 |
| commit | b7c6c43b64dd88a3f3cff692bf224654aef9b1e2 (patch) | |
| tree | 4ab5c92a20afa7536d35495f1141881ea0fc8ada /array.c | |
| parent | 727f9d7e76d96612b994ed85bad5ae6af25d7247 (diff) | |
| download | vis-b7c6c43b64dd88a3f3cff692bf224654aef9b1e2.tar.gz vis-b7c6c43b64dd88a3f3cff692bf224654aef9b1e2.tar.xz | |
array: implement array_remove
Diffstat (limited to 'array.c')
| -rw-r--r-- | array.c | 12 |
1 files changed, 12 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; } |
