31 lines
581 B
Odin
31 lines
581 B
Odin
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]
|
|
}
|
|
}
|