From 09746093395cd4c3b6c3a7151a60dacc31bd729b Mon Sep 17 00:00:00 2001 From: Francesco Date: Mon, 8 Sep 2025 23:57:52 +0200 Subject: [PATCH] feat(vector): remove, set --- vector/myvector.c | 52 +++++++++++++++++++++++++++++++++++++++++++++++ vector/myvector.h | 2 -- 2 files changed, 52 insertions(+), 2 deletions(-) diff --git a/vector/myvector.c b/vector/myvector.c index fd7e823..0a3afe7 100644 --- a/vector/myvector.c +++ b/vector/myvector.c @@ -213,10 +213,16 @@ int vec_insert(vec_s *vec, size_t index, void *value) { return -1; } + if (mtx_lock(&vec->lock) != thrd_success) { + return -1; + } + if (vec->size + 1 > vec->capacity) { /* No space, realloc */ void *tmp = realloc(vec->data, next_power_two(vec->size + 1)); if (tmp == NULL) { + mtx_unlock(&vec->lock); + return -1; } vec->data = tmp; @@ -226,6 +232,52 @@ int vec_insert(vec_s *vec, size_t index, void *value) { size_t tmp_size = vec->size - index + 1; memmove((char *)vec->data + (index * vec->elem_size), (char *)vec->data + ((index + 1) * vec->elem_size), tmp_size * vec->elem_size); memcpy((char *)vec->data + (index * vec->elem_size), value, vec->elem_size); + vec->size++; + + mtx_unlock(&vec->lock); + + return 0; +} + +int vec_remove(vec_s *vec, size_t index) { + if (vec == NULL) { + return -1; + } + + if (index > vec->size) { + return -1; + } + + if (mtx_lock(&vec->lock) != thrd_success) { + return -1; + } + + size_t size = vec->size - index; + /* Overwrite bytes */ + memmove((char *)vec->data + (index * vec->elem_size), (char *)vec->data + ((index + 1) * vec->elem_size), size); + vec->size--; + + mtx_unlock(&vec->lock); + + return 0; +} + +int vec_set(vec_s *vec, size_t index, void *value) { + if (vec == NULL || value == NULL) { + return -1; + } + + if (index > vec->size) { + return -1; + } + + if (mtx_lock(&vec->lock), thrd_success) { + return -1; + } + + memcpy((char *)vec->data + (index * vec->elem_size), value, vec->elem_size); + + mtx_unlock(&vec->lock); return 0; } diff --git a/vector/myvector.h b/vector/myvector.h index af8ee2a..41d52eb 100644 --- a/vector/myvector.h +++ b/vector/myvector.h @@ -28,13 +28,11 @@ void *vec_pop(vec_s *vec); int vec_insert(vec_s *vec, size_t index, void *value); -// TODO int vec_remove(vec_s *vec, size_t index); // free the returned value void *vec_get(vec_s *vec, size_t index); -// TODO int vec_set(vec_s *vec, size_t index, void *value); int vec_clear(vec_s *vec);