aboutsummaryrefslogtreecommitdiff
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
parent1207fbb1659525864540e601a0c03cad65deb732 (diff)
downloadutils-32cfb7a2f9796b4b1edbaf875bf0f81900c68e18.tar.gz
utils-32cfb7a2f9796b4b1edbaf875bf0f81900c68e18.zip
added List_AddAll and List_Remove
-rw-r--r--src/list.c27
-rw-r--r--src/list.h2
2 files changed, 29 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));
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 *);