addition: resize and reserve, not tested
This commit is contained in:
@@ -19,6 +19,7 @@ typedef enum {
|
|||||||
ARRLIST_EMPTY,
|
ARRLIST_EMPTY,
|
||||||
ARRLIST_NULL_ARG,
|
ARRLIST_NULL_ARG,
|
||||||
ARRLIST_INVALID_ELEM_SIZE,
|
ARRLIST_INVALID_ELEM_SIZE,
|
||||||
|
ARRLIST_INVALID_CAPACITY,
|
||||||
} ArrayListErr;
|
} ArrayListErr;
|
||||||
|
|
||||||
ArrayList *arraylist_init(size_t capacity, size_t elem_size);
|
ArrayList *arraylist_init(size_t capacity, size_t elem_size);
|
||||||
|
|||||||
@@ -319,3 +319,44 @@ ArrayListErr arraylist_set(ArrayList *arr, size_t index, void *data) {
|
|||||||
|
|
||||||
return ARRLIST_OK;
|
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;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user