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) {