#ifndef VIETER_TREE #define VIETER_TREE #include #include typedef struct vieter_tree vieter_tree; typedef enum vieter_tree_error { vieter_tree_ok = 0, vieter_tree_already_present = 1, vieter_tree_not_present = 2, vieter_tree_iterator_done = 3 } vieter_tree_error; /* * Allocate and initialize a new red-black binary tree. */ vieter_tree *vieter_tree_init(); /* * Deallocate a red-black binary tree. */ void vieter_tree_free(vieter_tree *tree); /* * Insert a new entry into the tree. */ vieter_tree_error vieter_tree_insert(vieter_tree *tree, uint64_t key, void *data); /* * Look for an entry in the tree. */ vieter_tree_error vieter_tree_search(void **out, vieter_tree *tree, uint64_t key); /* * Remove a given entry from the tree. */ vieter_tree_error vieter_tree_remove(void **out, vieter_tree *tree, uint64_t key); /* * Return how many entries are currently in the tree. */ uint64_t vieter_tree_size(vieter_tree *tree); /* * An iterator that can be used to traverse a tree in-order. */ typedef struct vieter_tree_iterator vieter_tree_iterator; /* * Allocate and initialize a new iterator from the given tree. */ vieter_tree_iterator *vieter_tree_iterator_from(vieter_tree *tree); /* * Free an iterator. */ void vieter_tree_iterator_free(vieter_tree_iterator **ptp); /* * Return the iterator's next element. */ vieter_tree_error vieter_tree_iterator_next(void **out, vieter_tree_iterator *iter); #endif