summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2024-06-04 10:22:28 -0300
committerEuAndreh <eu@euandre.org>2024-06-04 10:22:28 -0300
commitc8cc4ebf93e86a5297a4f1ea3d10893835d7b81e (patch)
tree85de10efc266e81107c6203c2b3dc42e7c458789 /src
parentsrc/string.h: Separate string_equals() from string_compare() (diff)
downloadpindaiba-c8cc4ebf93e86a5297a4f1ea3d10893835d7b81e.tar.gz
pindaiba-c8cc4ebf93e86a5297a4f1ea3d10893835d7b81e.tar.xz
src/vector.h: Implement vector_assign()
Diffstat (limited to 'src')
-rw-r--r--src/vector.c23
-rw-r--r--src/vector.h3
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