tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

jar-ds.h (1964B)


      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/. */
      4 
      5 #ifndef __JAR_DS_h_
      6 #define __JAR_DS_h_
      7 
      8 /* Typedefs */
      9 typedef struct ZZLinkStr ZZLink;
     10 typedef struct ZZListStr ZZList;
     11 
     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 };
     21 
     22 struct ZZListStr {
     23    ZZLink link;
     24 };
     25 
     26 #define ZZ_InitList(lst)                 \
     27    {                                    \
     28        (lst)->link.next = &(lst)->link; \
     29        (lst)->link.prev = &(lst)->link; \
     30        (lst)->link.thing = 0;           \
     31    }
     32 
     33 #define ZZ_ListEmpty(lst) ((lst)->link.next == &(lst)->link)
     34 
     35 #define ZZ_ListHead(lst) ((lst)->link.next)
     36 
     37 #define ZZ_ListTail(lst) ((lst)->link.prev)
     38 
     39 #define ZZ_ListIterDone(lst, lnk) ((lnk) == &(lst)->link)
     40 
     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    }
     48 
     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    }
     56 
     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    }
     64 
     65 extern ZZLink *
     66 ZZ_NewLink(JAR_Item *thing);
     67 
     68 extern void
     69 ZZ_DestroyLink(ZZLink *link);
     70 
     71 extern ZZList *
     72 ZZ_NewList(void);
     73 
     74 extern void
     75 ZZ_DestroyList(ZZList *list);
     76 
     77 #endif /* __JAR_DS_h_ */