simplifies linked list descriptor

Mon, 08 Feb 2021 00:18:09 +0100

author
Mike Becker <universe@uap-core.de>
date
Mon, 08 Feb 2021 00:18:09 +0100
changeset 407
b447539ec255
parent 406
9cbea761fbf7
child 408
dfdd571550f8

simplifies linked list descriptor

src/cx/linked_list.h file | annotate | diff | comparison | revisions
src/linked_list.c file | annotate | diff | comparison | revisions
     1.1 --- a/src/cx/linked_list.h	Mon Feb 08 00:14:07 2021 +0100
     1.2 +++ b/src/cx/linked_list.h	Mon Feb 08 00:18:09 2021 +0100
     1.3 @@ -39,8 +39,7 @@
     1.4  extern cx_list_class cx_linked_list_class;
     1.5  
     1.6  typedef struct {
     1.7 -    void **begin;
     1.8 -    void **end;
     1.9 +    void *begin;
    1.10      ptrdiff_t loc_prev;
    1.11      ptrdiff_t loc_next;
    1.12      size_t item_size;
     2.1 --- a/src/linked_list.c	Mon Feb 08 00:14:07 2021 +0100
     2.2 +++ b/src/linked_list.c	Mon Feb 08 00:18:09 2021 +0100
     2.3 @@ -155,7 +155,7 @@
     2.4  CxList cxLinkedListCreate(CxAllocator allocator, CxListComparator comparator, size_t item_size) {
     2.5      CxLinkedListDesc desc;
     2.6      desc.item_size = item_size;
     2.7 -    desc.begin = desc.end = NULL;
     2.8 +    desc.begin = NULL;
     2.9      desc.loc_prev = offsetof(struct cx_linked_list_node, prev);
    2.10      desc.loc_next = offsetof(struct cx_linked_list_node, next);
    2.11  
    2.12 @@ -174,8 +174,7 @@
    2.13      list->data.capacity = SIZE_MAX;
    2.14  
    2.15      cx_linked_list *ll = (cx_linked_list *) list->data.listdata;
    2.16 -    ll->begin = desc.begin ? *desc.begin : NULL;
    2.17 -    ll->end = desc.end ? *desc.end : NULL;
    2.18 +    ll->begin = desc.begin;
    2.19      ll->loc_prev = desc.loc_prev;
    2.20      ll->loc_next = desc.loc_next;
    2.21      cxLinkedListRecalculateSize(list);
    2.22 @@ -188,13 +187,17 @@
    2.23  
    2.24      if (ll->begin == NULL) {
    2.25          list->data.size = 0;
    2.26 +        ll->end = NULL;
    2.27          return 0;
    2.28      } else {
    2.29          void *cur = ll->begin;
    2.30 +        void *last;
    2.31          size_t size;
    2.32          do {
    2.33 +            last = cur;
    2.34              size++;
    2.35          } while ((cur = *CX_LL_PTR(cur, ll->loc_next)) != NULL);
    2.36 +        ll->end = last;
    2.37          list->data.size = size;
    2.38          return size;
    2.39      }

mercurial