libusual
0.1

Binary heap. More...
Typedefs  
typedef bool(*  heap_is_better_f )(const void *a, const void *b) 
Object comparision function.  
typedef void(*  heap_save_pos_f )(void *a, unsigned pos) 
Heap position storage.  
Functions  
struct Heap *  heap_create (heap_is_better_f is_better_cb, heap_save_pos_f save_pos_cb, CxMem *cx) 
Create new heap object.  
void  heap_destroy (struct Heap *h) 
Release memory allocated by heap.  
bool  heap_push (struct Heap *h, void *ptr) 
Put new object into heap.  
void *  heap_pop (struct Heap *h) 
Remove and return topmost object from heap.  
void *  heap_top (struct Heap *h) 
Return topmost object in heap.  
void *  heap_remove (struct Heap *h, unsigned pos) 
Remove and return any object from heap by index.  
bool  heap_reserve (struct Heap *h, unsigned extra) 
Reserve room for more elements.  
unsigned  heap_size (struct Heap *h) 
Return number of objects in heap. 
Binary heap.
Binary heap is sort of binary tree held inside array, with following 2 properties:
Instead of "min" or "max"heap, this is "best"heap, as it operates with userdefined heap_is_better() functions, which is used to bubble elements on top.
typedef bool(* heap_is_better_f)(const void *a, const void *b) 
Object comparision function.
Should return true if a needs to reach top before b, false if not or equal.
typedef void(* heap_save_pos_f)(void *a, unsigned pos) 
Heap position storage.
If user wants to delete elements from the middle of heap, this function should be used to keep track where the element is located.
struct Heap* heap_create  (  heap_is_better_f  is_better_cb, 
heap_save_pos_f  save_pos_cb,  
CxMem *  cx  
)  [read] 
Create new heap object.
is_better_cb  Callback to decide priority. 
save_pos_cb  Callback to store current index. 
cx  Allocation context. 
void heap_destroy  (  struct Heap *  h  ) 
Release memory allocated by heap.
bool heap_push  (  struct Heap *  h, 
void *  ptr  
) 
Put new object into heap.
void* heap_pop  (  struct Heap *  h  ) 
Remove and return topmost object from heap.
void* heap_top  (  struct Heap *  h  ) 
Return topmost object in heap.
void* heap_remove  (  struct Heap *  h, 
unsigned  pos  
) 
Remove and return any object from heap by index.
bool heap_reserve  (  struct Heap *  h, 
unsigned  extra  
) 
Reserve room for more elements.
Returns false if allocation failed.
unsigned heap_size  (  struct Heap *  h  ) 
Return number of objects in heap.