From ab3ae686bb0a9c11c3fef361411be7947edb5f71 Mon Sep 17 00:00:00 2001 From: mykola2312 <49044616+mykola2312@users.noreply.github.com> Date: Mon, 18 Apr 2022 21:11:09 +0300 Subject: [PATCH] array_insert, array_remove --- array.c | 23 +++++++++++++++++++++++ array.h | 2 ++ test.c | 4 +++- 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/array.c b/array.c index c41777b..bf7ed46 100644 --- a/array.c +++ b/array.c @@ -55,3 +55,26 @@ void array_pop(array_t* array, void* src) array_resize(array, array->count - 1); } } + +void array_insert(array_t* array, uint idx, const void* data) +{ + array_resize(array, array->count + 1); + uint move = array->count - idx - 1; + if (move) + { + cu_memmove(array_at(array, idx + 1), + array_at(array, idx), move*array->size); + } + cu_memcpy(array_at(array, idx), data, array->size); +} + +void array_remove(array_t* array, uint idx) +{ + uint move = array->count - idx - 1; + if (move) + { + cu_memmove(array_at(array, idx), + array_at(array, idx + 1), move*array->size); + } + array_resize(array, array->count - 1); +} diff --git a/array.h b/array.h index 25e3f8e..168610d 100644 --- a/array.h +++ b/array.h @@ -25,5 +25,7 @@ void array_resize(array_t* array, uint newCount); void array_push(array_t* array, const void* data); void array_pop(array_t* array, void* src); +void array_insert(array_t* array, uint idx, const void* data); +void array_remove(array_t* array, uint idx); #endif \ No newline at end of file diff --git a/test.c b/test.c index f085286..eb8b13e 100644 --- a/test.c +++ b/test.c @@ -37,7 +37,9 @@ int main() uint num = i; array_push(&array, &i); } - array_pop(&array, NULL); + uint num = 42; + array_remove(&array, 0); + array_insert(&array, 1, &num); CU_ARRAY_FOREACH(&array) {