#ifndef VIETER_HEAP_TREE #define VIETER_HEAP_TREE #include #include typedef struct vieter_heap_node { uint64_t key; void *data; struct vieter_heap_node *largest_order; struct vieter_heap_node *next_largest_order; } vieter_heap_node; vieter_heap_node *vieter_heap_node_init(); void vieter_heap_node_free(vieter_heap_node *node); typedef struct vieter_heap_tree { uint8_t order; vieter_heap_node *root; struct vieter_heap_tree *next; } vieter_heap_tree; vieter_heap_tree *vieter_heap_tree_init(vieter_heap_node *root, vieter_heap_tree *next, uint8_t order); /* * Deallocate a tree object, along with its underlying tree structure. */ void vieter_heap_tree_free(vieter_heap_tree *tree); vieter_heap_tree *vieter_heap_tree_merge(vieter_heap_tree *tree_a, vieter_heap_tree *tree_b); vieter_heap_tree *vieter_heap_tree_merge_same_order(vieter_heap_tree *tree_a, vieter_heap_tree *tree_b); vieter_heap_tree *vieter_heap_tree_pop(void **out, vieter_heap_tree *tree); #endif