From 1d7f9676ec3e0584d534d4a67040ca148d87643d Mon Sep 17 00:00:00 2001 From: laentropia Date: Wed, 15 Apr 2026 10:01:27 -0600 Subject: [PATCH] addition: resize and reserve, not tested --- include/arraylist.h | 1 + src/arraylist.c | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/include/arraylist.h b/include/arraylist.h index b048ce3..273c972 100644 --- a/include/arraylist.h +++ b/include/arraylist.h @@ -19,6 +19,7 @@ typedef enum { ARRLIST_EMPTY, ARRLIST_NULL_ARG, ARRLIST_INVALID_ELEM_SIZE, + ARRLIST_INVALID_CAPACITY, } ArrayListErr; ArrayList *arraylist_init(size_t capacity, size_t elem_size); diff --git a/src/arraylist.c b/src/arraylist.c index 1392edb..a662f50 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -319,3 +319,44 @@ ArrayListErr arraylist_set(ArrayList *arr, size_t index, void *data) { return ARRLIST_OK; } + +ArrayListErr arraylist_resize(ArrayList *arr, size_t new_capacity) { + if (arr == NULL) { + return ARRLIST_NULL_ARG; + } + + if (new_capacity < 1) { + return ARRLIST_INVALID_CAPACITY; + } + + uint8_t *tmp = realloc(arr->buffer, new_capacity * arr->elem_size); + if (tmp == NULL) { + return ARRLIST_BAD_ALLOC; + } + + arr->buffer = tmp; + arr->capacity = new_capacity; + return ARRLIST_OK; +} + +ArrayListErr arraylist_reserve(ArrayList *arr, size_t size_to_reserve) { + if (arr == NULL) { + return ARRLIST_NULL_ARG; + } + + if (size_to_reserve < 1) { + return ARRLIST_INVALID_CAPACITY; + } + + uint8_t *tmp = realloc( + arr->buffer, + (arr->capacity + size_to_reserve) * arr->elem_size); + + if (tmp == NULL) { + return ARRLIST_BAD_ALLOC; + } + + arr->buffer = tmp; + arr->capacity += size_to_reserve; + return ARRLIST_OK; +}