From c8cc4ebf93e86a5297a4f1ea3d10893835d7b81e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2024 10:22:28 -0300 Subject: src/vector.h: Implement vector_assign() --- src/vector.c | 23 +++++++++++++++++++++++ src/vector.h | 3 +++ 2 files changed, 26 insertions(+) (limited to 'src') diff --git a/src/vector.c b/src/vector.c index 143e6a1..72b41e2 100644 --- a/src/vector.c +++ b/src/vector.c @@ -18,6 +18,7 @@ #include "vector.h" + struct Vector { const void **values; size_t capacity; @@ -27,6 +28,7 @@ struct Vector { const size_t value_size; }; + static const size_t VECTOR_MAX_CAPACITY = SIZE_MAX; @@ -37,6 +39,7 @@ static const size_t GROWTH_MULTIPLIER = 2; + int vector_new_with( const size_t capacity, @@ -156,6 +159,26 @@ out: return rc; } +int +vector_assign( + const struct Vector *const v, + const size_t idx, + const void *const value +) { + int rc = -1; + + const size_t count = vector_count(v); + if (idx >= count) { + logerr(_(MSG_ERR_VECTOR_OUT_OF_BOUNDS), idx, count); + goto out; + } + + memcpy(&v->values[idx], value, v->value_size); + rc = 0; +out: + return rc; +} + int vector_push_back(const struct Vector *const v, const void *const value) { int rc = -1; diff --git a/src/vector.h b/src/vector.h index fc2f81a..11f998b 100644 --- a/src/vector.h +++ b/src/vector.h @@ -24,6 +24,9 @@ vector_count(const struct Vector *const v); int vector_nth(const struct Vector *const v, const size_t idx, const void **const out); +int +vector_assign(const struct Vector *const v, const size_t idx, const void *const value); + int vector_push_back(const struct Vector *const v, const void *const value); -- cgit v1.2.3