package scratch import "core:mem" import "core:mem/virtual" @(thread_local) scratch_init_done: bool @(thread_local) arenas: [2]virtual.Arena @(thread_local) allocators: [2]mem.Allocator _init_scratch :: #force_inline proc() { if !scratch_init_done { for i in 0 ..< 2 { _ = virtual.arena_init_static(&arenas[i]) allocators[i] = virtual.arena_allocator(&arenas[i]) } } } get_scratch :: proc(conflict := context.temp_allocator) -> mem.Allocator { _init_scratch() if conflict.data == allocators[1].data { return allocators[0] } else { return allocators[1] } }