From 9fe644f0d99375ffd3011d8828f7dbd0fb103af0 Mon Sep 17 00:00:00 2001 From: Louis Burda Date: Sat, 4 Dec 2021 13:48:01 +0100 Subject: Added more gui interaction --- tag.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 tag.c (limited to 'tag.c') diff --git a/tag.c b/tag.c new file mode 100644 index 0000000..e464dbc --- /dev/null +++ b/tag.c @@ -0,0 +1,53 @@ +#include "tag.h" +#include "link.h" + +static struct link * +tagrefs_ffind(struct link *head, struct tag *tag) +{ + struct link *iter; + + for (iter = head->next; iter; iter = iter->next) { + if (UPCAST(iter, struct tag_ref)->tag == tag) + return iter; + } + + return NULL; +} + +int +tagrefs_incl(struct link *head, struct tag *tag) +{ + struct link *ref; + + ref = tagrefs_ffind(head, tag); + return ref != NULL; +} + +void +tagrefs_add(struct link *head, struct tag *tag) +{ + struct tag_ref *ref; + + if (tagrefs_incl(head, tag)) + return; + + ref = malloc(sizeof(struct tag_ref)); + ASSERT(ref != NULL); + ref->link = LINK_EMPTY; + ref->tag = tag; + link_push_back(head, &ref->link); +} + +void +tagrefs_rm(struct link *head, struct tag *tag) +{ + struct link *ref; + struct tag_ref *tagref; + + ref = tagrefs_ffind(head, tag); + if (!ref) return; + + tagref = UPCAST(ref, struct tag_ref); + link_pop(ref); + free(tagref); +} -- cgit v1.2.3-71-gd317