#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; union { struct vieter_heap_node *next_tree; struct vieter_heap_node *next_largest_order; } ptr; uint8_t order; } vieter_heap_node; vieter_heap_node *vieter_heap_node_init(); void vieter_heap_node_free(vieter_heap_node *node); /* 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_node *root); vieter_heap_node *vieter_heap_tree_merge(vieter_heap_node *root_a, vieter_heap_node *root_b); vieter_heap_node *vieter_heap_tree_merge_same_order(vieter_heap_node *root_a, vieter_heap_node *root_b); vieter_heap_node *vieter_heap_tree_pop(void **out, vieter_heap_node *root); #endif