From 16449e8a72c7d9282647823d1747ae5696619d4f Mon Sep 17 00:00:00 2001 From: Louis Burda Date: Mon, 27 Dec 2021 17:53:13 +0100 Subject: refactored autoplay and prev/next functionality --- src/list.c | 60 +++++++++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 45 insertions(+), 15 deletions(-) (limited to 'src/list.c') diff --git a/src/list.c b/src/list.c index 29ddcf1..0573512 100644 --- a/src/list.c +++ b/src/list.c @@ -1,9 +1,21 @@ #include "list.h" #include "util.h" +void +list_free(struct link *head, void (*free_item)(void *), int offset) +{ + struct link *item; + + while (head->next) { + item = link_pop(head->next); + free_item(((void *) item) - offset); + } +} + int list_empty(struct link *head) { + ASSERT(head != NULL); return head->next == NULL; } @@ -28,20 +40,37 @@ list_ffind(struct link *head, struct link *link) struct link *iter; ASSERT(head != NULL); - for (iter = head->next; iter && iter != link; iter = iter->next); - return (iter == link); } struct link * -link_back(struct link *link) +list_at(struct link *head, int n) { - ASSERT(link != NULL); + ASSERT(head != NULL); + return link_iter(head->next, n); +} - for (; link->next; link = link->next); +void +list_push_front(struct link *head, struct link *link) +{ + link_append(head, link); +} - return link; +void +list_push_back(struct link *cur, struct link *link) +{ + struct link *back; + + back = link_back(cur); + link_append(back, link); +} + +struct link * +list_pop_front(struct link *head) +{ + ASSERT(head != NULL); + return link_pop(head->next); } void @@ -72,6 +101,16 @@ link_append(struct link *cur, struct link *link) link->next->prev = link; } +struct link * +link_back(struct link *link) +{ + ASSERT(link != NULL); + + for (; link->next; link = link->next); + + return link; +} + struct link * link_pop(struct link *link) { @@ -97,12 +136,3 @@ link_iter(struct link *link, int n) return link; } - -void -list_push_back(struct link *cur, struct link *link) -{ - struct link *back; - - back = link_back(cur); - link_append(back, link); -} -- cgit v1.2.3-71-gd317