Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2 * License, v. 2.0. If a copy of the MPL was not distributed with this
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 #ifndef __JAR_DS_h_
6 #define __JAR_DS_h_
8 /* Typedefs */
9 typedef struct ZZLinkStr ZZLink;
10 typedef struct ZZListStr ZZList;
12 /*
13 ** Circular linked list. Each link contains a pointer to the object that
14 ** is actually in the list.
15 */
16 struct ZZLinkStr {
17 ZZLink *next;
18 ZZLink *prev;
19 JAR_Item *thing;
20 };
22 struct ZZListStr {
23 ZZLink link;
24 };
26 #define ZZ_InitList(lst) \
27 { \
28 (lst)->link.next = &(lst)->link; \
29 (lst)->link.prev = &(lst)->link; \
30 (lst)->link.thing = 0; \
31 }
33 #define ZZ_ListEmpty(lst) ((lst)->link.next == &(lst)->link)
35 #define ZZ_ListHead(lst) ((lst)->link.next)
37 #define ZZ_ListTail(lst) ((lst)->link.prev)
39 #define ZZ_ListIterDone(lst,lnk) ((lnk) == &(lst)->link)
41 #define ZZ_AppendLink(lst,lnk) \
42 { \
43 (lnk)->next = &(lst)->link; \
44 (lnk)->prev = (lst)->link.prev; \
45 (lst)->link.prev->next = (lnk); \
46 (lst)->link.prev = (lnk); \
47 }
49 #define ZZ_InsertLink(lst,lnk) \
50 { \
51 (lnk)->next = (lst)->link.next; \
52 (lnk)->prev = &(lst)->link; \
53 (lst)->link.next->prev = (lnk); \
54 (lst)->link.next = (lnk); \
55 }
57 #define ZZ_RemoveLink(lnk) \
58 { \
59 (lnk)->next->prev = (lnk)->prev; \
60 (lnk)->prev->next = (lnk)->next; \
61 (lnk)->next = 0; \
62 (lnk)->prev = 0; \
63 }
65 extern ZZLink *
66 ZZ_NewLink(JAR_Item *thing);
68 extern void
69 ZZ_DestroyLink(ZZLink *link);
71 extern ZZList *
72 ZZ_NewList(void);
74 extern void
75 ZZ_DestroyList(ZZList *list);
78 #endif /* __JAR_DS_h_ */