| | void tbst_destroy (struct tbst_table *tree, tbst_item_func *destroy) {
struct tbst_node *p; /* Current node. */
struct tbst_node *n; /* Next node. */
p = tree->tbst_root;
if (p != NULL)
while (p->tbst_tag[0] == TBST_CHILD)
p = p->tbst_link[0];
while (p != NULL) {
n = p->tbst_link[1];
if (p->tbst_tag[1] == TBST_CHILD)
while (n->tbst_tag[0] == TBST_CHILD)
n = n->tbst_link[0];
if (destroy != NULL && p->tbst_data != NULL)
destroy (p->tbst_data, tree->tbst_param);
tree->tbst_alloc->libavl_free (tree->tbst_alloc, p);
p = n;
}
tree->tbst_alloc->libavl_free (tree->tbst_alloc, tree);
}
|