示例#1
0
/*
 * Recursive portion of rbdestroy().
 */
static void
_rbdestroy(struct rbtree *tree, struct rbnode *node, void (*destroy)(void *))
{
    if (node != rbnil(tree)) {
	_rbdestroy(tree, node->left, destroy);
	_rbdestroy(tree, node->right, destroy);
	if (destroy != NULL)
	    destroy(node->data);
	efree(node);
    }
}
示例#2
0
/*
 * Destroy the specified tree, calling the destructor destroy
 * for each node and then freeing the tree itself.
 */
void rbtree_destroy(struct rbtree *tree, void (*destroy)(void *))
{
	if (!tree)
		return;

	if (rbtree_first(tree))
		_rbdestroy(tree, rbtree_first(tree), destroy);
	free(tree);
}
示例#3
0
/*
 * Destroy the specified tree, calling the destructor destroy
 * for each node and then freeing the tree itself.
 */
void
rbdestroy(struct rbtree *tree, void (*destroy)(void *))
{
    _rbdestroy(tree, rbfirst(tree), destroy);
    efree(tree);
}