Example #1
0
bool
tree_iterator_next(void* Iterator)
{
    ASSERT(Iterator != NULL);
    tree_iterator* iterator = Iterator;
    ASSERT(iterator->tree != NULL);
    if (iterator->node)
	return (iterator->node = tree_node_next(iterator->node)) != NULL;
    return false;
}
Example #2
0
bool
tree_iterator_next_n(void* Iterator, size_t count)
{
    ASSERT(Iterator != NULL);
    tree_iterator* iterator = Iterator;
    ASSERT(iterator->tree != NULL);
    while (iterator->node && count--)
	iterator->node = tree_node_next(iterator->node);
    return iterator->node != NULL;
}
Example #3
0
bool
tr_itor_next(tr_itor* itor)
{
    ASSERT(itor != NULL);

    if (!itor->node)
	tr_itor_first(itor);
    else
	itor->node = tree_node_next(itor->node);
    return itor->node != NULL;
}
Example #4
0
size_t
sp_tree_traverse(sp_tree* tree, dict_visit_func visit)
{
    ASSERT(tree != NULL);
    ASSERT(visit != NULL);

    size_t count = 0;
    if (tree->root) {
	sp_node* node = tree_node_min(tree->root);
	do {
	    ++count;
	    if (!visit(node->key, node->datum))
		break;
	    node = tree_node_next(node);
	} while (node);
    }
    return count;
}