373 iter.node_next = NULL; |
373 iter.node_next = NULL; |
374 iter.exiting = false; |
374 iter.exiting = false; |
375 iter.skip = false; |
375 iter.skip = false; |
376 |
376 |
377 // assign base iterator functions |
377 // assign base iterator functions |
378 iter.base.mutating = false; |
378 iter.base.allow_remove = false; |
379 iter.base.remove = false; |
379 iter.base.remove = false; |
380 iter.base.current_impl = NULL; |
380 iter.base.current_impl = NULL; |
381 iter.base.valid = cx_tree_iter_valid; |
381 iter.base.valid = cx_tree_iter_valid; |
382 iter.base.next = cx_tree_iter_next; |
382 iter.base.next = cx_tree_iter_next; |
383 iter.base.current = cx_tree_iter_current; |
383 iter.base.current = cx_tree_iter_current; |
494 iter.skip = false; |
494 iter.skip = false; |
495 iter.queue_next = NULL; |
495 iter.queue_next = NULL; |
496 iter.queue_last = NULL; |
496 iter.queue_last = NULL; |
497 |
497 |
498 // assign base iterator functions |
498 // assign base iterator functions |
499 iter.base.mutating = false; |
499 iter.base.allow_remove = false; |
500 iter.base.remove = false; |
500 iter.base.remove = false; |
501 iter.base.current_impl = NULL; |
501 iter.base.current_impl = NULL; |
502 iter.base.valid = cx_tree_visitor_valid; |
502 iter.base.valid = cx_tree_visitor_valid; |
503 iter.base.next = cx_tree_visitor_next; |
503 iter.base.next = cx_tree_visitor_next; |
504 iter.base.current = cx_tree_visitor_current; |
504 iter.base.current = cx_tree_visitor_current; |
715 return 0; |
715 return 0; |
716 } |
716 } |
717 } |
717 } |
718 |
718 |
719 // otherwise, create iterator and hand over to other function |
719 // otherwise, create iterator and hand over to other function |
720 CxIterator iter = cxIterator(src, elem_size, num); |
720 CxIterator iter = cxIterator(src, elem_size, num, false); |
721 return cx_tree_add_iter(cxIteratorRef(iter), num, sfunc, |
721 return cx_tree_add_iter(cxIteratorRef(iter), num, sfunc, |
722 cfunc, cdata, failed, root, |
722 cfunc, cdata, failed, root, |
723 loc_parent, loc_children, loc_last_child, |
723 loc_parent, loc_children, loc_last_child, |
724 loc_prev, loc_next); |
724 loc_prev, loc_next); |
725 } |
725 } |
909 } |
909 } |
910 |
910 |
911 size_t cxTreeInsertArray(CxTree *tree, const void *data, size_t elem_size, size_t n) { |
911 size_t cxTreeInsertArray(CxTree *tree, const void *data, size_t elem_size, size_t n) { |
912 if (n == 0) return 0; |
912 if (n == 0) return 0; |
913 if (n == 1) return 0 == cxTreeInsert(tree, data) ? 1 : 0; |
913 if (n == 1) return 0 == cxTreeInsert(tree, data) ? 1 : 0; |
914 CxIterator iter = cxIterator(data, elem_size, n); |
914 CxIterator iter = cxIterator(data, elem_size, n, false); |
915 return cxTreeInsertIter(tree, cxIteratorRef(iter), n); |
915 return cxTreeInsertIter(tree, cxIteratorRef(iter), n); |
916 } |
916 } |
917 |
917 |
918 void *cxTreeFind( CxTree *tree, const void *data) { |
918 void *cxTreeFind( CxTree *tree, const void *data) { |
919 return tree->cl->find(tree, tree->root, data, 0); |
919 return tree->cl->find(tree, tree->root, data, 0); |