Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ngx_queue.h
Go to the documentation of this file.
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) Nginx, Inc.
5  */
6 
7 
8 #include <ngx_config.h>
9 #include <ngx_core.h>
10 
11 
12 #ifndef _NGX_QUEUE_H_INCLUDED_
13 #define _NGX_QUEUE_H_INCLUDED_
14 
15 
16 typedef struct ngx_queue_s ngx_queue_t;
17 
18 struct ngx_queue_s {
21 };
22 
23 
24 #define ngx_queue_init(q) \
25  (q)->prev = q; \
26  (q)->next = q
27 
28 
29 #define ngx_queue_empty(h) \
30  (h == (h)->prev)
31 
32 
33 #define ngx_queue_insert_head(h, x) \
34  (x)->next = (h)->next; \
35  (x)->next->prev = x; \
36  (x)->prev = h; \
37  (h)->next = x
38 
39 
40 #define ngx_queue_insert_after ngx_queue_insert_head
41 
42 
43 #define ngx_queue_insert_tail(h, x) \
44  (x)->prev = (h)->prev; \
45  (x)->prev->next = x; \
46  (x)->next = h; \
47  (h)->prev = x
48 
49 
50 #define ngx_queue_head(h) \
51  (h)->next
52 
53 
54 #define ngx_queue_last(h) \
55  (h)->prev
56 
57 
58 #define ngx_queue_sentinel(h) \
59  (h)
60 
61 
62 #define ngx_queue_next(q) \
63  (q)->next
64 
65 
66 #define ngx_queue_prev(q) \
67  (q)->prev
68 
69 
70 #if (NGX_DEBUG)
71 
72 #define ngx_queue_remove(x) \
73  (x)->next->prev = (x)->prev; \
74  (x)->prev->next = (x)->next; \
75  (x)->prev = NULL; \
76  (x)->next = NULL
77 
78 #else
79 
80 #define ngx_queue_remove(x) \
81  (x)->next->prev = (x)->prev; \
82  (x)->prev->next = (x)->next
83 
84 #endif
85 
86 
87 #define ngx_queue_split(h, q, n) \
88  (n)->prev = (h)->prev; \
89  (n)->prev->next = n; \
90  (n)->next = q; \
91  (h)->prev = (q)->prev; \
92  (h)->prev->next = h; \
93  (q)->prev = n;
94 
95 
96 #define ngx_queue_add(h, n) \
97  (h)->prev->next = (n)->next; \
98  (n)->next->prev = (h)->prev; \
99  (h)->prev = (n)->prev; \
100  (h)->prev->next = h;
101 
102 
103 #define ngx_queue_data(q, type, link) \
104  (type *) ((u_char *) q - offsetof(type, link))
105 
106 
108 void ngx_queue_sort(ngx_queue_t *queue,
109  ngx_int_t (*cmp)(const ngx_queue_t *, const ngx_queue_t *));
110 
111 
112 #endif /* _NGX_QUEUE_H_INCLUDED_ */