diff options
Diffstat (limited to 'link.c')
| -rw-r--r-- | link.c | 100 |
1 files changed, 0 insertions, 100 deletions
@@ -1,100 +0,0 @@ -#include "link.h" -#include "util.h" - -int -list_len(struct link *head) -{ - struct link *iter; - int len; - - ASSERT(head != NULL); - - len = 0; - for (iter = head->next; iter; iter = iter->next) - len += 1; - - return len; -} - -int -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) -{ - ASSERT(link != NULL); - - for (; link->next; link = link->next); - - return link; -} - -void -link_prepend(struct link *cur, struct link *link) -{ - ASSERT(cur != NULL && link != NULL); - - link->prev = cur->prev; - link->next = cur; - - if (link->prev) - link->prev->next = link; - if (link->next) - link->next->prev = link; -} - -void -link_append(struct link *cur, struct link *link) -{ - ASSERT(cur != NULL && link != NULL); - - link->prev = cur; - link->next = cur->next; - - if (link->prev) - link->prev->next = link; - if (link->next) - link->next->prev = link; -} - -void -link_pop(struct link *link) -{ - ASSERT(link != NULL); - - if (link->prev) - link->prev->next = link->next; - if (link->next) - link->next->prev = link->prev; -} - -struct link * -link_iter(struct link *link, int n) -{ - int i; - - for (i = 0; i < n; i++) { - if (!link) return NULL; - link = link->next; - } - - return link; -} - -void -link_push_back(struct link *cur, struct link *link) -{ - struct link *back; - - back = link_back(cur); - link_append(back, link); -} |
