From 32cfb7a2f9796b4b1edbaf875bf0f81900c68e18 Mon Sep 17 00:00:00 2001 From: aindros Date: Thu, 9 Jan 2020 01:58:41 +0100 Subject: added List_AddAll and List_Remove --- src/list.c | 27 +++++++++++++++++++++++++++ src/list.h | 2 ++ 2 files changed, 29 insertions(+) diff --git a/src/list.c b/src/list.c index 3edc82b..b48d399 100644 --- a/src/list.c +++ b/src/list.c @@ -34,6 +34,33 @@ void List_Add(List* list, list->size ++; } +void List_AddAll(List *dest, List *other) +{ + dest->last->next = other->first; + dest->size += other->size; +} + +void List_Remove(List *list, List_Item *item) +{ + List_Item *curr = list->first->next; + List_Item *prev = list->first; + + if (list->first == item) { + free(list->first); + list->first = curr; + } else { + while (curr != NULL) { + if (curr == item) { + prev->next = curr->next; + free(curr); + return; + } + prev = curr; + curr = curr->next; + } + } +} + Iterator List_Iterator(List* list) { struct iterator_t *iterator = malloc(sizeof(struct iterator_t)); diff --git a/src/list.h b/src/list.h index b621f06..675ba3d 100644 --- a/src/list.h +++ b/src/list.h @@ -18,6 +18,8 @@ typedef struct iterator_t { List List_Create (void); void List_Add (List *, void *, int); +void List_AddAll (List *, List *); +void List_Remove (List *, List_Item *); Iterator List_Iterator (List *); int Iterator_HasNext(Iterator *); List_Item *Iterator_Next (Iterator *); -- cgit v1.2.3