vec: vec_pop and vec_data

This commit is contained in:
2026-03-16 14:45:11 +00:00
parent c29e70b1da
commit 2e78cf5e45
2 changed files with 32 additions and 2 deletions

View File

@@ -30,7 +30,7 @@ void vec_append_byte(vec_t *vec, uint8_t byte)
++vec->size; ++vec->size;
} }
void *vec_data(vec_t *vec) u8 *vec_data(vec_t *vec)
{ {
if (!vec) if (!vec)
return NULL; return NULL;
@@ -95,6 +95,34 @@ void vec_clone(vec_t *v2, vec_t *v1)
vec_append(v2, vec_data(v1), v1->size); 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 /* Copyright (C) 2026 Aryadev Chavali
* This program is distributed in the hope that it will be useful, * This program is distributed in the hope that it will be useful,

View File

@@ -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(vec_t *vec, const void *const ptr, uint64_t size);
void vec_append_byte(vec_t *vec, uint8_t byte); 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_capacity(vec_t *vec, uint64_t capacity);
void vec_ensure_free(vec_t *vec, uint64_t size); void vec_ensure_free(vec_t *vec, uint64_t size);
void vec_free(vec_t *vec); void vec_free(vec_t *vec);
void vec_clone(vec_t *v2, vec_t *v1); 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]) #define VEC_GET(VEC, INDEX, TYPE) (((TYPE *)vec_data(VEC))[INDEX])