From 58ef912c6babf1866193ab04674a5866dd761f13 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Wed, 22 Apr 1998 12:58:34 +0000 Subject: First look at data structures. More to come tomorrow... --- lib/lists.c | 76 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 lib/lists.c (limited to 'lib/lists.c') diff --git a/lib/lists.c b/lib/lists.c new file mode 100644 index 00000000..321a5f05 --- /dev/null +++ b/lib/lists.c @@ -0,0 +1,76 @@ +/* + * BIRD Library -- Linked Lists + * + * (c) 1998 Martin Mares + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#define _BIRD_LISTS_C_ + +#include +#include + +LIST_INLINE void +add_tail(list *l, node *n) +{ + node *z = l->tail; + + n->next = (node *) &l->tail; + n->prev = z; + z->next = n; + l->tail = n; +} + +LIST_INLINE void +add_head(list *l, node *n) +{ + node *z = l->head; + + n->next = z; + n->prev = (node *) &l->head; + z->prev = n; + l->head = n; +} + +LIST_INLINE void +insert_node(node *n, node *after) +{ + node *z = after->next; + + n->next = z; + n->prev = after; + after->next = n; + z->prev = n; +} + +LIST_INLINE void +rem_node(node *n) +{ + node *z = n->prev; + node *x = n->next; + + z->next = x; + x->prev = z; +} + +LIST_INLINE void +init_list(list *l) +{ + l->head = (node *) &l->null; + l->null = NULL; + l->tail = (node *) &l->head; +} + +LIST_INLINE void +add_tail_list(list *to, list *l) +{ + node *p = to->tail; + node *q = l->head; + + p->next = q; + q->prev = p; + q = l->tail; + q->next = (node *) &to->null; + to->tail = q; +} -- cgit v1.2.3