diff options
| author | gingerBill <bill@gingerbill.org> | 2020-08-16 22:07:40 +0100 |
|---|---|---|
| committer | gingerBill <bill@gingerbill.org> | 2020-08-16 22:07:40 +0100 |
| commit | 033b46def884b94d3095f1f4fb71ca9cf0819081 (patch) | |
| tree | 13d510a3d499533524a2fd56681ca88a50a3a433 /core/mem/allocators.odin | |
| parent | 1f571f48e5c3cf823f068e464324ff218314498f (diff) | |
Add `mem.Allocator_Mode.Query_Features, `mem.Allocator_Mode_Set`, `mem.query_features`
Diffstat (limited to 'core/mem/allocators.odin')
| -rw-r--r-- | core/mem/allocators.odin | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/core/mem/allocators.odin b/core/mem/allocators.odin index 3a6b95396..8c27f6887 100644 --- a/core/mem/allocators.odin +++ b/core/mem/allocators.odin @@ -74,6 +74,13 @@ arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode, case .Resize: return default_resize_align(old_memory, old_size, size, alignment, arena_allocator(arena)); + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Alloc, .Free_All, .Resize, .Query_Features}; + } + return set; } return nil; @@ -197,6 +204,13 @@ scratch_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode, return old_memory; } return scratch_allocator_proc(allocator_data, Allocator_Mode.Alloc, size, alignment, old_memory, old_size, flags, loc); + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Alloc, .Free, .Free_All, .Resize, .Query_Features}; + } + return set; } return nil; @@ -348,6 +362,13 @@ stack_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode, } return old_memory; + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Alloc, .Free, .Free_All, .Resize, .Query_Features}; + } + return set; } return nil; @@ -468,6 +489,13 @@ small_stack_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode, ptr := raw_alloc(s, size, align); copy(ptr, old_memory, min(old_size, size)); return ptr; + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Alloc, .Free, .Free_All, .Resize, .Query_Features}; + } + return set; } return nil; @@ -519,6 +547,13 @@ dynamic_pool_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode ptr := dynamic_pool_alloc(pool, size); copy(ptr, old_memory, old_size); return ptr; + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Alloc, .Free_All, .Resize, .Query_Features}; + } + return set; } return nil; } @@ -654,6 +689,13 @@ panic_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode, } case .Free_All: panic("mem: panic allocator, .Free_All called"); + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Query_Features}; + } + return set; } return nil; @@ -701,6 +743,13 @@ alloca_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode, // Do nothing case .Free_All: // Do nothing + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Alloc, .Resize, .Query_Features}; + } + return set; } return nil; } @@ -774,6 +823,13 @@ tracking_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode, si if data.clear_on_free_all { clear_map(&data.allocation_map); } + + case .Query_Features: + set := (^Allocator_Mode_Set)(old_memory); + if set != nil { + set^ = {.Alloc, .Free, .Free_All, .Resize, .Query_Features}; + } + return set; } return result; |