/* * GRAPH, Version 1.00 - 4 August 1989 * * Copyright 1989, David Gay. All Rights Reserved. * This software is freely redistrubatable. */ /* Simplify and "genericize" list operations */ #ifndef LIST_H #define LIST_H #include #include #include /* The standard list elements */ typedef struct MinList list; typedef struct MinNode node; typedef struct List tlist; /* Typed list */ typedef struct Node tnode; /* Typed (&named) node */ #define new_list(list) NewList((tlist *)(list)) #define add_head(list, node) AddHead((tlist *)(list), (tnode *)(node)) #define add_tail(list, node) AddTail((tlist *)(list), (tnode *)(node)) #define rem_head(list) (void *)RemHead((tlist *)(list)) #define rem_tail(list) (void *)RemTail((tlist *)(list)) #define remove(node) Remove((tnode *)(node)) #define insert(list, node, pos) Insert((tlist *)(list), (tnode *)(node), (tnode *)(pos)) #define first(list) ((void *)((tlist *)(list))->lh_Head) #define last(list) ((void *)((tlist *)(list))->lh_Tail) #define empty(list) (((tlist *)(list))->lh_TailPred == (tnode *)(list)) #define succ(node) (void *)(((tnode *)(node))->ln_Succ) #define pred(node) (void *)(((tnode *)(node))->ln_Pred) #define alloc_node(size) AllocMem((size), 0L) /* Free all elements of a homogeneous list */ void free_list(list *l, size_t size); #endif