mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 07:08:48 +00:00
Fix issue with #118
This commit is contained in:
+5
-2
@@ -131,12 +131,15 @@ arena_allocator :: proc(arena: ^Arena) -> Allocator {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
import "core:fmt.odin";
|
||||||
|
|
||||||
arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
|
arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
|
||||||
size, alignment: int,
|
size, alignment: int,
|
||||||
old_memory: rawptr, old_size: int, flags: u64) -> rawptr {
|
old_memory: rawptr, old_size: int, flags: u64) -> rawptr {
|
||||||
using Allocator_Mode;
|
using Allocator_Mode;
|
||||||
arena := cast(^Arena)allocator_data;
|
arena := cast(^Arena)allocator_data;
|
||||||
|
|
||||||
|
|
||||||
switch mode {
|
switch mode {
|
||||||
case Alloc:
|
case Alloc:
|
||||||
total_size := size + alignment;
|
total_size := size + alignment;
|
||||||
@@ -148,7 +151,7 @@ arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
|
|||||||
#no_bounds_check end := &arena.memory[len(arena.memory)];
|
#no_bounds_check end := &arena.memory[len(arena.memory)];
|
||||||
|
|
||||||
ptr := align_forward(end, alignment);
|
ptr := align_forward(end, alignment);
|
||||||
(cast(^raw.Slice)&arena).len += total_size;
|
(^raw.Slice)(&arena.memory).len += total_size;
|
||||||
return zero(ptr, size);
|
return zero(ptr, size);
|
||||||
|
|
||||||
case Free:
|
case Free:
|
||||||
@@ -156,7 +159,7 @@ arena_allocator_proc :: proc(allocator_data: rawptr, mode: Allocator_Mode,
|
|||||||
// Use ArenaTempMemory if you want to free a block
|
// Use ArenaTempMemory if you want to free a block
|
||||||
|
|
||||||
case FreeAll:
|
case FreeAll:
|
||||||
(cast(^raw.Slice)&arena).len = 0;
|
(^raw.Slice)(&arena.memory).len = 0;
|
||||||
|
|
||||||
case Resize:
|
case Resize:
|
||||||
return default_resize_align(old_memory, old_size, size, alignment);
|
return default_resize_align(old_memory, old_size, size, alignment);
|
||||||
|
|||||||
Reference in New Issue
Block a user