summaryrefslogtreecommitdiff
path: root/src/util/vec.h
diff options
context:
space:
mode:
authorDaniel Hader <[email protected]>2026-06-14 12:58:14 -0500
committerDaniel Hader <[email protected]>2026-06-14 12:58:14 -0500
commit482ea0261cb9f0def49ce3df542b2a7f811262d1 (patch)
tree3bb961316b2ca856409b9f3b2145036ae9f5d704 /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.h38
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