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; }
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; }
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; }
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; }