- RBL_RED;
- RBL_BLACK;
-};
-
-extern rbl_t rbl_search(rbltree_t *, void *);
-extern rbl_t rbl_search_closest(rbltree_t *, void *);
-extern rbl_t rbl_insert(rbltree_t *, void *);
-extern rbl_t rbl_unlink(rbltree_t *, void *);
-extern rbl_t rbl_delete(rbltree_t *, void *);
-extern rbl_t rbl_insert_rbl(rbltree_t *, rbl_t *);
-extern rbl_t rbl_unlink_rbl(rbltree_t *, rbl_t *);
-extern rbl_t rbl_delete_rbl(rbltree_t *, rbl_t *);
-extern rbl_t rbl_prev(rbl_t *);
-extern rbl_t rbl_next(rbl_t *);
+ RBL_RED,
+ RBL_BLACK
+} color;
+
+extern rbltree_t *new_rbltree(rbl_compare_t, rbl_action_t);
+extern void free_rbltree(rbltree_t *);
+extern rbl_t *new_rbl(void);
+extern void free_rbl(rbl_t *);
+
+extern void *rbl_search(rbltree_t *, void *);
+extern void *rbl_search_closest(rbltree_t *, void *);
+extern void *rbl_search_closest_greater(rbltree_t *, void *);
+extern void *rbl_search_closest_smaller(rbltree_t *, void *);
+extern rbl_t *rbl_search_rbl(rbltree_t *, void *);
+extern rbl_t *rbl_search_closest_rbl(rbltree_t *, void *);
+extern rbl_t *rbl_search_closest_greater_rbl(rbltree_t *, void *);
+extern rbl_t *rbl_search_closest_smaller_rbl(rbltree_t *, void *);
+extern rbl_t *rbl_insert(rbltree_t *, void *);
+extern rbl_t *rbl_unlink(rbltree_t *, void *);
+extern void rbl_delete(rbltree_t *, void *);
+extern rbl_t *rbl_insert_rbl(rbltree_t *, rbl_t *);
+extern rbl_t *rbl_unlink_rbl(rbl_t *);
+extern void rbl_delete_rbl(rbl_t *);
+extern void rbl_unlink_rbltree(rbltree_t *);
+extern void rbl_delete_rbltree(rbltree_t *);
+
+extern void rbl_foreach(rbltree_t *, rbl_action_t);
+extern void rbl_foreach_rbl(rbltree_t *, rbl_action_rbl_t);
+
+#endif /* __RBL_H__ */