summaryrefslogtreecommitdiff
path: root/src/util/stack.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/stack.h')
-rw-r--r--src/util/stack.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/util/stack.h b/src/util/stack.h
new file mode 100644
index 0000000..01a48e5
--- /dev/null
+++ b/src/util/stack.h
@@ -0,0 +1,26 @@
+#pragma once
+
+#include <stddef.h>
+#include <stdbool.h>
+
+struct Stack {
+ size_t size;
+ size_t capacity;
+ void* data;
+};
+
+void stack_init(struct Stack* stack, size_t size);
+void stack_push(struct Stack* stack, void* data, size_t len);
+void* stack_pop(struct Stack* stack, size_t len);
+void stack_free(struct Stack* stack);
+
+inline void stack_push_int(struct Stack* stack, int value) {
+ stack_push(stack, &value, sizeof(int));
+}
+
+inline bool stack_pop_int(struct Stack* stack, int* value) {
+ void* d = stack_pop(stack, sizeof(int));
+ if (d == NULL) return false;
+ *value = *(int*)(d);
+ return true;
+}