refactor: changed arrayslice init
This commit is contained in:
@@ -20,6 +20,8 @@ typedef enum {
|
|||||||
ARRLIST_INVALID_CAPACITY,
|
ARRLIST_INVALID_CAPACITY,
|
||||||
ARRLIST_IS_BORROWED,
|
ARRLIST_IS_BORROWED,
|
||||||
ARRLIST_INVALID_SLICE,
|
ARRLIST_INVALID_SLICE,
|
||||||
|
ARRLIST_INVALID_ARR,
|
||||||
|
ARRLIST_INVALID_START,
|
||||||
} ArrayListErr;
|
} ArrayListErr;
|
||||||
|
|
||||||
ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size);
|
ArrayListErr arraylist_init(ArrayList **arr, size_t capacity, size_t elem_size);
|
||||||
|
|||||||
@@ -434,68 +434,68 @@ ArrayListErr arraylist_reserve(ArrayList *arr, size_t size_to_reserve) {
|
|||||||
return ARRLIST_OK;
|
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) {
|
if (arr == NULL) {
|
||||||
return NULL;
|
return ARRLIST_NULL_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arr->len == 0 || len == 0) {
|
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) {
|
if (start > SIZE_MAX / arr->elem_size || len > SIZE_MAX / arr->elem_size) {
|
||||||
return NULL;
|
return ARRLIST_INVALID_CAPACITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start + len > arr->len) {
|
if (start + len > arr->len) {
|
||||||
return NULL;
|
return ARRLIST_INVALID_START;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArraySlice *slice = malloc(sizeof(ArraySlice));
|
ArraySlice *new_slice = malloc(sizeof(ArraySlice));
|
||||||
if (slice == NULL) {
|
if (new_slice == NULL) {
|
||||||
return NULL;
|
return ARRLIST_BAD_ALLOC;
|
||||||
}
|
}
|
||||||
|
|
||||||
slice->arr = arr;
|
new_slice->arr = arr;
|
||||||
slice->start = start;
|
new_slice->start = start;
|
||||||
slice->end = start + len;
|
new_slice->end = start + len;
|
||||||
slice->current = start;
|
new_slice->current = start;
|
||||||
slice->is_safe = true;
|
new_slice->is_safe = false;
|
||||||
|
|
||||||
arr->borrows++;
|
*slice = new_slice;
|
||||||
|
return ARRLIST_OK;
|
||||||
return slice;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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) {
|
if (arr == NULL) {
|
||||||
return NULL;
|
return ARRLIST_NULL_ARG;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arr->len == 0 || len == 0) {
|
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) {
|
if (start > SIZE_MAX / arr->elem_size || len > SIZE_MAX / arr->elem_size) {
|
||||||
return NULL;
|
return ARRLIST_INVALID_CAPACITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (start + len > arr->len) {
|
if (start + len > arr->len) {
|
||||||
return NULL;
|
return ARRLIST_INVALID_START;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArraySlice *slice = malloc(sizeof(ArraySlice));
|
ArraySlice *new_slice = malloc(sizeof(ArraySlice));
|
||||||
if (slice == NULL) {
|
if (new_slice == NULL) {
|
||||||
return NULL;
|
return ARRLIST_BAD_ALLOC;
|
||||||
}
|
}
|
||||||
|
|
||||||
slice->arr = arr;
|
new_slice->arr = arr;
|
||||||
slice->start = start;
|
new_slice->start = start;
|
||||||
slice->end = start + len;
|
new_slice->end = start + len;
|
||||||
slice->current = start;
|
new_slice->current = start;
|
||||||
slice->is_safe = false;
|
new_slice->is_safe = false;
|
||||||
|
|
||||||
return slice;
|
*slice = new_slice;
|
||||||
|
return ARRLIST_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayListErr arrayslice_destroy(ArraySlice **slice) {
|
ArrayListErr arrayslice_destroy(ArraySlice **slice) {
|
||||||
|
|||||||
Reference in New Issue
Block a user