Same for 2.3.
[linux-2.6/linux-mips.git] / include / linux / lists.h
blobe1163acdeece217264c8b78c55957a47f8830c9f
1 /*
2 * lists.h: Simple list macros for Linux
3 */
5 #define DLNODE(ptype) \
6 struct { \
7 ptype * dl_prev; \
8 ptype * dl_next; \
11 #define DNODE_SINGLE(node) {(node),(node)}
12 #define DNODE_NULL {0,0}
14 #define DLIST_INIT(listnam) \
15 (listnam).dl_prev = &(listnam); \
16 (listnam).dl_next = &(listnam);
18 #define DLIST_NEXT(listnam) listnam.dl_next
19 #define DLIST_PREV(listnam) listnam.dl_prev
21 #define DLIST_INSERT_AFTER(node, new, listnam) do { \
22 (new)->listnam.dl_prev = (node); \
23 (new)->listnam.dl_next = (node)->listnam.dl_next; \
24 (node)->listnam.dl_next->listnam.dl_prev = (new); \
25 (node)->listnam.dl_next = (new); \
26 } while (0)
28 #define DLIST_INSERT_BEFORE(node, new, listnam) do { \
29 (new)->listnam.dl_next = (node); \
30 (new)->listnam.dl_prev = (node)->listnam.dl_prev; \
31 (node)->listnam.dl_prev->listnam.dl_next = (new); \
32 (node)->listnam.dl_prev = (new); \
33 } while (0)
35 #define DLIST_DELETE(node, listnam) do { \
36 node->listnam.dl_prev->listnam.dl_next = \
37 node->listnam.dl_next; \
38 node->listnam.dl_next->listnam.dl_prev = \
39 node->listnam.dl_prev; \
40 } while (0)
43 * queue-style operations, which have a head and tail
46 #define QUEUE_INIT(head, listnam, ptype) \
47 (head)->listnam.dl_prev = (head)->listnam.dl_next = (ptype)(head);
49 #define QUEUE_FIRST(head, listnam) (head)->DLIST_NEXT(listnam)
50 #define QUEUE_LAST(head, listnam) (head)->DLIST_PREV(listnam)
51 #define QUEUE_IS_EMPTY(head, listnam) \
52 ((QUEUE_FIRST(head, listnam) == QUEUE_LAST(head, listnam)) && \
53 ((u_long)QUEUE_FIRST(head, listnam) == (u_long)head))
55 #define QUEUE_ENTER(head, new, listnam, ptype) do { \
56 (new)->listnam.dl_prev = (ptype)(head); \
57 (new)->listnam.dl_next = (head)->listnam.dl_next; \
58 (head)->listnam.dl_next->listnam.dl_prev = (new); \
59 (head)->listnam.dl_next = (new); \
60 } while (0)
62 #define QUEUE_REMOVE(head, node, listnam) DLIST_DELETE(node, listnam)