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;
+}
/// 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
return 2;
}
+void test_iter_fn_priority_heap(void *data) {
+ printf("Got data %" PRIu32 "\n", *((uint32_t*)data));
+}
+
int main(void) {
// Test LinkedList.
{
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);