aboutsummaryrefslogtreecommitdiff
path: root/src/list.c
diff options
context:
space:
mode:
authoraindros <aindros@hotmail.com>2020-01-09 01:58:41 +0100
committeraindros <aindros@hotmail.com>2020-01-09 01:58:41 +0100
commit32cfb7a2f9796b4b1edbaf875bf0f81900c68e18 (patch)
treed47d8e4c966df963d676abf5334bff652f2f5816 /src/list.c
parent1207fbb1659525864540e601a0c03cad65deb732 (diff)
downloadutils-32cfb7a2f9796b4b1edbaf875bf0f81900c68e18.tar.gz
utils-32cfb7a2f9796b4b1edbaf875bf0f81900c68e18.zip
added List_AddAll and List_Remove
Diffstat (limited to 'src/list.c')
-rw-r--r--src/list.c27
1 files changed, 27 insertions, 0 deletions
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));