Mon, 08 Feb 2021 00:18:09 +0100
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 }