1.1 --- a/src/tree.c Sun Oct 03 13:07:48 2021 +0200 1.2 +++ b/src/tree.c Sun Oct 03 14:06:57 2021 +0200 1.3 @@ -31,7 +31,7 @@ 1.4 1.5 #define CX_TR_PTR(cur, off) ((void**)(((char*)cur)+off)) 1.6 1.7 -void* cx_tree_last(void *node, ptrdiff_t loc_next) { 1.8 +void *cx_tree_last(void *node, ptrdiff_t loc_next) { 1.9 void *last; 1.10 do { 1.11 last = node; 1.12 @@ -39,40 +39,22 @@ 1.13 return last; 1.14 } 1.15 1.16 -int cx_tree_add_node(void *node, ptrdiff_t loc_parent, ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node) { 1.17 - void *last = cx_tree_last(node, loc_next); 1.18 - if(!last) 1.19 - return 1; 1.20 - 1.21 - // next pointer must be present 1.22 - *CX_TR_PTR(last, loc_next) = new_node; 1.23 - 1.24 - // optional fields 1.25 - if(loc_parent >= 0) { 1.26 +void cx_tree_add_sibling(void *node, ptrdiff_t loc_prev, ptrdiff_t loc_next, ptrdiff_t loc_parent, void *new_node) { 1.27 + cx_linked_list_add(&node, NULL, loc_prev, loc_next, new_node); 1.28 + 1.29 + // optional parent link 1.30 + if (loc_parent >= 0) { 1.31 *CX_TR_PTR(new_node, loc_parent) = *CX_TR_PTR(node, loc_parent); 1.32 } 1.33 - if(loc_prev >= 0) { 1.34 - *CX_TR_PTR(new_node, loc_prev) = last; 1.35 - } 1.36 - 1.37 - return 0; 1.38 } 1.39 1.40 -int cx_tree_add_child_node( 1.41 - void *parent, 1.42 - ptrdiff_t loc_parent, 1.43 - ptrdiff_t loc_prev, 1.44 - ptrdiff_t loc_next, 1.45 - void **children_begin, 1.46 - void **children_end, 1.47 - void *new_node) 1.48 -{ 1.49 - if(cx_linked_list_add(children_begin, children_end, loc_prev, loc_next, new_node)) { 1.50 - return 1; 1.51 - } 1.52 - // optional field 1.53 - if(loc_parent >= 0) { 1.54 +void cx_tree_add_child(void **children_begin, void **children_end, 1.55 + ptrdiff_t loc_prev, ptrdiff_t loc_next, void *new_node, 1.56 + ptrdiff_t loc_parent, void *parent) { 1.57 + cx_linked_list_add(children_begin, children_end, loc_prev, loc_next, new_node); 1.58 + 1.59 + // optional parent link 1.60 + if (loc_parent >= 0) { 1.61 *CX_TR_PTR(new_node, loc_parent) = parent; 1.62 } 1.63 - return 0; 1.64 }