refactor: init takes pointer to pointer for compatibliity
Its better for me this way, its just this little change at least, next is fucking going and fixig all damn tests, the fucking wors part
This commit is contained in:
@@ -22,7 +22,7 @@ typedef enum {
|
|||||||
ARRLIST_INVALID_SLICE,
|
ARRLIST_INVALID_SLICE,
|
||||||
} ArrayListErr;
|
} ArrayListErr;
|
||||||
|
|
||||||
ArrayList *arraylist_init(size_t capacity, size_t elem_size);
|
ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size);
|
||||||
ArrayListErr arraylist_destroy(ArrayList **arr);
|
ArrayListErr arraylist_destroy(ArrayList **arr);
|
||||||
ArrayListErr arraylist_clear(ArrayList *arr);
|
ArrayListErr arraylist_clear(ArrayList *arr);
|
||||||
ArrayList *arraylist_clone(const ArrayList *arr);
|
ArrayList *arraylist_clone(const ArrayList *arr);
|
||||||
|
|||||||
@@ -26,34 +26,40 @@ struct ArraySlice {
|
|||||||
static ArrayListErr arraylist_grow(ArrayList *arr);
|
static ArrayListErr arraylist_grow(ArrayList *arr);
|
||||||
static ArrayListErr arraylist_shrink(ArrayList *arr);
|
static ArrayListErr arraylist_shrink(ArrayList *arr);
|
||||||
|
|
||||||
ArrayList *arraylist_init(size_t capacity, size_t elem_size) {
|
ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size) {
|
||||||
|
if (arr == NULL || *arr == NULL) {
|
||||||
|
return ARRLIST_NULL_ARG;
|
||||||
|
}
|
||||||
|
|
||||||
if (capacity == 0) {
|
if (capacity == 0) {
|
||||||
return NULL;
|
return ARRLIST_INVALID_CAPACITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (elem_size == 0) {
|
if (elem_size == 0) {
|
||||||
return NULL;
|
return ARRLIST_INVALID_ELEM_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (capacity > SIZE_MAX / elem_size) {
|
if (capacity > SIZE_MAX / elem_size) {
|
||||||
return NULL;
|
return ARRLIST_INVALID_CAPACITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList *arr = malloc(sizeof(ArrayList));
|
ArrayList *new_arr = malloc(sizeof(ArrayList));
|
||||||
if (arr == NULL) {
|
if (arr == NULL) {
|
||||||
return NULL;
|
return ARRLIST_BAD_ALLOC;
|
||||||
}
|
}
|
||||||
arr->capacity = capacity;
|
|
||||||
arr->elem_size = elem_size;
|
new_arr->capacity = capacity;
|
||||||
arr->len = 0;
|
new_arr->elem_size = elem_size;
|
||||||
arr->borrows = 0;
|
new_arr->len = 0;
|
||||||
arr->buffer = malloc(capacity * elem_size);
|
new_arr->borrows = 0;
|
||||||
if (arr->buffer == NULL) {
|
new_arr->buffer = malloc(capacity * elem_size);
|
||||||
|
if (new_arr->buffer == NULL) {
|
||||||
free(arr);
|
free(arr);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return arr;
|
*arr = new_arr;
|
||||||
|
return ARRLIST_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayListErr arraylist_destroy(ArrayList **arr) {
|
ArrayListErr arraylist_destroy(ArrayList **arr) {
|
||||||
|
|||||||
Reference in New Issue
Block a user