aboutsummaryrefslogtreecommitdiff
path: root/src/common_memory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common_memory.cpp')
-rw-r--r--src/common_memory.cpp44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/common_memory.cpp b/src/common_memory.cpp
index 9e0222bc4..0b95e1242 100644
--- a/src/common_memory.cpp
+++ b/src/common_memory.cpp
@@ -353,7 +353,7 @@ gb_internal gbAllocator arena_allocator(Arena *arena) {
gb_internal GB_ALLOCATOR_PROC(arena_allocator_proc) {
void *ptr = nullptr;
Arena *arena = cast(Arena *)allocator_data;
- GB_ASSERT_NOT_NULL(arena);
+ GB_ASSERT(arena != nullptr);
switch (type) {
case gbAllocation_Alloc:
@@ -401,6 +401,48 @@ gb_internal Arena *get_arena(ThreadArenaKind kind) {
}
+template <typename T>
+gb_internal T *permanent_alloc_item() {
+ Arena *arena = get_arena(ThreadArena_Permanent);
+ return arena_alloc_item<T>(arena);
+}
+
+template <typename T>
+gb_internal T *permanent_alloc_array(isize count) {
+ Arena *arena = get_arena(ThreadArena_Permanent);
+ return cast(T *)arena_alloc(arena, gb_size_of(T)*count, gb_align_of(T));
+}
+
+template <typename T>
+gb_internal Slice<T> permanent_slice_make(isize count) {
+ Arena *arena = get_arena(ThreadArena_Permanent);
+ T *data = cast(T *)arena_alloc(arena, gb_size_of(T)*count, gb_align_of(T));
+ return {data, count};
+}
+
+template <typename T>
+gb_internal T *temporary_alloc_item() {
+ Arena *arena = get_arena(ThreadArena_Temporary);
+ return arena_alloc_item<T>(arena);
+}
+
+template <typename T>
+gb_internal T *temporary_alloc_array(isize count) {
+ Arena *arena = get_arena(ThreadArena_Temporary);
+ return cast(T *)arena_alloc(arena, gb_size_of(T)*count, gb_align_of(T));
+}
+
+template <typename T>
+gb_internal Slice<T> temporary_slice_make(isize count) {
+ Arena *arena = get_arena(ThreadArena_Temporary);
+ T *data = cast(T *)arena_alloc(arena, gb_size_of(T)*count, gb_align_of(T));
+ return {data, count};
+}
+
+
+
+
+
gb_internal GB_ALLOCATOR_PROC(thread_arena_allocator_proc) {
void *ptr = nullptr;