Blender V5.0
BLI_heap_simple.cc File Reference
#include <algorithm>
#include <cstdlib>
#include "MEM_guardedalloc.h"
#include "BLI_heap_simple.h"
#include "BLI_utildefines.h"
#include "BLI_strict_flags.h"

Go to the source code of this file.

Classes

struct  HeapSimpleNode
struct  HeapSimple

Macros

#define HEAP_PARENT(i)
#define OFFSET(i)
#define NODE(offset)
#define HEAP_LEFT_OFFSET(i)

Functions

HeapSimple Internal Functions
static void heapsimple_down (HeapSimple *heap, uint start_i, const HeapSimpleNode *init)
static void heapsimple_up (HeapSimple *heap, uint i, float active_val, void *active_ptr)
Public HeapSimple API
HeapSimpleBLI_heapsimple_new_ex (uint reserve_num)
HeapSimpleBLI_heapsimple_new ()
void BLI_heapsimple_free (HeapSimple *heap, HeapSimpleFreeFP ptrfreefp)
void BLI_heapsimple_clear (HeapSimple *heap, HeapSimpleFreeFP ptrfreefp)
void BLI_heapsimple_insert (HeapSimple *heap, float value, void *ptr)
bool BLI_heapsimple_is_empty (const HeapSimple *heap)
uint BLI_heapsimple_len (const HeapSimple *heap)
float BLI_heapsimple_top_value (const HeapSimple *heap)
void * BLI_heapsimple_pop_min (HeapSimple *heap)

Detailed Description

A min-heap / priority queue ADT.

Simplified version of the heap that only supports insertion and removal from top.

See BLI_heap.c for a more full featured heap implementation.

Definition in file BLI_heap_simple.cc.

Macro Definition Documentation

◆ HEAP_LEFT_OFFSET

#define HEAP_LEFT_OFFSET ( i)
Value:
(((i) << 1) + OFFSET(1))
#define OFFSET(i)
i
Definition text_draw.cc:230

Referenced by heapsimple_down().

◆ HEAP_PARENT

#define HEAP_PARENT ( i)
Value:
(((i) - 1) >> 1)

Definition at line 25 of file BLI_heap_simple.cc.

Referenced by heapsimple_up().

◆ NODE

#define NODE ( offset)
Value:
(*(HeapSimpleNode *)(tree_buf + (offset)))

Referenced by heapsimple_down().

◆ OFFSET

#define OFFSET ( i)
Value:
(i * uint(sizeof(HeapSimpleNode)))
unsigned int uint

Referenced by bmo_offset_edgeloops_exec(), and heapsimple_down().

Function Documentation

◆ BLI_heapsimple_clear()

void BLI_heapsimple_clear ( HeapSimple * heap,
HeapSimpleFreeFP ptrfreefp )

Definition at line 166 of file BLI_heap_simple.cc.

References i, HeapSimpleNode::ptr, HeapSimple::size, and HeapSimple::tree.

Referenced by bmo_connect_vert_pair_exec().

◆ BLI_heapsimple_free()

◆ BLI_heapsimple_insert()

◆ BLI_heapsimple_is_empty()

◆ BLI_heapsimple_len()

uint BLI_heapsimple_len ( const HeapSimple * heap)

Definition at line 193 of file BLI_heap_simple.cc.

References HeapSimple::size.

Referenced by bmo_connect_vert_pair_exec(), TEST(), and TEST().

◆ BLI_heapsimple_new()

◆ BLI_heapsimple_new_ex()

HeapSimple * BLI_heapsimple_new_ex ( unsigned int reserve_num)

Creates a new simple heap, which only supports insertion and removal from top.

Note
Use when the size of the heap is known in advance.

Definition at line 139 of file BLI_heap_simple.cc.

References HeapSimple::bufsize, MEM_calloc_arrayN(), MEM_callocN(), HeapSimple::size, and HeapSimple::tree.

Referenced by BLI_heapsimple_new(), and heap_find_nearest_begin().

◆ BLI_heapsimple_pop_min()

◆ BLI_heapsimple_top_value()

float BLI_heapsimple_top_value ( const HeapSimple * heap)

Return the lowest value of the heap.

Definition at line 198 of file BLI_heap_simple.cc.

References BLI_assert, HeapSimple::size, HeapSimple::tree, and HeapSimpleNode::value.

Referenced by edbm_average_normals_exec(), and heap_find_nearest_begin().

◆ heapsimple_down()

void heapsimple_down ( HeapSimple * heap,
uint start_i,
const HeapSimpleNode * init )
static

◆ heapsimple_up()

void heapsimple_up ( HeapSimple * heap,
uint i,
float active_val,
void * active_ptr )
static

Definition at line 114 of file BLI_heap_simple.cc.

References HEAP_PARENT, i, LIKELY, HeapSimple::tree, and tree.

Referenced by BLI_heapsimple_insert().