21#define CHUNK_EMPTY ((size_t)-1)
23#define CHUNK_SIZE_DEFAULT (1 << 16)
25#define CHUNK_ELEM_MIN 32
45 return ((
char *)(stack)->chunk_curr->data) + ((stack)->elem_size * (stack)->chunk_index);
56 BLI_assert((elem_size != 0) && (chunk_size != 0));
58 while (
UNLIKELY(chunk_size <= elem_size_min)) {
65 return chunk_size / elem_size;
69 const char *description,
70 const size_t chunk_size)
152 dst = (
void *)((
char *)dst + stack->
elem_size);
160 dst = (
void *)((
char *)dst + (stack->
elem_size * n));
163 dst = (
void *)((
char *)dst - stack->
elem_size);
214 while (chunk_free_last->
next) {
215 chunk_free_last = chunk_free_last->
next;
241 for (i = 0;
data; data = data->next) {
#define BLI_stack_new(esize, descr)
Read Guarded memory(de)allocation.
#define MEM_SIZE_OVERHEAD
void *(* MEM_mallocN)(size_t len, const char *str)
void MEM_freeN(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void BLI_stack_clear(BLI_Stack *stack)
static void * stack_get_last_elem(BLI_Stack *stack)
BLI_Stack * BLI_stack_new_ex(const size_t elem_size, const char *description, const size_t chunk_size)
static void stack_free_chunks(struct StackChunk *data)
static size_t stack_chunk_elem_max_calc(const size_t elem_size, size_t chunk_size)
void BLI_stack_pop_n_reverse(BLI_Stack *stack, void *dst, uint n)
void BLI_stack_free(BLI_Stack *stack)
void BLI_stack_discard(BLI_Stack *stack)
void * BLI_stack_push_r(BLI_Stack *stack)
#define CHUNK_SIZE_DEFAULT
size_t BLI_stack_count(const BLI_Stack *stack)
void BLI_stack_pop_n(BLI_Stack *stack, void *dst, uint n)
void BLI_stack_pop(BLI_Stack *stack, void *dst)
void BLI_stack_push(BLI_Stack *stack, const void *src)
bool BLI_stack_is_empty(const BLI_Stack *stack)
void * BLI_stack_peek(BLI_Stack *stack)
struct StackChunk * chunk_free
struct StackChunk * chunk_curr