addtition: slice to array, needs testing

This commit is contained in:
2026-04-23 09:18:18 -06:00
parent dd992cf6b9
commit 4a1575e833
2 changed files with 27 additions and 1 deletions

View File

@@ -25,7 +25,7 @@ typedef enum {
ArrayList *arraylist_init(size_t capacity, size_t elem_size); ArrayList *arraylist_init(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_copy(const ArrayList *arr); ArrayList *arraylist_clone(const ArrayList *arr);
size_t arraylist_size(const ArrayList *arr); size_t arraylist_size(const ArrayList *arr);
size_t arraylist_capacity(const ArrayList *arr); size_t arraylist_capacity(const ArrayList *arr);

View File

@@ -577,3 +577,29 @@ ArrayListErr arrayslice_advance(ArraySlice *slice, size_t n) {
return ARRLIST_OK; return ARRLIST_OK;
} }
ArrayList *arrayslice_to_arraylist(const ArraySlice *slice) {
if (slice == NULL) {
return NULL;
}
if (slice->current >= slice->end) {
return NULL;
}
ArrayList *new_arr = arraylist_init(
arraylist_capacity(slice->arr),
slice->arr->elem_size);
if (new_arr == NULL) {
return NULL;
}
memcpy(
new_arr->buffer,
slice->arr->buffer + (slice->start * slice->arr->elem_size),
slice->arr->elem_size * (slice->end - slice->current)
);
return new_arr;
}