40 #define HEAP_CHUNK_DEFAULT_NUM \
41 ((uint)((MEM_SIZE_OPTIMAL((1 << 16) - sizeof(struct HeapNode_Chunk))) / sizeof(HeapNode)))
60 #define HEAP_PARENT(i) (((i)-1) >> 1)
61 #define HEAP_LEFT(i) (((i) << 1) + 1)
62 #define HEAP_RIGHT(i) (((i) << 1) + 2)
63 #define HEAP_COMPARE(a, b) ((a)->value < (b)->value)
66 # define HEAP_EQUALS(a, b) ((a)->value == (b)->value)
145 chunk->
prev = chunk_prev;
207 for (i = 0; i < heap->
size; i++) {
215 chunk_prev = chunk->
prev;
229 for (i = 0; i < heap->
size; i++) {
271 if (*node_p ==
NULL) {
281 return (heap->
size == 0);
291 return heap->
tree[0];
334 if (value < node->value) {
338 else if (value >
node->value) {
347 if (value < node->value) {
351 else if (value >
node->value) {
369 if (root < heap->
size) {
374 if (l < heap->
size) {
380 if (r < heap->
size) {
static struct HeapNode * heap_node_alloc(Heap *heap)
bool BLI_heap_is_valid(const Heap *heap)
void BLI_heap_insert_or_update(Heap *heap, HeapNode **node_p, float value, void *ptr)
void BLI_heap_node_value_update_ptr(Heap *heap, HeapNode *node, float value, void *ptr)
BLI_INLINE void heap_swap(Heap *heap, const uint i, const uint j)
void BLI_heap_free(Heap *heap, HeapFreeFP ptrfreefp)
static void heap_down(Heap *heap, uint i)
void BLI_heap_clear(Heap *heap, HeapFreeFP ptrfreefp)
bool BLI_heap_is_empty(const Heap *heap)
void BLI_heap_remove(Heap *heap, HeapNode *node)
static void heap_up(Heap *heap, uint i)
uint BLI_heap_len(const Heap *heap)
Heap * BLI_heap_new_ex(uint reserve_num)
static void heap_node_free(Heap *heap, HeapNode *node)
static bool heap_is_minheap(const Heap *heap, uint root)
Heap * BLI_heap_new(void)
static struct HeapNode_Chunk * heap_node_alloc_chunk(uint nodes_num, struct HeapNode_Chunk *chunk_prev)
HeapNode * BLI_heap_insert(Heap *heap, float value, void *ptr)
float BLI_heap_node_value(const HeapNode *heap)
#define HEAP_CHUNK_DEFAULT_NUM
void * BLI_heap_pop_min(Heap *heap)
HeapNode * BLI_heap_top(const Heap *heap)
#define HEAP_COMPARE(a, b)
void BLI_heap_node_value_update(Heap *heap, HeapNode *node, float value)
float BLI_heap_top_value(const Heap *heap)
void * BLI_heap_node_ptr(const HeapNode *heap)
A min-heap / priority queue ADT.
void(* HeapFreeFP)(void *ptr)
Strict compiler flags for areas of code we want to ensure don't do conversions without us knowing abo...
#define SWAP_TVAL(tval, a, b)
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum const void *lists _GL_VOID_RET _GL_VOID const GLdouble *equation _GL_VOID_RET _GL_VOID GLdouble GLdouble blue _GL_VOID_RET _GL_VOID GLfloat GLfloat blue _GL_VOID_RET _GL_VOID GLint GLint blue _GL_VOID_RET _GL_VOID GLshort GLshort blue _GL_VOID_RET _GL_VOID GLubyte GLubyte blue _GL_VOID_RET _GL_VOID GLuint GLuint blue _GL_VOID_RET _GL_VOID GLushort GLushort blue _GL_VOID_RET _GL_VOID GLbyte GLbyte GLbyte alpha _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble alpha _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat alpha _GL_VOID_RET _GL_VOID GLint GLint GLint alpha _GL_VOID_RET _GL_VOID GLshort GLshort GLshort alpha _GL_VOID_RET _GL_VOID GLubyte GLubyte GLubyte alpha _GL_VOID_RET _GL_VOID GLuint GLuint GLuint alpha _GL_VOID_RET _GL_VOID GLushort GLushort GLushort alpha _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLint GLsizei GLsizei GLenum type _GL_VOID_RET _GL_VOID GLsizei GLenum GLenum const void *pixels _GL_VOID_RET _GL_VOID const void *pointer _GL_VOID_RET _GL_VOID GLdouble v _GL_VOID_RET _GL_VOID GLfloat v _GL_VOID_RET _GL_VOID GLint GLint i2 _GL_VOID_RET _GL_VOID GLint j _GL_VOID_RET _GL_VOID GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble GLdouble GLdouble zFar _GL_VOID_RET _GL_UINT GLdouble *equation _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLenum GLfloat *v _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLfloat *values _GL_VOID_RET _GL_VOID GLushort *values _GL_VOID_RET _GL_VOID GLenum GLfloat *params _GL_VOID_RET _GL_VOID GLenum GLdouble *params _GL_VOID_RET _GL_VOID GLenum GLint *params _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_BOOL GLfloat param _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLushort pattern _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLint GLdouble GLdouble GLint GLint const GLdouble *points _GL_VOID_RET _GL_VOID GLdouble GLdouble u2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLint GLdouble GLdouble v2 _GL_VOID_RET _GL_VOID GLenum GLfloat param _GL_VOID_RET _GL_VOID GLenum GLint param _GL_VOID_RET _GL_VOID GLenum mode _GL_VOID_RET _GL_VOID GLdouble GLdouble nz _GL_VOID_RET _GL_VOID GLfloat GLfloat nz _GL_VOID_RET _GL_VOID GLint GLint nz _GL_VOID_RET _GL_VOID GLshort GLshort nz _GL_VOID_RET _GL_VOID GLsizei const void *pointer _GL_VOID_RET _GL_VOID GLsizei const GLfloat *values _GL_VOID_RET _GL_VOID GLsizei const GLushort *values _GL_VOID_RET _GL_VOID GLint param _GL_VOID_RET _GL_VOID const GLuint const GLclampf *priorities _GL_VOID_RET _GL_VOID GLdouble y _GL_VOID_RET _GL_VOID GLfloat y _GL_VOID_RET _GL_VOID GLint y _GL_VOID_RET _GL_VOID GLshort y _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLfloat GLfloat z _GL_VOID_RET _GL_VOID GLint GLint z _GL_VOID_RET _GL_VOID GLshort GLshort z _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble w _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat w _GL_VOID_RET _GL_VOID GLint GLint GLint w _GL_VOID_RET _GL_VOID GLshort GLshort GLshort w _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble y2 _GL_VOID_RET _GL_VOID GLfloat GLfloat GLfloat y2 _GL_VOID_RET _GL_VOID GLint GLint GLint y2 _GL_VOID_RET _GL_VOID GLshort GLshort GLshort y2 _GL_VOID_RET _GL_VOID GLdouble GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLdouble GLdouble z _GL_VOID_RET _GL_VOID GLuint *buffer _GL_VOID_RET _GL_VOID GLdouble t _GL_VOID_RET _GL_VOID GLfloat t _GL_VOID_RET _GL_VOID GLint t _GL_VOID_RET _GL_VOID GLshort t _GL_VOID_RET _GL_VOID GLdouble GLdouble r _GL_VOID_RET _GL_VOID GLfloat GLfloat r _GL_VOID_RET _GL_VOID GLint GLint r _GL_VOID_RET _GL_VOID GLshort GLshort r _GL_VOID_RET _GL_VOID GLdouble GLdouble r
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
ATTR_WARN_UNUSED_RESULT const BMLoop * l
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
struct HeapNode_Chunk * prev
struct HeapNode_Chunk * chunk