summaryrefslogtreecommitdiff
path: root/libs/pwyazh/memory.h
diff options
context:
space:
mode:
Diffstat (limited to 'libs/pwyazh/memory.h')
-rw-r--r--libs/pwyazh/memory.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/libs/pwyazh/memory.h b/libs/pwyazh/memory.h
new file mode 100644
index 0000000..6f741b7
--- /dev/null
+++ b/libs/pwyazh/memory.h
@@ -0,0 +1,41 @@
+#ifndef MEMORY_H
+#define MEMORY_H
+
+#include <stdlib.h>
+
+Arena *
+arena_alloc(U64 capacity)
+{
+ Arena *result = 0;
+ result = malloc(sizeof(Arena));
+ Assert(result);
+ result->memory = malloc(capacity);
+ Assert(result->memory);
+ result->capacity = capacity;
+ result->used = 0;
+ return(result);
+}
+
+void
+arena_release(Arena *arena)
+{
+ free(arena->memory);
+ arena->memory = 0;
+ arena->capacity = 0;
+ arena->used = 0;
+ free(arena);
+}
+
+void *
+arena_push_size(Arena *arena, U64 size)
+{
+ Assert(arena->used+size <= arena->capacity);
+ void *result = arena->memory+arena->used;
+ arena->used += size;
+ return(result);
+}
+
+#define ArenaPushStruct(arena, element) arena_push_size(arena, sizeof(*(element))
+#define ArenaPushArray(arena, array) arena_push_size(arena, sizeof(array))
+
+#endif /* MEMORY_H */