[mem]: Rename dynamic pool to dynamic arena

This commit is contained in:
flysand7
2024-09-07 12:33:12 +11:00
parent aea3e9a585
commit f8641ddd1b
+36 -25
View File
@@ -788,8 +788,19 @@ small_stack_allocator_proc :: proc(
} }
/* old stuff */
Dynamic_Pool :: Dynamic_Arena
DYNAMIC_POOL_BLOCK_SIZE_DEFAULT :: DYNAMIC_ARENA_BLOCK_SIZE_DEFAULT
DYNAMIC_POOL_OUT_OF_BAND_SIZE_DEFAULT :: DYNAMIC_ARENA_OUT_OF_BAND_SIZE_DEFAULT
dynamic_pool_allocator_proc :: dynamic_arena_allocator_proc
dynamic_pool_free_all :: dynamic_arena_free_all
dynamic_pool_reset :: dynamic_arena_reset
dynamic_pool_alloc_bytes :: dynamic_arena_alloc_bytes
dynamic_pool_alloc :: dynamic_arena_alloc
dynamic_pool_init :: dynamic_arena_init
dynamic_pool_allocator :: dynamic_arena_allocator
Dynamic_Pool :: struct { Dynamic_Arena :: struct {
block_size: int, block_size: int,
out_band_size: int, out_band_size: int,
alignment: int, alignment: int,
@@ -805,10 +816,10 @@ Dynamic_Pool :: struct {
block_allocator: Allocator, block_allocator: Allocator,
} }
DYNAMIC_POOL_BLOCK_SIZE_DEFAULT :: 65536 DYNAMIC_ARENA_BLOCK_SIZE_DEFAULT :: 65536
DYNAMIC_POOL_OUT_OF_BAND_SIZE_DEFAULT :: 6554 DYNAMIC_ARENA_OUT_OF_BAND_SIZE_DEFAULT :: 6554
dynamic_pool_allocator_proc :: proc( dynamic_arena_allocator_proc :: proc(
allocator_data: rawptr, allocator_data: rawptr,
mode: Allocator_Mode, mode: Allocator_Mode,
size: int, size: int,
@@ -817,21 +828,21 @@ dynamic_pool_allocator_proc :: proc(
old_size: int, old_size: int,
loc := #caller_location, loc := #caller_location,
) -> ([]byte, Allocator_Error) { ) -> ([]byte, Allocator_Error) {
pool := (^Dynamic_Pool)(allocator_data) pool := (^Dynamic_Arena)(allocator_data)
switch mode { switch mode {
case .Alloc, .Alloc_Non_Zeroed: case .Alloc, .Alloc_Non_Zeroed:
return dynamic_pool_alloc_bytes(pool, size) return dynamic_arena_alloc_bytes(pool, size)
case .Free: case .Free:
return nil, .Mode_Not_Implemented return nil, .Mode_Not_Implemented
case .Free_All: case .Free_All:
dynamic_pool_free_all(pool) dynamic_arena_free_all(pool)
return nil, nil return nil, nil
case .Resize, .Resize_Non_Zeroed: case .Resize, .Resize_Non_Zeroed:
if old_size >= size { if old_size >= size {
return byte_slice(old_memory, size), nil return byte_slice(old_memory, size), nil
} }
data, err := dynamic_pool_alloc_bytes(pool, size) data, err := dynamic_arena_alloc_bytes(pool, size)
if err == nil { if err == nil {
runtime.copy(data, byte_slice(old_memory, old_size)) runtime.copy(data, byte_slice(old_memory, old_size))
} }
@@ -856,21 +867,20 @@ dynamic_pool_allocator_proc :: proc(
return nil, nil return nil, nil
} }
@(require_results) @(require_results)
dynamic_pool_allocator :: proc(pool: ^Dynamic_Pool) -> Allocator { dynamic_arena_allocator :: proc(pool: ^Dynamic_Arena) -> Allocator {
return Allocator{ return Allocator{
procedure = dynamic_pool_allocator_proc, procedure = dynamic_arena_allocator_proc,
data = pool, data = pool,
} }
} }
dynamic_pool_init :: proc( dynamic_arena_init :: proc(
pool: ^Dynamic_Pool, pool: ^Dynamic_Arena,
block_allocator := context.allocator, block_allocator := context.allocator,
array_allocator := context.allocator, array_allocator := context.allocator,
block_size := DYNAMIC_POOL_BLOCK_SIZE_DEFAULT, block_size := DYNAMIC_ARENA_BLOCK_SIZE_DEFAULT,
out_band_size := DYNAMIC_POOL_OUT_OF_BAND_SIZE_DEFAULT, out_band_size := DYNAMIC_ARENA_OUT_OF_BAND_SIZE_DEFAULT,
alignment := 8, alignment := 8,
) { ) {
pool.block_size = block_size pool.block_size = block_size
@@ -882,8 +892,8 @@ dynamic_pool_init :: proc(
pool.used_blocks.allocator = array_allocator pool.used_blocks.allocator = array_allocator
} }
dynamic_pool_destroy :: proc(pool: ^Dynamic_Pool) { dynamic_arena_destroy :: proc(pool: ^Dynamic_Arena) {
dynamic_pool_free_all(pool) dynamic_arena_free_all(pool)
delete(pool.unused_blocks) delete(pool.unused_blocks)
delete(pool.used_blocks) delete(pool.used_blocks)
delete(pool.out_band_allocations) delete(pool.out_band_allocations)
@@ -891,14 +901,14 @@ dynamic_pool_destroy :: proc(pool: ^Dynamic_Pool) {
} }
@(require_results) @(require_results)
dynamic_pool_alloc :: proc(pool: ^Dynamic_Pool, bytes: int) -> (rawptr, Allocator_Error) { dynamic_arena_alloc :: proc(pool: ^Dynamic_Arena, bytes: int) -> (rawptr, Allocator_Error) {
data, err := dynamic_pool_alloc_bytes(pool, bytes) data, err := dynamic_arena_alloc_bytes(pool, bytes)
return raw_data(data), err return raw_data(data), err
} }
@(require_results) @(require_results)
dynamic_pool_alloc_bytes :: proc(p: ^Dynamic_Pool, bytes: int) -> ([]byte, Allocator_Error) { dynamic_arena_alloc_bytes :: proc(p: ^Dynamic_Arena, bytes: int) -> ([]byte, Allocator_Error) {
cycle_new_block :: proc(p: ^Dynamic_Pool) -> (err: Allocator_Error) { cycle_new_block :: proc(p: ^Dynamic_Arena) -> (err: Allocator_Error) {
if p.block_allocator.procedure == nil { if p.block_allocator.procedure == nil {
panic("You must call pool_init on a Pool before using it") panic("You must call pool_init on a Pool before using it")
} }
@@ -960,8 +970,7 @@ dynamic_pool_alloc_bytes :: proc(p: ^Dynamic_Pool, bytes: int) -> ([]byte, Alloc
return ([^]byte)(memory)[:bytes], nil return ([^]byte)(memory)[:bytes], nil
} }
dynamic_arena_reset :: proc(p: ^Dynamic_Arena) {
dynamic_pool_reset :: proc(p: ^Dynamic_Pool) {
if p.current_block != nil { if p.current_block != nil {
append(&p.unused_blocks, p.current_block) append(&p.unused_blocks, p.current_block)
p.current_block = nil p.current_block = nil
@@ -980,8 +989,8 @@ dynamic_pool_reset :: proc(p: ^Dynamic_Pool) {
p.bytes_left = 0 // Make new allocations call `cycle_new_block` again. p.bytes_left = 0 // Make new allocations call `cycle_new_block` again.
} }
dynamic_pool_free_all :: proc(p: ^Dynamic_Pool) { dynamic_arena_free_all :: proc(p: ^Dynamic_Arena) {
dynamic_pool_reset(p) dynamic_arena_reset(p)
for block in p.unused_blocks { for block in p.unused_blocks {
free(block, p.block_allocator) free(block, p.block_allocator)
@@ -989,6 +998,8 @@ dynamic_pool_free_all :: proc(p: ^Dynamic_Pool) {
clear(&p.unused_blocks) clear(&p.unused_blocks)
} }
panic_allocator_proc :: proc( panic_allocator_proc :: proc(
allocator_data: rawptr, allocator_data: rawptr,
mode: Allocator_Mode, mode: Allocator_Mode,