#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
