package basic import "base:runtime" import "core:prof/spall" //----- Spall ---------------------------------- SPALL_TRACE :: #config(SPALL_TRACE, false) spall_ctx: spall.Context @(thread_local) spall_buffer: spall.Buffer //----- Compile globals ---------------------------------- ODIN_BOUNDS_CHECK :: !ODIN_NO_BOUNDS_CHECK INT_NUM_BITS :: size_of(int) * 8 //----- Array ---------------------------------- // append unless array doesn't room, then panic append_elem_capped :: #force_inline proc( array: ^$T/[dynamic]$E, arg: E, loc := #caller_location, ) -> ( n: int, err: runtime.Allocator_Error, ) #optional_allocator_error { when ODIN_BOUNDS_CHECK { if len(array) == cap(array) { panic("Array would have to expand to accomodate append.") } else { return append_elem(array, arg, loc) } } else { return append_elem(array, arg, loc) } } append_soa_elem_capped :: proc( array: ^$T/#soa[dynamic]$E, arg: E, loc := #caller_location, ) -> ( n: int, err: runtime.Allocator_Error, ) #optional_allocator_error { when ODIN_BOUNDS_CHECK { if len(array) == cap(array) { panic("Array would have to expand to accomodate append.") } else { return append_soa_elem(array, arg, loc) } } else { return append_soa_elem(array, arg, loc) } } append_capped :: proc { append_elem_capped, append_soa_elem_capped, }