diff options
author | 2020-01-09 01:58:41 +0100 | |
---|---|---|
committer | 2020-01-09 01:58:41 +0100 | |
commit | 32cfb7a2f9796b4b1edbaf875bf0f81900c68e18 (patch) | |
tree | d47d8e4c966df963d676abf5334bff652f2f5816 | |
parent | 1207fbb1659525864540e601a0c03cad65deb732 (diff) | |
download | utils-32cfb7a2f9796b4b1edbaf875bf0f81900c68e18.tar.gz utils-32cfb7a2f9796b4b1edbaf875bf0f81900c68e18.zip |
added List_AddAll and List_Remove
-rw-r--r-- | src/list.c | 27 | ||||
-rw-r--r-- | src/list.h | 2 |
2 files changed, 29 insertions, 0 deletions
@@ -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)); @@ -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 *); |