ucx/dlist.c

changeset 22
76cdd8209f1f
parent 18
69636f81db31
child 27
22644e2572bc
     1.1 --- a/ucx/dlist.c	Sat Jan 14 13:07:18 2012 +0100
     1.2 +++ b/ucx/dlist.c	Sun Jan 15 14:12:34 2012 +0100
     1.3 @@ -45,6 +45,7 @@
     1.4      nl->data = data;
     1.5      nl->next = NULL;
     1.6      if (l == NULL) {
     1.7 +        nl->prev = NULL;
     1.8          return nl;
     1.9      } else {
    1.10          UcxDlist *t = ucx_dlist_last(l);
    1.11 @@ -113,9 +114,11 @@
    1.12  
    1.13  void ucx_dlist_foreach(UcxDlist *l, ucx_callback fnc, void* data) {
    1.14      UcxDlist *e = l;
    1.15 +    UcxDlist *n;
    1.16      while (e != NULL) {
    1.17 +        n = e->next;
    1.18          fnc(e, data);
    1.19 -        e = e->next;
    1.20 +        e = n;
    1.21      }
    1.22  }
    1.23  
    1.24 @@ -129,3 +132,15 @@
    1.25      }
    1.26      return e;
    1.27  }
    1.28 +
    1.29 +UcxDlist *ucx_dlist_remove(UcxDlist *l, UcxDlist *e) {
    1.30 +    if (e->prev == NULL) {
    1.31 +        e->next->prev = NULL;
    1.32 +        l = e->next;
    1.33 +    } else {
    1.34 +        e->prev->next = e->next;
    1.35 +        e->next->prev = e->prev;
    1.36 +    }
    1.37 +    free(e);
    1.38 +    return l;
    1.39 +}

mercurial