src/tree.c

changeset 453
bb144d08cd44
parent 431
dcf01bb852f4
child 454
4b3219fab71c
     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  }

mercurial