/*------------------------------------------------------------------------- * * dllist.h-- * simple doubly linked list primitives * the elements of the list are void* so the lists can contain * anything * Dlelem can only be in one list at a time * * * Here's a small example of how to use Dllist's : * * Dllist *lst; * Dlelem *elt; * void *in_stuff; -- stuff to stick in the list * void *out_stuff * * lst = DLNewList(); -- make a new dllist * DLAddHead(lst, DLNewElem(in_stuff)); -- add a new element to the list * with in_stuff as the value * ... * elt = DLGetHead(lst); -- retrieve the head element * out_stuff = (void*)DLE_VAL(elt); -- get the stuff out * DLRemove(elt); -- removes the element from its list * DLFreeElem(elt); -- free the element since we don't * use it anymore * * Copyright (c) 1994, Regents of the University of California * * $Id: dllist.h,v 1.7 1997/09/08 21:52:17 momjian Exp $ * *------------------------------------------------------------------------- */ #ifndef DLLIST_H #define DLLIST_H struct Dllist; struct Dlelem; typedef struct Dlelem { struct Dlelem *dle_next; /* next element */ struct Dlelem *dle_prev; /* previous element */ void *dle_val; /* value of the element */ struct Dllist *dle_list; /* what list this element is in */ } Dlelem; typedef struct Dllist { Dlelem *dll_head; Dlelem *dll_tail; } Dllist; extern Dllist *DLNewList(void); /* initialize a new list */ extern void DLFreeList(Dllist *); /* free up a list and all the * nodes in it */ extern Dlelem *DLNewElem(void *val); extern void DLFreeElem(Dlelem *); extern Dlelem *DLGetHead(Dllist *); extern Dlelem *DLGetTail(Dllist *); extern Dlelem *DLRemTail(Dllist *l); extern Dlelem *DLGetPred(Dlelem *); /* get predecessor */ extern Dlelem *DLGetSucc(Dlelem *); /* get successor */ extern void DLRemove(Dlelem *); /* removes node from list */ extern void DLAddHead(Dllist *list, Dlelem *node); extern void DLAddTail(Dllist *list, Dlelem *node); extern Dlelem *DLRemHead(Dllist *list); /* remove and return the head */ #define DLE_VAL(x) (x->dle_val) #endif /* DLLIST_H */