Mercurial > lbo > hg > ylisp
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