diff options
| author | Daniel Hader <[email protected]> | 2026-06-14 12:58:14 -0500 |
|---|---|---|
| committer | Daniel Hader <[email protected]> | 2026-06-14 12:58:14 -0500 |
| commit | 482ea0261cb9f0def49ce3df542b2a7f811262d1 (patch) | |
| tree | 3bb961316b2ca856409b9f3b2145036ae9f5d704 /src/util/vec.h | |
build and test environment using makefile and basic SDL3 setup
Diffstat (limited to 'src/util/vec.h')
| -rw-r--r-- | src/util/vec.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/util/vec.h b/src/util/vec.h new file mode 100644 index 0000000..2b86e17 --- /dev/null +++ b/src/util/vec.h @@ -0,0 +1,38 @@ +#ifndef LEO_VEC_H +#define LEO_VEC_H + +#include <stddef.h> + +#include "alloc.h" + +static const size_t LEO_Vec_GROWTH_FACTOR_NUMER = 3; +static const size_t LEO_Vec_GROWTH_FACTOR_DENOM = 2; +static const size_t LEO_Vec_DEFAULT_CAPACITY = 8; + +struct LEO_Vec { + struct LEO_Allocator allocator; + void *data; + size_t item_size; + size_t length; + size_t capacity; +}; + +enum LEO_Vec_Error { + LEO_Vec_OK = 0, + LEO_Vec_NULL_VEC_POINTER = 1, + LEO_Vec_NULL_ITEM_POINTER = 2, + LEO_Vec_INVALID_ITEM_SIZE = 3, + LEO_Vec_ALLOCATION_FAILURE = 4, + LEO_Vec_TOO_BIG = 5, + LEO_Vec_OUT_OF_BOUNDS = 6, +}; + +enum LEO_Vec_Error LEO_Vec_init (struct LEO_Vec *vec, size_t item_size, + struct LEO_Allocator allocator); + +void LEO_Vec_free (struct LEO_Vec *vec); +enum LEO_Vec_Error LEO_Vec_push (struct LEO_Vec *vec, const void *item); +enum LEO_Vec_Error LEO_Vec_pop (struct LEO_Vec *vec, void *item); +enum LEO_Vec_Error LEO_Vec_get (struct LEO_Vec *vec, size_t i, void *item); + +#endif |
