From b7c6c43b64dd88a3f3cff692bf224654aef9b1e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Andr=C3=A9=20Tanner?= Date: Tue, 27 Dec 2016 23:21:20 +0100 Subject: array: implement array_remove --- array.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'array.c') diff --git a/array.c b/array.c index 315e18c..aa43151 100644 --- 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; } -- cgit v1.2.3