19 #define CHUNK_SIZE_DEFAULT (1 << 16)
21 #define CHUNK_ELEM_MIN 32
41 return ((
char *)(
queue)->chunk_first->data) + ((
queue)->elem_size * (
queue)->chunk_first_index);
46 return ((
char *)(
queue)->chunk_last->data) + ((
queue)->elem_size * (
queue)->chunk_last_index);
74 queue->elem_size = elem_size;
76 queue->chunk_last_index =
queue->chunk_elem_max - 1;
99 queue->chunk_last_index++;
104 if (
queue->chunk_free) {
105 chunk =
queue->chunk_free;
115 queue->chunk_first = chunk;
118 queue->chunk_last->next = chunk;
121 queue->chunk_last = chunk;
122 queue->chunk_last_index = 0;
136 queue->chunk_first_index++;
142 queue->chunk_first =
queue->chunk_first->next;
143 queue->chunk_first_index = 0;
146 queue->chunk_last_index =
queue->chunk_elem_max - 1;
150 queue->chunk_free = chunk_free;
156 return queue->elem_num;
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
Read Guarded memory(de)allocation.
#define MEM_SIZE_OVERHEAD
static void * queue_get_last_elem(GSQueue *queue)
void BLI_gsqueue_free(GSQueue *queue)
static void * queue_get_first_elem(GSQueue *queue)
void BLI_gsqueue_push(GSQueue *queue, const void *item)
GSQueue * BLI_gsqueue_new(const size_t elem_size)
void BLI_gsqueue_pop(GSQueue *queue, void *r_item)
static void queue_free_chunk(struct QueueChunk *data)
bool BLI_gsqueue_is_empty(const GSQueue *queue)
static size_t queue_chunk_elem_max_calc(const size_t elem_size, size_t chunk_size)
#define CHUNK_SIZE_DEFAULT
size_t BLI_gsqueue_len(const GSQueue *queue)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_callocN)(size_t len, const char *str)
void *(* MEM_mallocN)(size_t len, const char *str)
static const int chunk_size
struct QueueChunk * chunk_free
struct QueueChunk * chunk_last
struct QueueChunk * chunk_first