45
45
** Circular linked list. Each link contains a pointer to the object that
46
46
** is actually in the list.
60
#define ZZ_InitList(lst) \
58
#define ZZ_InitList(lst) \
62
60
(lst)->link.next = &(lst)->link; \
63
61
(lst)->link.prev = &(lst)->link; \
64
(lst)->link.thing = 0; \
62
(lst)->link.thing = 0; \
67
#define ZZ_ListEmpty(lst) \
68
((lst)->link.next == &(lst)->link)
70
#define ZZ_ListHead(lst) \
73
#define ZZ_ListTail(lst) \
76
#define ZZ_ListIterDone(lst,lnk) \
77
((lnk) == &(lst)->link)
65
#define ZZ_ListEmpty(lst) ((lst)->link.next == &(lst)->link)
67
#define ZZ_ListHead(lst) ((lst)->link.next)
69
#define ZZ_ListTail(lst) ((lst)->link.prev)
71
#define ZZ_ListIterDone(lst,lnk) ((lnk) == &(lst)->link)
79
73
#define ZZ_AppendLink(lst,lnk) \
81
(lnk)->next = &(lst)->link; \
75
(lnk)->next = &(lst)->link; \
82
76
(lnk)->prev = (lst)->link.prev; \
83
77
(lst)->link.prev->next = (lnk); \
84
(lst)->link.prev = (lnk); \
78
(lst)->link.prev = (lnk); \
87
81
#define ZZ_InsertLink(lst,lnk) \
89
83
(lnk)->next = (lst)->link.next; \
90
(lnk)->prev = &(lst)->link; \
84
(lnk)->prev = &(lst)->link; \
91
85
(lst)->link.next->prev = (lnk); \
92
(lst)->link.next = (lnk); \
86
(lst)->link.next = (lnk); \
95
#define ZZ_RemoveLink(lnk) \
89
#define ZZ_RemoveLink(lnk) \
97
91
(lnk)->next->prev = (lnk)->prev; \
98
92
(lnk)->prev->next = (lnk)->next; \
103
extern ZZLink *ZZ_NewLink (JAR_Item *thing);
104
extern void ZZ_DestroyLink (ZZLink *link);
105
extern ZZList *ZZ_NewList (void);
106
extern void ZZ_DestroyList (ZZList *list);
98
ZZ_NewLink(JAR_Item *thing);
101
ZZ_DestroyLink(ZZLink *link);
107
ZZ_DestroyList(ZZList *list);
109
110
#endif /* __JAR_DS_h_ */