From 2e78cf5e45117166d69d989fff9e2aefc953fe24 Mon Sep 17 00:00:00 2001 From: Aryadev Chavali Date: Mon, 16 Mar 2026 14:45:11 +0000 Subject: [PATCH] vec: vec_pop and vec_data --- src/vec.c | 30 +++++++++++++++++++++++++++++- src/vec.h | 4 +++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/vec.c b/src/vec.c index 3229169..acc292a 100644 --- a/src/vec.c +++ b/src/vec.c @@ -30,7 +30,7 @@ void vec_append_byte(vec_t *vec, uint8_t byte) ++vec->size; } -void *vec_data(vec_t *vec) +u8 *vec_data(vec_t *vec) { if (!vec) return NULL; @@ -95,6 +95,34 @@ void vec_clone(vec_t *v2, vec_t *v1) vec_append(v2, vec_data(v1), v1->size); } +void *vec_pop(vec_t *vec, size_t member_size) +{ + if (vec->size < member_size) + { + return NULL; + } + vec->size -= member_size; + return vec_data(vec) + vec->size; +} + +u64 vec_find(vec_t *vec, void *ptr, size_t ptrsize) +{ + if (vec->size < ptrsize) + return vec->size + 1; + + u8 *base = vec_data(vec); + for (u64 i = 0; i < vec->size; i += ptrsize) + { + auto member = base + i; + if (!memcmp(member, ptr, ptrsize)) + { + return i; + } + } + + return vec->size + 1; +} + /* Copyright (C) 2026 Aryadev Chavali * This program is distributed in the hope that it will be useful, diff --git a/src/vec.h b/src/vec.h index 1bb82a9..8f8d77c 100644 --- a/src/vec.h +++ b/src/vec.h @@ -31,11 +31,13 @@ static_assert(sizeof(vec_t) == 64, "Expected sizeof(vec_t) to be 64"); void vec_append(vec_t *vec, const void *const ptr, uint64_t size); void vec_append_byte(vec_t *vec, uint8_t byte); -void *vec_data(vec_t *vec); +u8 *vec_data(vec_t *vec); void vec_ensure_capacity(vec_t *vec, uint64_t capacity); void vec_ensure_free(vec_t *vec, uint64_t size); void vec_free(vec_t *vec); void vec_clone(vec_t *v2, vec_t *v1); +void *vec_pop(vec_t *vec, size_t member_size); +u64 vec_find(vec_t *vec, void *ptr, size_t ptrsize); #define VEC_GET(VEC, INDEX, TYPE) (((TYPE *)vec_data(VEC))[INDEX])