RBTREE(3) | Library Functions Manual | RBTREE(3) |
rbtree
—
#include <sys/rbtree.h>
void
rb_tree_init
(rb_tree_t
*rbt, const rb_tree_ops_t
*ops);
void *
rb_tree_insert_node
(rb_tree_t
*rbt, void
*rb);
void
rb_tree_remove_node
(rb_tree_t
*rbt, void
*rb);
void *
rb_tree_find_node
(rb_tree_t
*rbt, const void
*key);
void *
rb_tree_find_node_geq
(rb_tree_t
*rbt, const void
*key);
void *
rb_tree_find_node_leq
(rb_tree_t
*rbt, const void
*key);
void *
rb_tree_iterate
(rb_tree_t
*rbt, void *rb,
unsigned int
direction);
void *
RB_TREE_MIN
(rb_tree_t
*rbt);
void *
RB_TREE_MAX
(rb_tree_t
*rbt);
RB_TREE_NEXT
(rb_tree_t
*rbt, void
*rb);
RB_TREE_PREV
(rb_tree_t
*rbt, void
*rb);
RB_TREE_FOREACH
(void
*rb, rb_tree_t
*rbt);
RB_TREE_FOREACH_SAFE
(void
*rb, rb_tree_t
*rbt, void
*tmp);
RB_TREE_FOREACH_REVERSE
(void
*rb, rb_tree_t
*rbt);
RB_TREE_FOREACH_REVERSE_SAFE
(void
*rb, rb_tree_t
*rbt, void
*tmp);
rbtree
provides red-black trees. A red-black tree is a
binary search tree with the node color as an extra attribute. It fulfills a
set of conditions:
Every operation on a red-black tree is bounded as O(lg n). The maximum height of a red-black tree is 2lg (n+1).
rbto_compare_nodes_fn rbto_compare_nodes; rbto_compare_key_fn rbto_compare_key; size_t rbto_node_offset; void *rbto_context;
rbtree
interface are meant to
take pointers directly to the rb_node_t
member.)rb_tree_init
(rbt,
ops)rb_tree_init
() always succeeds.rb_tree_insert_node
(rbt,
rb)rb_tree_remove_node
(rbt,
rb)rb_tree_find_node
(rbt,
key)NULL
. Otherwise, return the matching node.rb_tree_find_node_geq
(rbt,
key)NULL
.rb_tree_find_node_leq
(rbt,
key)NULL
.rb_tree_iterate
(rbt,
rb, direction)RB_DIR_LEFT
,
return the node in the tree rbt immediately
preceding the node rb or, if
rb is NULL
, return the first
node in rbt or, if the tree is empty, return
NULL
.
If direction is
RB_DIR_RIGHT
, return the node in the tree
rbt immediately following the node
rb or, if rb is
NULL
, return the last node in
rbt or, if the tree is empty, return
NULL
.
RB_TREE_MIN
(rbt)NULL
if rbt is
empty.RB_TREE_MAX
(rbt)NULL
if rbt
is empty.RB_TREE_NEXT
(rbt,
rb)NULL
if there is none.RB_TREE_PREV
(rbt,
rb)NULL
if there is none.RB_TREE_FOREACH
(rb,
rbt)RB_TREE_FOREACH
is a macro to be used in the place
of a for
header preceding a statement to traverse
the nodes in rbt from least to greatest, assigning
rb to each node in turn and executing the
statement.RB_TREE_FOREACH_SAFE
(rb,
rbt, tmp)RB_TREE_FOREACH_REVERSE
(rb,
rbt)RB_TREE_FOREACH_REVERSE
is a macro to be used in
the place of a for
header preceding a statement to
traverse the nodes in rbt from greatest to least,
assigning rb to each node in turn and executing the
statement.RB_TREE_FOREACH_REVERSE_SAFE
(rb,
rbt, tmp)rbtree
interface is implemented in
common/lib/libc/gen/rb.c.
rbtree
interface first appeared in
NetBSD 6.0.
rbtree
.
Niels Provos
<provos@citi.umich.edu>
wrote the tree(3) manual page.
Portions of this page derive from that page.
March 4, 2019 | NetBSD 9.0 |