forked from vieter-v/libvieter
				
			
		
			
				
	
	
		
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
#ifndef VIETER_TREE
 | 
						|
#define VIETER_TREE
 | 
						|
 | 
						|
#include <stdint.h>
 | 
						|
#include <stdlib.h>
 | 
						|
 | 
						|
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
 |