|
Simple data structures / objects in plain C Snapshot
|
Go to the source code of this file.
Functions | |
| int | HEAP_push (HEAP *heap, void *element, size_t elmsize) |
| insert a new element into the heap | |
| int | HEAP_pop (HEAP *heap) |
| remove the top element from the heap | |
| static int | check_recursive (HEAP *heap, size_t pos) |
| int | HEAP_check (HEAP *heap) |
| check consistency of heap object. | |
| static void | visit_sorted (HEAP *heap, size_t pos, HEAP_VISITOR eval, void *context) |
| void | HEAP_foreach_sorted (HEAP *heap, HEAP_VISITOR eval, void *context) |
| static int check_recursive | ( | HEAP * | heap, |
| size_t | pos | ||
| ) | [static] |
Definition at line 129 of file heap.c.
{
size_t elmsize = heap->elmsize;
size_t pos_left;
size_t pos_right;
pos_left = (2 * pos);
if (pos_left <= heap->elmcount) {
if (heap->compare_func( heap->buffer + (pos - 1) * elmsize,
heap->buffer + (pos_left - 1) * elmsize,
elmsize) > 0) {
return 0;
}
if (!check_recursive( heap, pos_left)) {
return 0;
}
}
pos_right = (2 * pos + 1) * elmsize;
if (pos_right <= heap->elmcount) {
if (heap->compare_func( heap->buffer + (pos - 1) * elmsize,
heap->buffer + (pos_right - 1) * elmsize,
elmsize) > 0) {
return 0;
}
if (!check_recursive( heap, pos_right)) {
return 0;
}
}
return 1;
}
| static void visit_sorted | ( | HEAP * | heap, |
| size_t | pos, | ||
| HEAP_VISITOR | eval, | ||
| void * | context | ||
| ) | [static] |
Definition at line 178 of file heap.c.
{
size_t elmsize = heap->elmsize;
size_t pos_left;
size_t pos_right;
if (heap->elmcount > heap->elmmaxcount) {
return;
}
pos_left = (2 * pos);
if (pos_left <= heap->elmcount) {
check_recursive( heap, pos_left );
}
pos_right = (2 * pos + 1) * elmsize;
if (pos_right <= heap->elmcount) {
check_recursive( heap, pos_right );
}
eval( pos, heap->buffer + (pos - 1) * elmsize, elmsize, context );
}
1.7.4