libvieter/src/heap/vieter_heap_tree.h

37 lines
1.0 KiB
C

#ifndef VIETER_HEAP_TREE
#define VIETER_HEAP_TREE
#include <stdint.h>
#include <stdlib.h>
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