refactor: changed arrayslice init

This commit is contained in:
2026-05-14 06:59:25 -06:00
parent 36bd2a37c7
commit 0a0350c1c1
2 changed files with 32 additions and 30 deletions

View File

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