changeset 33:4f7fdf333a42

base/vec: Make push return index of pushed variable.
author Lewin Bormann <lbo@spheniscida.de>
date Wed, 21 Aug 2019 10:50:50 +0200
parents 53ae0f7d8aa1
children e2ef3dd81205
files src/base/vec.c src/base/vec.h
diffstat 2 files changed, 6 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/src/base/vec.c	Wed Aug 21 10:50:23 2019 +0200
+++ b/src/base/vec.c	Wed Aug 21 10:50:50 2019 +0200
@@ -72,13 +72,14 @@
     assert(vec->len <= vec->cap);
 }
 
-void yvec_push(yvec_t *vec, const void *element) {
+size_t yvec_push(yvec_t *vec, const void *element) {
     if (vec->len >= vec->cap) {
         yvec_grow(vec);
     }
     memcpy(yvec_at_nocheck(vec, vec->len), element, vec->size);
     vec->len += 1;
     assert(vec->len <= vec->cap);
+    return vec->len - 1;
 }
 
 void yvec_push_multi(yvec_t *vec, const void *elements, size_t n) {
--- a/src/base/vec.h	Wed Aug 21 10:50:23 2019 +0200
+++ b/src/base/vec.h	Wed Aug 21 10:50:50 2019 +0200
@@ -40,7 +40,7 @@
 /// Append an element (elemp is pointer to the element) to a `yvec_t` (vecp is
 /// a pointer to the vector), asserting that the size of the element type is
 /// the same as the one expected by the vector.
-#define YVEC_PUSH(vecp, elemp)                                               \
+#define YVEC_PUSH(vecp, elemp) \
     (assert((vecp)->size == sizeof(*(elemp))), yvec_push(vecp, (void *)(elemp)))
 
 /**
@@ -53,12 +53,13 @@
 
 /**
  * @brief Append an element. See also `yvec_push()`, which asserts that the
- * element size matches the size expected by the vector.
+ * element size matches the size expected by the vector. Returns the index of
+ * the pushed element.
  *
  * Elements are appended at `vec[vec.len]`. Use `yvec_resize()` to change the
  * length.
  */
-void yvec_push(yvec_t *vec, const void *element);
+size_t yvec_push(yvec_t *vec, const void *element);
 
 /**
  * @brief Append several elements from a raw array. The size of elements must