addition: added pop_back, remove_at, pop_front

Same thing as with addtition, not tested and decided O(n)
This commit is contained in:
2026-04-15 07:15:35 -06:00
parent fa0d09c3d7
commit 520dd9d52e

View File

@@ -188,4 +188,102 @@ ArrayListErr arraylist_insert(ArrayList *arr, size_t index, void *data) {
return ARRLIST_OK; return ARRLIST_OK;
} }
ArrayListErr arraylist_pop_back(ArrayList *arr, void *out) {
if (arr == NULL) {
return ARRLIST_NULL_ARG;
}
if (arr->len < 1) {
return ARRLIST_EMPTY;
}
if (arr->capacity / 4 > arr->len) {
ArrayListErr err = arraylist_shrink(arr);
if (err != ARRLIST_OK) {
return err;
}
}
if (out != NULL) {
memcpy(
out,
arr->buffer + (arr->len - 1) * arr->elem_size,
arr->elem_size);
}
arr->len--;
return ARRLIST_OK;
}
ArrayListErr arraylist_pop_front(ArrayList *arr, void *out) {
if (arr == NULL) {
return ARRLIST_NULL_ARG;
}
if (arr->len < 1) {
return ARRLIST_EMPTY;
}
if (arr->capacity / 4 > arr->len) {
ArrayListErr err = arraylist_shrink(arr);
if (err != ARRLIST_OK) {
return err;
}
}
if (out != NULL) {
memcpy(
out,
arr->buffer,
arr->elem_size
);
}
for (size_t i = 0; i < arr->len; i++) {
memcpy(
arr->buffer + (i * arr->elem_size),
arr->buffer + ((i + 1) * arr->elem_size),
arr->elem_size);
}
arr->len--;
return ARRLIST_OK;
}
ArrayListErr arraylist_remove_at(ArrayList *arr, size_t index, void *out) {
if (arr == NULL) {
return ARRLIST_NULL_ARG;
}
if (index >= arr->len) {
return ARRLIST_OUT_OF_BOUNDS;
}
if (arr->len < 1) {
return ARRLIST_OK;
}
if (out != NULL) {
memcpy(
out,
arr->buffer + (index * arr->elem_size),
arr->elem_size
);
}
for (size_t i = index; i < arr->len; i++) {
memcpy(
arr->buffer + (index * arr->elem_size),
arr->buffer + ((i + 1) * arr->elem_size),
arr->elem_size
);
}
arr->len--;
return ARRLIST_OK;
}