src/linked_list.c

changeset 438
cd3069757010
parent 437
9d4971ea0625
child 439
9a5adedd6de6
     1.1 --- a/src/linked_list.c	Mon Sep 27 17:49:23 2021 +0200
     1.2 +++ b/src/linked_list.c	Mon Sep 27 18:33:30 2021 +0200
     1.3 @@ -34,6 +34,16 @@
     1.4  
     1.5  #define CX_LL_PTR(cur, off) ((void**)(((char*)cur)+off))
     1.6  
     1.7 +void *cx_linked_list_at(void *start, size_t start_index, ptrdiff_t loc_advance, size_t index) {
     1.8 +    size_t i = start_index;
     1.9 +    void* cur = start;
    1.10 +    while (i != index && cur != NULL) {
    1.11 +        cur = *CX_LL_PTR(cur, loc_advance);
    1.12 +        i < index ? i++ : i--;
    1.13 +    }
    1.14 +    return cur;
    1.15 +}
    1.16 +
    1.17  void *cx_linked_list_last(void **begin, void **end, ptrdiff_t loc_next) {
    1.18      if (end != NULL) {
    1.19          return *end;
    1.20 @@ -97,7 +107,7 @@
    1.21      ptrdiff_t loc_next;
    1.22  } cx_linked_list;
    1.23  
    1.24 -int cx_ll_add(cx_list_s *list, void *elem) {
    1.25 +static int cx_ll_add(cx_list_s *list, void *elem) {
    1.26      cx_linked_list *ll = (cx_linked_list *) list;
    1.27  
    1.28      struct cx_linked_list_node *node = cxMalloc(list->allocator,
    1.29 @@ -122,19 +132,22 @@
    1.30      }
    1.31  }
    1.32  
    1.33 -int cx_ll_insert(cx_list_s *list, size_t index, void *elem) {
    1.34 +static int cx_ll_insert(cx_list_s *list, size_t index, void *elem) {
    1.35      cx_linked_list *ll = (cx_linked_list *) list;
    1.36      // TODO: implement using low level API
    1.37      return 1;
    1.38  }
    1.39  
    1.40 -void *cx_ll_remove(cx_list_s *list, size_t index) {
    1.41 +static int cx_ll_remove(cx_list_s *list, size_t index) {
    1.42 +    if (index >= list->size) {
    1.43 +        return 1;
    1.44 +    }
    1.45      cx_linked_list *ll = (cx_linked_list *) list;
    1.46      // TODO: implement using low level API
    1.47 -    return NULL;
    1.48 +    return 0;
    1.49  }
    1.50  
    1.51 -size_t cx_ll_find(cx_list_s *list, void *elem) {
    1.52 +static size_t cx_ll_find(cx_list_s *list, void *elem) {
    1.53      CxListComparator cmp = list->cmpfunc;
    1.54      cx_linked_list *ll = (cx_linked_list *) list;
    1.55  
    1.56 @@ -150,7 +163,7 @@
    1.57      return index;
    1.58  }
    1.59  
    1.60 -void *cx_ll_last(cx_list_s *list) {
    1.61 +static void *cx_ll_last(cx_list_s *list) {
    1.62      cx_linked_list *linkedList = (cx_linked_list *) list;
    1.63      struct cx_linked_list_node *last = cx_linked_list_last(
    1.64              NULL, &linkedList->end, offsetof(struct cx_linked_list_node, next));

mercurial