diff options
author | EuAndreh <eu@euandre.org> | 2024-06-04 10:22:28 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2024-06-04 10:22:28 -0300 |
commit | c8cc4ebf93e86a5297a4f1ea3d10893835d7b81e (patch) | |
tree | 85de10efc266e81107c6203c2b3dc42e7c458789 /src | |
parent | src/string.h: Separate string_equals() from string_compare() (diff) | |
download | pindaiba-c8cc4ebf93e86a5297a4f1ea3d10893835d7b81e.tar.gz pindaiba-c8cc4ebf93e86a5297a4f1ea3d10893835d7b81e.tar.xz |
src/vector.h: Implement vector_assign()
Diffstat (limited to 'src')
-rw-r--r-- | src/vector.c | 23 | ||||
-rw-r--r-- | src/vector.h | 3 |
2 files changed, 26 insertions, 0 deletions
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, @@ -157,6 +160,26 @@ out: } 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 @@ -25,6 +25,9 @@ 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); int |