Mercurial > code
annotate port/extern/queue.h @ 157:996337564c4d
Import OpenBSD strlcpy and strlcat
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 03 Aug 2012 17:50:28 +0200 |
parents | d3ccd7232e2d |
children |
rev | line source |
---|---|
16
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
63
d78c4d9fad13
Move to port/ code that I didn't write
David Demelier <markand@malikania.fr>
parents:
42
diff
changeset
|
2 * queue.h -- queue(3) from FreeBSD (portable version) |
16
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 /*- |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Copyright (c) 1991, 1993 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * The Regents of the University of California. All rights reserved. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * Redistribution and use in source and binary forms, with or without |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * modification, are permitted provided that the following conditions |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * are met: |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * 1. Redistributions of source code must retain the above copyright |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * notice, this list of conditions and the following disclaimer. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * 2. Redistributions in binary form must reproduce the above copyright |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * notice, this list of conditions and the following disclaimer in the |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * documentation and/or other materials provided with the distribution. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 * 4. Neither the name of the University nor the names of its contributors |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 * may be used to endorse or promote products derived from this software |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 * without specific prior written permission. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 * SUCH DAMAGE. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 * @(#)queue.h 8.5 (Berkeley) 8/20/94 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 * $FreeBSD: src/sys/sys/queue.h,v 1.72.2.4 2011/05/24 16:04:35 mdf Exp $ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 #ifndef _SYS_QUEUE_H_ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 #define _SYS_QUEUE_H_ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 * This file defines four types of data structures: singly-linked lists, |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * singly-linked tail queues, lists and tail queues. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 * A singly-linked list is headed by a single forward pointer. The elements |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 * are singly linked for minimum space and pointer manipulation overhead at |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 * the expense of O(n) removal for arbitrary elements. New elements can be |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 * added to the list after an existing element or at the head of the list. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * Elements being removed from the head of the list should use the explicit |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 * macro for this purpose for optimum efficiency. A singly-linked list may |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 * only be traversed in the forward direction. Singly-linked lists are ideal |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 * for applications with large datasets and few or no removals or for |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 * implementing a LIFO queue. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 * A singly-linked tail queue is headed by a pair of pointers, one to the |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 * head of the list and the other to the tail of the list. The elements are |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * singly linked for minimum space and pointer manipulation overhead at the |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * expense of O(n) removal for arbitrary elements. New elements can be added |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * to the list after an existing element, at the head of the list, or at the |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 * end of the list. Elements being removed from the head of the tail queue |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * should use the explicit macro for this purpose for optimum efficiency. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 * A singly-linked tail queue may only be traversed in the forward direction. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 * Singly-linked tail queues are ideal for applications with large datasets |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 * and few or no removals or for implementing a FIFO queue. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * A list is headed by a single forward pointer (or an array of forward |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * pointers for a hash table header). The elements are doubly linked |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * so that an arbitrary element can be removed without a need to |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 * traverse the list. New elements can be added to the list before |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * or after an existing element or at the head of the list. A list |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 * may only be traversed in the forward direction. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 * A tail queue is headed by a pair of pointers, one to the head of the |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 * list and the other to the tail of the list. The elements are doubly |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 * linked so that an arbitrary element can be removed without a need to |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * traverse the list. New elements can be added to the list before or |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * after an existing element, at the head of the list, or at the end of |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 * the list. A tail queue may be traversed in either direction. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 * For details on the use of these macros, see the queue(3) manual page. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 * SLIST LIST STAILQ TAILQ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 * _HEAD + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 * _HEAD_INITIALIZER + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 * _ENTRY + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * _INIT + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 * _EMPTY + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 * _FIRST + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 * _NEXT + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 * _PREV - - - + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 * _LAST - - + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 * _FOREACH + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 * _FOREACH_SAFE + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 * _FOREACH_REVERSE - - - + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 * _FOREACH_REVERSE_SAFE - - - + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 * _INSERT_HEAD + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 * _INSERT_BEFORE - + - + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 * _INSERT_AFTER + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 * _INSERT_TAIL - - + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 * _CONCAT - - + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 * _REMOVE_AFTER + - + - |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 * _REMOVE_HEAD + - + - |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 * _REMOVE + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 * _SWAP + + + + |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 * |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 * winnt.h includes some variables like SLIST_ENTRY, so undef all. If this |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 * file is used it is probably because the user want is instead of |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 * windows ones. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 #undef SLIST_EMPTY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 #undef SLIST_ENTRY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 #undef SLIST_FIRST |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 #undef SLIST_FOREACH |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 #undef SLIST_FOREACH_SAFE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 #undef SLIST_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 #undef SLIST_HEAD_INITIALIZER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 #undef SLIST_INIT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 #undef SLIST_INSERT_AFTER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 #undef SLIST_INSERT_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 #undef SLIST_NEXT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 #undef SLIST_REMOVE_AFTER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 #undef SLIST_REMOVE_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 #undef SLIST_REMOVE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 #undef SLIST_SWAP |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 #undef STAILQ_CONCAT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 #undef STAILQ_EMPTY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 #undef STAILQ_ENTRY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 #undef STAILQ_FIRST |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 #undef STAILQ_FOREACH |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 #undef STAILQ_FOREACH_SAFE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 #undef STAILQ_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 #undef STAILQ_HEAD_INITIALIZER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 #undef STAILQ_INIT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 #undef STAILQ_INSERT_AFTER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 #undef STAILQ_INSERT_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 #undef STAILQ_INSERT_TAIL |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 #undef STAILQ_LAST |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 #undef STAILQ_NEXT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 #undef STAILQ_REMOVE_AFTER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 #undef STAILQ_REMOVE_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 #undef STAILQ_REMOVE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 #undef STAILQ_SWAP |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 #undef LIST_EMPTY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 #undef LIST_ENTRY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 #undef LIST_FIRST |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 #undef LIST_FOREACH |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 #undef LIST_FOREACH_SAFE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 #undef LIST_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 #undef LIST_HEAD_INITIALIZER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 #undef LIST_INIT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 #undef LIST_INSERT_AFTER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 #undef LIST_INSERT_BEFORE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 #undef LIST_INSERT_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 #undef LIST_NEXT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 #undef LIST_REMOVE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 #undef LIST_SWAP |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 #undef TAILQ_CONCAT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 #undef TAILQ_EMPTY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 #undef TAILQ_ENTRY |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 #undef TAILQ_FIRST |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 #undef TAILQ_FOREACH |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 #undef TAILQ_FOREACH_SAFE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 #undef TAILQ_FOREACH_REVERSE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 #undef TAILQ_FOREACH_REVERSE_SAFE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 #undef TAILQ_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 #undef TAILQ_HEAD_INITIALIZER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 #undef TAILQ_INIT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 #undef TAILQ_INSERT_AFTER |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 #undef TAILQ_INSERT_BEFORE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 #undef TAILQ_INSERT_HEAD |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 #undef TAILQ_INSERT_TAIL |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 #undef TAILQ_LAST |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 #undef TAILQ_NEXT |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 #undef TAILQ_PREV |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 #undef TAILQ_REMOVE |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 #undef TAILQ_SWAP |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 * Singly-linked List declarations. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 #define SLIST_HEAD(name, type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 struct name { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 struct type *slh_first; /* first element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 #define SLIST_HEAD_INITIALIZER(head) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 { NULL } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 #define SLIST_ENTRY(type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 struct { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 struct type *sle_next; /* next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 * Singly-linked List functions. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 #define SLIST_EMPTY(head) ((head)->slh_first == NULL) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 #define SLIST_FIRST(head) ((head)->slh_first) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 #define SLIST_FOREACH(var, head, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 for ((var) = SLIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 (var); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 (var) = SLIST_NEXT((var), field)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 #define SLIST_FOREACH_SAFE(var, head, field, tvar) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 for ((var) = SLIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 (var) && ((tvar) = SLIST_NEXT((var), field), 1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 (var) = (tvar)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 #define SLIST_FOREACH_PREVPTR(var, varp, head, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 for ((varp) = &SLIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 ((var) = *(varp)) != NULL; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 (varp) = &SLIST_NEXT((var), field)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 #define SLIST_INIT(head) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 SLIST_FIRST((head)) = NULL; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 #define SLIST_INSERT_AFTER(slistelm, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 SLIST_NEXT((elm), field) = SLIST_NEXT((slistelm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 SLIST_NEXT((slistelm), field) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 #define SLIST_INSERT_HEAD(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 SLIST_NEXT((elm), field) = SLIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 SLIST_FIRST((head)) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 #define SLIST_NEXT(elm, field) ((elm)->field.sle_next) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 #define SLIST_REMOVE(head, elm, type, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 if (SLIST_FIRST((head)) == (elm)) { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 SLIST_REMOVE_HEAD((head), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 else { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 struct type *curelm = SLIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 while (SLIST_NEXT(curelm, field) != (elm)) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 curelm = SLIST_NEXT(curelm, field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 SLIST_REMOVE_AFTER(curelm, field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 #define SLIST_REMOVE_AFTER(elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 SLIST_NEXT(elm, field) = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 SLIST_NEXT(SLIST_NEXT(elm, field), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 #define SLIST_REMOVE_HEAD(head, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 SLIST_FIRST((head)) = SLIST_NEXT(SLIST_FIRST((head)), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 #define SLIST_SWAP(head1, head2, type) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 struct type *swap_first = SLIST_FIRST(head1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 SLIST_FIRST(head1) = SLIST_FIRST(head2); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 SLIST_FIRST(head2) = swap_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 * Singly-linked Tail queue declarations. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 #define STAILQ_HEAD(name, type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
267 struct name { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 struct type *stqh_first;/* first element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 struct type **stqh_last;/* addr of last next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 #define STAILQ_HEAD_INITIALIZER(head) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 { NULL, &(head).stqh_first } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 #define STAILQ_ENTRY(type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 struct { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 struct type *stqe_next; /* next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 * Singly-linked Tail queue functions. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 #define STAILQ_CONCAT(head1, head2) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 if (!STAILQ_EMPTY((head2))) { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 *(head1)->stqh_last = (head2)->stqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 (head1)->stqh_last = (head2)->stqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 STAILQ_INIT((head2)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 #define STAILQ_EMPTY(head) ((head)->stqh_first == NULL) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 #define STAILQ_FIRST(head) ((head)->stqh_first) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 #define STAILQ_FOREACH(var, head, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 for((var) = STAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 (var); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 (var) = STAILQ_NEXT((var), field)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 for ((var) = STAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 (var) = (tvar)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 #define STAILQ_INIT(head) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 STAILQ_FIRST((head)) = NULL; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 (head)->stqh_last = &STAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 #define STAILQ_INSERT_AFTER(head, tqelm, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 if ((STAILQ_NEXT((elm), field) = STAILQ_NEXT((tqelm), field)) == NULL)\ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 STAILQ_NEXT((tqelm), field) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 #define STAILQ_INSERT_HEAD(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 if ((STAILQ_NEXT((elm), field) = STAILQ_FIRST((head))) == NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 STAILQ_FIRST((head)) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 #define STAILQ_INSERT_TAIL(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 STAILQ_NEXT((elm), field) = NULL; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 *(head)->stqh_last = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 #define STAILQ_LAST(head, type, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 (STAILQ_EMPTY((head)) ? \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 NULL : \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 ((struct type *)(void *) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 ((char *)((head)->stqh_last) - __offsetof(struct type, field)))) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 #define STAILQ_NEXT(elm, field) ((elm)->field.stqe_next) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 #define STAILQ_REMOVE(head, elm, type, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 if (STAILQ_FIRST((head)) == (elm)) { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 STAILQ_REMOVE_HEAD((head), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 else { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
342 struct type *curelm = STAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
343 while (STAILQ_NEXT(curelm, field) != (elm)) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
344 curelm = STAILQ_NEXT(curelm, field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
345 STAILQ_REMOVE_AFTER(head, curelm, field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
346 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
347 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
348 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
349 #define STAILQ_REMOVE_AFTER(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
350 if ((STAILQ_NEXT(elm, field) = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
351 STAILQ_NEXT(STAILQ_NEXT(elm, field), field)) == NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
352 (head)->stqh_last = &STAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
353 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
354 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
355 #define STAILQ_REMOVE_HEAD(head, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
356 if ((STAILQ_FIRST((head)) = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
357 STAILQ_NEXT(STAILQ_FIRST((head)), field)) == NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
358 (head)->stqh_last = &STAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
359 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
360 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
361 #define STAILQ_SWAP(head1, head2, type) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
362 struct type *swap_first = STAILQ_FIRST(head1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
363 struct type **swap_last = (head1)->stqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
364 STAILQ_FIRST(head1) = STAILQ_FIRST(head2); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
365 (head1)->stqh_last = (head2)->stqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
366 STAILQ_FIRST(head2) = swap_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
367 (head2)->stqh_last = swap_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
368 if (STAILQ_EMPTY(head1)) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
369 (head1)->stqh_last = &STAILQ_FIRST(head1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
370 if (STAILQ_EMPTY(head2)) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
371 (head2)->stqh_last = &STAILQ_FIRST(head2); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
372 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
373 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
374 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
375 * List declarations. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
376 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
377 #define LIST_HEAD(name, type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
378 struct name { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
379 struct type *lh_first; /* first element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
380 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
381 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
382 #define LIST_HEAD_INITIALIZER(head) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
383 { NULL } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
384 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
385 #define LIST_ENTRY(type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
386 struct { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
387 struct type *le_next; /* next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
388 struct type **le_prev; /* address of previous next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
389 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
390 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
391 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
392 * List functions. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
393 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
394 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
395 #define LIST_EMPTY(head) ((head)->lh_first == NULL) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
396 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
397 #define LIST_FIRST(head) ((head)->lh_first) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
398 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
399 #define LIST_FOREACH(var, head, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
400 for ((var) = LIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
401 (var); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
402 (var) = LIST_NEXT((var), field)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
403 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
404 #define LIST_FOREACH_SAFE(var, head, field, tvar) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
405 for ((var) = LIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
406 (var) && ((tvar) = LIST_NEXT((var), field), 1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
407 (var) = (tvar)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
408 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
409 #define LIST_INIT(head) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
410 LIST_FIRST((head)) = NULL; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
411 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
412 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
413 #define LIST_INSERT_AFTER(listelm, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
414 if ((LIST_NEXT((elm), field) = LIST_NEXT((listelm), field)) != NULL)\ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
415 LIST_NEXT((listelm), field)->field.le_prev = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
416 &LIST_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
417 LIST_NEXT((listelm), field) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
418 (elm)->field.le_prev = &LIST_NEXT((listelm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
419 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
420 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
421 #define LIST_INSERT_BEFORE(listelm, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
422 (elm)->field.le_prev = (listelm)->field.le_prev; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
423 LIST_NEXT((elm), field) = (listelm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
424 *(listelm)->field.le_prev = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
425 (listelm)->field.le_prev = &LIST_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
426 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
427 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
428 #define LIST_INSERT_HEAD(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
429 if ((LIST_NEXT((elm), field) = LIST_FIRST((head))) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
430 LIST_FIRST((head))->field.le_prev = &LIST_NEXT((elm), field);\ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
431 LIST_FIRST((head)) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
432 (elm)->field.le_prev = &LIST_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
433 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
434 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
435 #define LIST_NEXT(elm, field) ((elm)->field.le_next) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
436 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
437 #define LIST_REMOVE(elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
438 if (LIST_NEXT((elm), field) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
439 LIST_NEXT((elm), field)->field.le_prev = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
440 (elm)->field.le_prev; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
441 *(elm)->field.le_prev = LIST_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
442 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
443 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
444 #define LIST_SWAP(head1, head2, type, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
445 struct type *swap_tmp = LIST_FIRST((head1)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
446 LIST_FIRST((head1)) = LIST_FIRST((head2)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
447 LIST_FIRST((head2)) = swap_tmp; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
448 if ((swap_tmp = LIST_FIRST((head1))) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
449 swap_tmp->field.le_prev = &LIST_FIRST((head1)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
450 if ((swap_tmp = LIST_FIRST((head2))) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
451 swap_tmp->field.le_prev = &LIST_FIRST((head2)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
452 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
453 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
454 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
455 * Tail queue declarations. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
456 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
457 #define TAILQ_HEAD(name, type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
458 struct name { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
459 struct type *tqh_first; /* first element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
460 struct type **tqh_last; /* addr of last next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
461 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
462 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
463 #define TAILQ_HEAD_INITIALIZER(head) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
464 { NULL, &(head).tqh_first } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
465 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
466 #define TAILQ_ENTRY(type) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
467 struct { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
468 struct type *tqe_next; /* next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
469 struct type **tqe_prev; /* address of previous next element */ \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
470 } |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
471 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
472 /* |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
473 * Tail queue functions. |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
474 */ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
475 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
476 #define TAILQ_CONCAT(head1, head2, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
477 if (!TAILQ_EMPTY(head2)) { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
478 *(head1)->tqh_last = (head2)->tqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
479 (head2)->tqh_first->field.tqe_prev = (head1)->tqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
480 (head1)->tqh_last = (head2)->tqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
481 TAILQ_INIT((head2)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
482 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
483 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
484 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
485 #define TAILQ_EMPTY(head) ((head)->tqh_first == NULL) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
486 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
487 #define TAILQ_FIRST(head) ((head)->tqh_first) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
488 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
489 #define TAILQ_FOREACH(var, head, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
490 for ((var) = TAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
491 (var); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
492 (var) = TAILQ_NEXT((var), field)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
493 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
494 #define TAILQ_FOREACH_SAFE(var, head, field, tvar) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
495 for ((var) = TAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
496 (var) && ((tvar) = TAILQ_NEXT((var), field), 1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
497 (var) = (tvar)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
498 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
499 #define TAILQ_FOREACH_REVERSE(var, head, headname, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
500 for ((var) = TAILQ_LAST((head), headname); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
501 (var); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
502 (var) = TAILQ_PREV((var), headname, field)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
503 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
504 #define TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
505 for ((var) = TAILQ_LAST((head), headname); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
506 (var) && ((tvar) = TAILQ_PREV((var), headname, field), 1); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
507 (var) = (tvar)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
508 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
509 #define TAILQ_INIT(head) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
510 TAILQ_FIRST((head)) = NULL; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
511 (head)->tqh_last = &TAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
512 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
513 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
514 #define TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
515 if ((TAILQ_NEXT((elm), field) = TAILQ_NEXT((listelm), field)) != NULL)\ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
516 TAILQ_NEXT((elm), field)->field.tqe_prev = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
517 &TAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
518 else { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
519 (head)->tqh_last = &TAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
520 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
521 TAILQ_NEXT((listelm), field) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
522 (elm)->field.tqe_prev = &TAILQ_NEXT((listelm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
523 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
524 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
525 #define TAILQ_INSERT_BEFORE(listelm, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
526 (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
527 TAILQ_NEXT((elm), field) = (listelm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
528 *(listelm)->field.tqe_prev = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
529 (listelm)->field.tqe_prev = &TAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
530 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
531 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
532 #define TAILQ_INSERT_HEAD(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
533 if ((TAILQ_NEXT((elm), field) = TAILQ_FIRST((head))) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
534 TAILQ_FIRST((head))->field.tqe_prev = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
535 &TAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
536 else \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
537 (head)->tqh_last = &TAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
538 TAILQ_FIRST((head)) = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
539 (elm)->field.tqe_prev = &TAILQ_FIRST((head)); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
540 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
541 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
542 #define TAILQ_INSERT_TAIL(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
543 TAILQ_NEXT((elm), field) = NULL; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
544 (elm)->field.tqe_prev = (head)->tqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
545 *(head)->tqh_last = (elm); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
546 (head)->tqh_last = &TAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
547 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
548 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
549 #define TAILQ_LAST(head, headname) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
550 (*(((struct headname *)((head)->tqh_last))->tqh_last)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
551 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
552 #define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
553 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
554 #define TAILQ_PREV(elm, headname, field) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
555 (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last)) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
556 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
557 #define TAILQ_REMOVE(head, elm, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
558 if ((TAILQ_NEXT((elm), field)) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
559 TAILQ_NEXT((elm), field)->field.tqe_prev = \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
560 (elm)->field.tqe_prev; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
561 else { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
562 (head)->tqh_last = (elm)->field.tqe_prev; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
563 } \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
564 *(elm)->field.tqe_prev = TAILQ_NEXT((elm), field); \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
565 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
566 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
567 #define TAILQ_SWAP(head1, head2, type, field) do { \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
568 struct type *swap_first = (head1)->tqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
569 struct type **swap_last = (head1)->tqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
570 (head1)->tqh_first = (head2)->tqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
571 (head1)->tqh_last = (head2)->tqh_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
572 (head2)->tqh_first = swap_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
573 (head2)->tqh_last = swap_last; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
574 if ((swap_first = (head1)->tqh_first) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
575 swap_first->field.tqe_prev = &(head1)->tqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
576 else \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
577 (head1)->tqh_last = &(head1)->tqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
578 if ((swap_first = (head2)->tqh_first) != NULL) \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
579 swap_first->field.tqe_prev = &(head2)->tqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
580 else \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
581 (head2)->tqh_last = &(head2)->tqh_first; \ |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
582 } while (0) |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
583 |
4212fb4b4e41
Added a portable version of sys/queue.h
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
584 #endif /* !_SYS_QUEUE_H_ */ |