#ifndef __RARCHDB_BINTREE_H__ #define __RARCHDB_BINTREE_H__ typedef int (* bintree_cmp_func)( const void * a, const void * b, void * ctx ); typedef int (* bintree_iter_cb)( void * value, void * ctx ); struct bintree_node { void * value; struct bintree_node * parent; struct bintree_node * left; struct bintree_node * right; }; struct bintree { struct bintree_node * root; bintree_cmp_func cmp; void * ctx; }; void bintree_new( struct bintree * t, bintree_cmp_func cmp, void * ctx ); int bintree_insert( struct bintree * t, void * value ); int bintree_iterate( const struct bintree * t, bintree_iter_cb cb, void * ctx ); void bintree_free(struct bintree * t); #endif