Add priority_heap iter and unit test
All checks were successful
Run Unit Tests / build-and-run-unit-tests (push) Successful in 6s
All checks were successful
Run Unit Tests / build-and-run-unit-tests (push) Successful in 6s
This commit is contained in:
parent
78a36b48db
commit
5a613d1841
3 changed files with 34 additions and 0 deletions
|
@ -189,3 +189,16 @@ void *simple_archiver_priority_heap_pop(SDArchiverPHeap *priority_heap) {
|
|||
|
||||
return data;
|
||||
}
|
||||
|
||||
void simple_archiver_priority_heap_iter(SDArchiverPHeap *priority_heap,
|
||||
void(*iter_fn)(void*)) {
|
||||
if (priority_heap->size == 0) {
|
||||
return;
|
||||
}
|
||||
for (uint64_t idx = 0; idx < priority_heap->size; ++idx) {
|
||||
if (priority_heap->nodes[idx].is_valid) {
|
||||
iter_fn(priority_heap->nodes[idx].data);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -67,4 +67,9 @@ void *simple_archiver_priority_heap_top(SDArchiverPHeap *priority_heap);
|
|||
/// ownership of the returned data pointer.
|
||||
void *simple_archiver_priority_heap_pop(SDArchiverPHeap *priority_heap);
|
||||
|
||||
/// Iterates through all items in the priority heap (breadth-width search not
|
||||
/// depth-first search).
|
||||
void simple_archiver_priority_heap_iter(SDArchiverPHeap *priority_heap,
|
||||
void(*iter_fn)(void*));
|
||||
|
||||
#endif
|
||||
|
|
|
@ -89,6 +89,10 @@ int hash_map_iter_check_fn2(__attribute__((unused)) const void *key,
|
|||
return 2;
|
||||
}
|
||||
|
||||
void test_iter_fn_priority_heap(void *data) {
|
||||
printf("Got data %" PRIu32 "\n", *((uint32_t*)data));
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
// Test LinkedList.
|
||||
{
|
||||
|
@ -438,6 +442,18 @@ int main(void) {
|
|||
free(array);
|
||||
|
||||
simple_archiver_priority_heap_free(&priority_heap);
|
||||
|
||||
priority_heap = simple_archiver_priority_heap_init();
|
||||
for (uint32_t idx = 0; idx < 50; ++idx) {
|
||||
uint32_t *data = malloc(sizeof(uint32_t));
|
||||
*data = idx;
|
||||
simple_archiver_priority_heap_insert(priority_heap, idx, data, NULL);
|
||||
}
|
||||
printf("Begin iteration of 50 elements:\n");
|
||||
|
||||
simple_archiver_priority_heap_iter(priority_heap,
|
||||
test_iter_fn_priority_heap);
|
||||
simple_archiver_priority_heap_free(&priority_heap);
|
||||
}
|
||||
|
||||
printf("Checks checked: %" PRId32 "\n", checks_checked);
|
||||
|
|
Loading…
Reference in a new issue