Rename virtual.Arena to virtual.Growing_Arena

This commit is contained in:
gingerBill
2021-09-29 16:50:36 +01:00
parent b2a36f204e
commit 08ac2fd1b6
+12 -11
View File
@@ -3,7 +3,7 @@ package mem_virtual
import "core:mem" import "core:mem"
import sync "core:sync/sync2" import sync "core:sync/sync2"
Arena :: struct { Growing_Arena :: struct {
curr_block: ^Memory_Block, curr_block: ^Memory_Block,
total_used: int, total_used: int,
total_allocated: int, total_allocated: int,
@@ -17,8 +17,8 @@ Arena :: struct {
DEFAULT_MINIMUM_BLOCK_SIZE :: 8*1024*1024 DEFAULT_MINIMUM_BLOCK_SIZE :: 8*1024*1024
DEFAULT_PAGE_SIZE := 4096 DEFAULT_PAGE_SIZE := 4096
arena_alloc :: proc(arena: ^Arena, min_size: int, alignment: int) -> (data: []byte, err: mem.Allocator_Error) { growing_arena_alloc :: proc(arena: ^Growing_Arena, min_size: int, alignment: int) -> (data: []byte, err: mem.Allocator_Error) {
align_forward_offset :: proc(arena: ^Arena, alignment: int) -> int #no_bounds_check { align_forward_offset :: proc(arena: ^Growing_Arena, alignment: int) -> int #no_bounds_check {
alignment_offset := 0 alignment_offset := 0
ptr := uintptr(arena.curr_block.base[arena.curr_block.used:]) ptr := uintptr(arena.curr_block.base[arena.curr_block.used:])
mask := uintptr(alignment-1) mask := uintptr(alignment-1)
@@ -69,7 +69,8 @@ arena_alloc :: proc(arena: ^Arena, min_size: int, alignment: int) -> (data: []by
return ptr[:min_size], nil return ptr[:min_size], nil
} }
arena_free_all :: proc(arena: ^Arena) { growing_arena_free_all :: proc(arena: ^Growing_Arena) {
mutex := &arena.mutex
if !arena.ignore_mutex { if !arena.ignore_mutex {
sync.mutex_lock(mutex) sync.mutex_lock(mutex)
} }
@@ -84,27 +85,27 @@ arena_free_all :: proc(arena: ^Arena) {
} }
} }
arena_allocator :: proc(arena: ^Arena) -> mem.Allocator { growing_arena_allocator :: proc(arena: ^Growing_Arena) -> mem.Allocator {
return mem.Allocator{arena_allocator_proc, arena} return mem.Allocator{growing_arena_allocator_proc, arena}
} }
arena_allocator_proc :: proc(allocator_data: rawptr, mode: mem.Allocator_Mode, growing_arena_allocator_proc :: proc(allocator_data: rawptr, mode: mem.Allocator_Mode,
size, alignment: int, size, alignment: int,
old_memory: rawptr, old_size: int, old_memory: rawptr, old_size: int,
location := #caller_location) -> (data: []byte, err: mem.Allocator_Error) { location := #caller_location) -> (data: []byte, err: mem.Allocator_Error) {
arena := (^Arena)(allocator_data) arena := (^Growing_Arena)(allocator_data)
switch mode { switch mode {
case .Alloc: case .Alloc:
return arena_alloc(arena, size, alignment) return growing_arena_alloc(arena, size, alignment)
case .Free: case .Free:
err = .Mode_Not_Implemented err = .Mode_Not_Implemented
return return
case .Free_All: case .Free_All:
arena_free_all(arena) growing_arena_free_all(arena)
return return
case .Resize: case .Resize:
return mem.default_resize_bytes_align(mem.byte_slice(old_memory, old_size), size, alignment, arena_allocator(arena)) return mem.default_resize_bytes_align(mem.byte_slice(old_memory, old_size), size, alignment, growing_arena_allocator(arena), location)
case .Query_Features, .Query_Info: case .Query_Features, .Query_Info:
err = .Mode_Not_Implemented err = .Mode_Not_Implemented