implement linked list find

Mon, 27 Sep 2021 17:49:23 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 27 Sep 2021 17:49:23 +0200
changeset 437
9d4971ea0625
parent 436
ca9ce2297c29
child 438
cd3069757010

implement linked list find

src/linked_list.c file | annotate | diff | comparison | revisions
     1.1 --- a/src/linked_list.c	Mon Sep 27 17:00:19 2021 +0200
     1.2 +++ b/src/linked_list.c	Mon Sep 27 17:49:23 2021 +0200
     1.3 @@ -98,7 +98,7 @@
     1.4  } cx_linked_list;
     1.5  
     1.6  int cx_ll_add(cx_list_s *list, void *elem) {
     1.7 -    cx_linked_list *linkedlist = (cx_linked_list *) list;
     1.8 +    cx_linked_list *ll = (cx_linked_list *) list;
     1.9  
    1.10      struct cx_linked_list_node *node = cxMalloc(list->allocator,
    1.11                                                  sizeof(struct cx_linked_list_node) + list->itemsize);
    1.12 @@ -109,8 +109,7 @@
    1.13      memcpy(node->payload, elem, list->itemsize);
    1.14  
    1.15      int ret = cx_linked_list_add(
    1.16 -            &linkedlist->begin,
    1.17 -            &linkedlist->end,
    1.18 +            &ll->begin, &ll->end,
    1.19              offsetof(struct cx_linked_list_node, prev),
    1.20              offsetof(struct cx_linked_list_node, next),
    1.21              node
    1.22 @@ -124,21 +123,31 @@
    1.23  }
    1.24  
    1.25  int cx_ll_insert(cx_list_s *list, size_t index, void *elem) {
    1.26 -    cx_linked_list *linkedList = (cx_linked_list *) list;
    1.27 +    cx_linked_list *ll = (cx_linked_list *) list;
    1.28      // TODO: implement using low level API
    1.29      return 1;
    1.30  }
    1.31  
    1.32  void *cx_ll_remove(cx_list_s *list, size_t index) {
    1.33 -    cx_linked_list *linkedList = (cx_linked_list *) list;
    1.34 +    cx_linked_list *ll = (cx_linked_list *) list;
    1.35      // TODO: implement using low level API
    1.36      return NULL;
    1.37  }
    1.38  
    1.39  size_t cx_ll_find(cx_list_s *list, void *elem) {
    1.40 -    cx_linked_list *linkedList = (cx_linked_list *) list;
    1.41 -    // TODO: implement using low level API
    1.42 -    return 0;
    1.43 +    CxListComparator cmp = list->cmpfunc;
    1.44 +    cx_linked_list *ll = (cx_linked_list *) list;
    1.45 +
    1.46 +    size_t index;
    1.47 +    struct cx_linked_list_node* node = ll->begin;
    1.48 +    for (index = 0 ; index < list->size ; index++) {
    1.49 +        void* current = node->payload;
    1.50 +        if (cmp(current, elem) == 0) {
    1.51 +            return index;
    1.52 +        }
    1.53 +        node = node->next;
    1.54 +    }
    1.55 +    return index;
    1.56  }
    1.57  
    1.58  void *cx_ll_last(cx_list_s *list) {

mercurial