diff -r 4a220afebad0 -r 7d3061f212cb src/tree.c --- a/src/tree.c Sat Aug 17 11:14:39 2024 +0200 +++ b/src/tree.c Sun Aug 18 11:26:34 2024 +0200 @@ -429,10 +429,12 @@ void *cx_tree_add( void const *src, cx_tree_search_func sfunc, - cx_tree_node_create_fun cfunc, + cx_tree_node_create_func cfunc, + void *cdata, void **root, ptrdiff_t loc_parent, ptrdiff_t loc_children, + ptrdiff_t loc_last_child, ptrdiff_t loc_prev, ptrdiff_t loc_next ) { @@ -440,13 +442,17 @@ return NULL; } +unsigned int cx_tree_add_look_around_depth = 3; + size_t cx_tree_add_iter( struct cx_iterator_base_s *iter, cx_tree_search_func sfunc, - cx_tree_node_create_fun cfunc, + cx_tree_node_create_func cfunc, + void *cdata, void **root, ptrdiff_t loc_parent, ptrdiff_t loc_children, + ptrdiff_t loc_last_child, ptrdiff_t loc_prev, ptrdiff_t loc_next ) { @@ -459,10 +465,12 @@ size_t num, size_t elem_size, cx_tree_search_func sfunc, - cx_tree_node_create_fun cfunc, + cx_tree_node_create_func cfunc, + void *cdata, void **root, ptrdiff_t loc_parent, ptrdiff_t loc_children, + ptrdiff_t loc_last_child, ptrdiff_t loc_prev, ptrdiff_t loc_next ) { @@ -474,8 +482,9 @@ // special case: one element does not need an iterator if (num == 1) { if (NULL != cx_tree_add( - src, sfunc, cfunc, root, - loc_parent, loc_children, loc_prev, loc_next)) { + src, sfunc, cfunc, cdata, root, + loc_parent, loc_children, loc_last_child, + loc_prev, loc_next)) { return 1; } else { return 0; @@ -484,7 +493,8 @@ // otherwise, create iterator and hand over to other function CxIterator iter = cxIterator(src, elem_size, num); - return cx_tree_add_iter(cxIteratorRef(iter), sfunc, cfunc, root, - loc_parent, loc_children, loc_prev, loc_next); + return cx_tree_add_iter(cxIteratorRef(iter), sfunc, cfunc, cdata, root, + loc_parent, loc_children, loc_last_child, + loc_prev, loc_next); }