From 0a0350c1c190dd411607aff7234dac59c976ec1e Mon Sep 17 00:00:00 2001 From: laentropia Date: Thu, 14 May 2026 06:59:25 -0600 Subject: [PATCH] refactor: changed arrayslice init --- include/arraylist.h | 2 ++ src/arraylist.c | 60 ++++++++++++++++++++++----------------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/include/arraylist.h b/include/arraylist.h index a36d1b6..a5943b6 100644 --- a/include/arraylist.h +++ b/include/arraylist.h @@ -20,6 +20,8 @@ typedef enum { ARRLIST_INVALID_CAPACITY, ARRLIST_IS_BORROWED, ARRLIST_INVALID_SLICE, + ARRLIST_INVALID_ARR, + ARRLIST_INVALID_START, } ArrayListErr; ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size); diff --git a/src/arraylist.c b/src/arraylist.c index cd101d0..6000bd8 100644 --- a/src/arraylist.c +++ b/src/arraylist.c @@ -434,68 +434,68 @@ ArrayListErr arraylist_reserve(ArrayList *arr, size_t size_to_reserve) { return ARRLIST_OK; } -ArraySlice *arraylist_slice(ArrayList *arr, size_t start, size_t len) { +ArrayListErr arraylist_slice(ArraySlice **slice, ArrayList *arr, size_t start, size_t len) { if (arr == NULL) { - return NULL; + return ARRLIST_NULL_ARG; } if (arr->len == 0 || len == 0) { - return NULL; + return ARRLIST_INVALID_ARR; } if (start > SIZE_MAX / arr->elem_size || len > SIZE_MAX / arr->elem_size) { - return NULL; + return ARRLIST_INVALID_CAPACITY; } if (start + len > arr->len) { - return NULL; + return ARRLIST_INVALID_START; } - ArraySlice *slice = malloc(sizeof(ArraySlice)); - if (slice == NULL) { - return NULL; + ArraySlice *new_slice = malloc(sizeof(ArraySlice)); + if (new_slice == NULL) { + return ARRLIST_BAD_ALLOC; } - slice->arr = arr; - slice->start = start; - slice->end = start + len; - slice->current = start; - slice->is_safe = true; + new_slice->arr = arr; + new_slice->start = start; + new_slice->end = start + len; + new_slice->current = start; + new_slice->is_safe = false; - arr->borrows++; - - return slice; + *slice = new_slice; + return ARRLIST_OK; } -ArraySlice *arraylist_slice_unsafe(ArrayList *arr, size_t start, size_t len) { +ArrayListErr arraylist_slice_unsafe(ArraySlice **slice, ArrayList *arr, size_t start, size_t len) { if (arr == NULL) { - return NULL; + return ARRLIST_NULL_ARG; } if (arr->len == 0 || len == 0) { - return NULL; + return ARRLIST_INVALID_ARR; } if (start > SIZE_MAX / arr->elem_size || len > SIZE_MAX / arr->elem_size) { - return NULL; + return ARRLIST_INVALID_CAPACITY; } if (start + len > arr->len) { - return NULL; + return ARRLIST_INVALID_START; } - ArraySlice *slice = malloc(sizeof(ArraySlice)); - if (slice == NULL) { - return NULL; + ArraySlice *new_slice = malloc(sizeof(ArraySlice)); + if (new_slice == NULL) { + return ARRLIST_BAD_ALLOC; } - slice->arr = arr; - slice->start = start; - slice->end = start + len; - slice->current = start; - slice->is_safe = false; + new_slice->arr = arr; + new_slice->start = start; + new_slice->end = start + len; + new_slice->current = start; + new_slice->is_safe = false; - return slice; + *slice = new_slice; + return ARRLIST_OK; } ArrayListErr arrayslice_destroy(ArraySlice **slice) {