1*d14abf15SRobert Mustacchi /*******************************************************************************
2*d14abf15SRobert Mustacchi * The information contained in this file is confidential and proprietary to
3*d14abf15SRobert Mustacchi * ZNK Corporation. No part of this file may be reproduced or distributed,
4*d14abf15SRobert Mustacchi * in any form or by any means for any purpose, without the express written
5*d14abf15SRobert Mustacchi * permission of ZNK Corporation.
6*d14abf15SRobert Mustacchi *
7*d14abf15SRobert Mustacchi * (c) COPYRIGHT 1998 ZNK Corporation, ALL RIGHTS RESERVED.
8*d14abf15SRobert Mustacchi *
9*d14abf15SRobert Mustacchi * Single link list routines:
10*d14abf15SRobert Mustacchi * void s_list_init (s_list_t *, *head, *tail, cnt)
11*d14abf15SRobert Mustacchi * void s_list_clear (s_list_t *)
12*d14abf15SRobert Mustacchi * void s_list_push_head (s_list_t *, s_list_entry_t *)
13*d14abf15SRobert Mustacchi * s_list_entry_t * s_list_pop_head (s_list_t *)
14*d14abf15SRobert Mustacchi * void s_list_push_tail (s_list_t *, s_list_entry_t *)
15*d14abf15SRobert Mustacchi * s_list_entry_t * s_list_peek_head (s_list_t *)
16*d14abf15SRobert Mustacchi * s_list_entry_t * s_list_peek_tail (s_list_t *)
17*d14abf15SRobert Mustacchi * s_list_entry_t * s_list_next_entry (s_list_entry_t *)
18*d14abf15SRobert Mustacchi * unsigned long s_list_entry_cnt (s_list_t *)
19*d14abf15SRobert Mustacchi * char s_list_is_empty (s_list_t *)
20*d14abf15SRobert Mustacchi * void s_list_add_head (s_list_t *, s_list_t *)
21*d14abf15SRobert Mustacchi * void s_list_add_tail (s_list_t *, s_list_t *)
22*d14abf15SRobert Mustacchi * void s_list_split (d_list_t *, d_list_t *, d_list_entry_t *, ulong)
23*d14abf15SRobert Mustacchi *
24*d14abf15SRobert Mustacchi * Double link list routines:
25*d14abf15SRobert Mustacchi * void d_list_init (d_list_t *, *head, *tail, cnt)
26*d14abf15SRobert Mustacchi * void d_list_clear (d_list_t *)
27*d14abf15SRobert Mustacchi * void d_list_push_head (d_list_t *, d_list_entry_t *)
28*d14abf15SRobert Mustacchi * d_list_entry_t * d_list_pop_head (d_list_t *)
29*d14abf15SRobert Mustacchi * void d_list_push_tail (d_list_t *, d_list_entry_t *)
30*d14abf15SRobert Mustacchi * d_list_entry_t * d_list_pop_tail (d_list_t *)
31*d14abf15SRobert Mustacchi * d_list_entry_t * d_list_peek_head (d_list_t *)
32*d14abf15SRobert Mustacchi * d_list_entry_t * d_list_peek_tail (d_list_t *)
33*d14abf15SRobert Mustacchi * d_list_entry_t * d_list_next_entry (d_list_entry_t *)
34*d14abf15SRobert Mustacchi * void d_list_remove_entry(d_list_t *, d_list_entry_t *)
35*d14abf15SRobert Mustacchi * void d_list_insert_entry(d_list_t *, *prev, *next, *new)
36*d14abf15SRobert Mustacchi * d_list_entry_t * d_list_prev_entry (d_list_entry_t *)
37*d14abf15SRobert Mustacchi * unsigned long d_list_entry_cnt (d_list_t *)
38*d14abf15SRobert Mustacchi * char d_list_is_empty (d_list_t *)
39*d14abf15SRobert Mustacchi * void d_list_add_head (d_list_t *, d_list_t *)
40*d14abf15SRobert Mustacchi * void d_list_add_tail (d_list_t *, d_list_t *)
41*d14abf15SRobert Mustacchi *
42*d14abf15SRobert Mustacchi * Array list routines:
43*d14abf15SRobert Mustacchi * void q_list_init (q_list_t *, q_list_entry *, ulong)
44*d14abf15SRobert Mustacchi * void q_list_clear (q_list_t *)
45*d14abf15SRobert Mustacchi * void q_list_push_head (q_list_t *, q_list_entry_t)
46*d14abf15SRobert Mustacchi * q_list_entry_t q_list_pop_head (q_list_t *)
47*d14abf15SRobert Mustacchi * void q_list_push_tail (q_list_t *, q_list_entry_t)
48*d14abf15SRobert Mustacchi * q_list_entry_t q_list_pop_tail (q_list_t *)
49*d14abf15SRobert Mustacchi * q_list_entry_t q_list_peek_head (q_list_t *)
50*d14abf15SRobert Mustacchi * q_list_entry_t q_list_peek_tail (q_list_t *)
51*d14abf15SRobert Mustacchi * unsigned long q_list_entry_cnt (q_list_t *)
52*d14abf15SRobert Mustacchi * char q_list_is_empty (q_list_t *)
53*d14abf15SRobert Mustacchi * char q_list_is_full (q_list_t *)
54*d14abf15SRobert Mustacchi *
55*d14abf15SRobert Mustacchi * History:
56*d14abf15SRobert Mustacchi * 03/30/98 Hav Khauv Initial version.
57*d14abf15SRobert Mustacchi ******************************************************************************/
58*d14abf15SRobert Mustacchi
59*d14abf15SRobert Mustacchi #ifndef _listq_h_
60*d14abf15SRobert Mustacchi #define _listq_h_
61*d14abf15SRobert Mustacchi
62*d14abf15SRobert Mustacchi
63*d14abf15SRobert Mustacchi
64*d14abf15SRobert Mustacchi /*******************************************************************************
65*d14abf15SRobert Mustacchi * Single link list.
66*d14abf15SRobert Mustacchi ******************************************************************************/
67*d14abf15SRobert Mustacchi
68*d14abf15SRobert Mustacchi typedef struct _s_list_entry_t
69*d14abf15SRobert Mustacchi {
70*d14abf15SRobert Mustacchi struct _s_list_entry_t *next;
71*d14abf15SRobert Mustacchi } s_list_entry_t;
72*d14abf15SRobert Mustacchi
73*d14abf15SRobert Mustacchi #define S_LINK_CAST(_p) ((s_list_entry_t *) (_p))
74*d14abf15SRobert Mustacchi
75*d14abf15SRobert Mustacchi
76*d14abf15SRobert Mustacchi typedef struct _s_list_t
77*d14abf15SRobert Mustacchi {
78*d14abf15SRobert Mustacchi s_list_entry_t *head;
79*d14abf15SRobert Mustacchi s_list_entry_t *tail;
80*d14abf15SRobert Mustacchi unsigned long cnt;
81*d14abf15SRobert Mustacchi } s_list_t;
82*d14abf15SRobert Mustacchi
83*d14abf15SRobert Mustacchi
84*d14abf15SRobert Mustacchi
85*d14abf15SRobert Mustacchi #ifdef _INLINE_LISTQ_CALLS
86*d14abf15SRobert Mustacchi
87*d14abf15SRobert Mustacchi
88*d14abf15SRobert Mustacchi __inline
89*d14abf15SRobert Mustacchi void
s_list_init(s_list_t * s_list,s_list_entry_t * head_entry,s_list_entry_t * tail_entry,unsigned long entry_cnt)90*d14abf15SRobert Mustacchi s_list_init(
91*d14abf15SRobert Mustacchi s_list_t *s_list,
92*d14abf15SRobert Mustacchi s_list_entry_t *head_entry,
93*d14abf15SRobert Mustacchi s_list_entry_t *tail_entry,
94*d14abf15SRobert Mustacchi unsigned long entry_cnt)
95*d14abf15SRobert Mustacchi {
96*d14abf15SRobert Mustacchi s_list->head = head_entry;
97*d14abf15SRobert Mustacchi s_list->tail = tail_entry;
98*d14abf15SRobert Mustacchi s_list->cnt = entry_cnt;
99*d14abf15SRobert Mustacchi }
100*d14abf15SRobert Mustacchi
101*d14abf15SRobert Mustacchi
102*d14abf15SRobert Mustacchi __inline
103*d14abf15SRobert Mustacchi void
s_list_clear(s_list_t * s_list)104*d14abf15SRobert Mustacchi s_list_clear(
105*d14abf15SRobert Mustacchi s_list_t *s_list)
106*d14abf15SRobert Mustacchi {
107*d14abf15SRobert Mustacchi s_list->head = (s_list_entry_t *) 0;
108*d14abf15SRobert Mustacchi s_list->tail = (s_list_entry_t *) 0;
109*d14abf15SRobert Mustacchi s_list->cnt = 0;
110*d14abf15SRobert Mustacchi }
111*d14abf15SRobert Mustacchi
112*d14abf15SRobert Mustacchi
113*d14abf15SRobert Mustacchi __inline
114*d14abf15SRobert Mustacchi void
s_list_push_head(s_list_t * s_list,s_list_entry_t * s_entry)115*d14abf15SRobert Mustacchi s_list_push_head(
116*d14abf15SRobert Mustacchi s_list_t *s_list,
117*d14abf15SRobert Mustacchi s_list_entry_t *s_entry)
118*d14abf15SRobert Mustacchi {
119*d14abf15SRobert Mustacchi s_entry->next = s_list->head;
120*d14abf15SRobert Mustacchi
121*d14abf15SRobert Mustacchi if(s_list->tail == (s_list_entry_t *) 0)
122*d14abf15SRobert Mustacchi {
123*d14abf15SRobert Mustacchi s_list->tail = s_entry;
124*d14abf15SRobert Mustacchi }
125*d14abf15SRobert Mustacchi s_list->head = s_entry;
126*d14abf15SRobert Mustacchi
127*d14abf15SRobert Mustacchi s_list->cnt++;
128*d14abf15SRobert Mustacchi }
129*d14abf15SRobert Mustacchi
130*d14abf15SRobert Mustacchi
131*d14abf15SRobert Mustacchi __inline
132*d14abf15SRobert Mustacchi s_list_entry_t *
s_list_pop_head(s_list_t * s_list)133*d14abf15SRobert Mustacchi s_list_pop_head(
134*d14abf15SRobert Mustacchi s_list_t *s_list)
135*d14abf15SRobert Mustacchi {
136*d14abf15SRobert Mustacchi s_list_entry_t *s_entry;
137*d14abf15SRobert Mustacchi
138*d14abf15SRobert Mustacchi s_entry = s_list->head;
139*d14abf15SRobert Mustacchi if(s_list->head)
140*d14abf15SRobert Mustacchi {
141*d14abf15SRobert Mustacchi s_list->head = s_list->head->next;
142*d14abf15SRobert Mustacchi if(s_list->head == (s_list_entry_t *) 0)
143*d14abf15SRobert Mustacchi {
144*d14abf15SRobert Mustacchi s_list->tail = (s_list_entry_t *) 0;
145*d14abf15SRobert Mustacchi }
146*d14abf15SRobert Mustacchi
147*d14abf15SRobert Mustacchi s_list->cnt--;
148*d14abf15SRobert Mustacchi }
149*d14abf15SRobert Mustacchi
150*d14abf15SRobert Mustacchi return s_entry;
151*d14abf15SRobert Mustacchi }
152*d14abf15SRobert Mustacchi
153*d14abf15SRobert Mustacchi
154*d14abf15SRobert Mustacchi __inline
155*d14abf15SRobert Mustacchi void
s_list_push_tail(s_list_t * s_list,s_list_entry_t * s_entry)156*d14abf15SRobert Mustacchi s_list_push_tail(
157*d14abf15SRobert Mustacchi s_list_t *s_list,
158*d14abf15SRobert Mustacchi s_list_entry_t *s_entry)
159*d14abf15SRobert Mustacchi {
160*d14abf15SRobert Mustacchi s_entry->next = (s_list_entry_t *) 0;
161*d14abf15SRobert Mustacchi
162*d14abf15SRobert Mustacchi if(s_list->tail)
163*d14abf15SRobert Mustacchi {
164*d14abf15SRobert Mustacchi s_list->tail->next = s_entry;
165*d14abf15SRobert Mustacchi }
166*d14abf15SRobert Mustacchi else
167*d14abf15SRobert Mustacchi {
168*d14abf15SRobert Mustacchi s_list->head = s_entry;
169*d14abf15SRobert Mustacchi }
170*d14abf15SRobert Mustacchi s_list->tail = s_entry;
171*d14abf15SRobert Mustacchi
172*d14abf15SRobert Mustacchi s_list->cnt++;
173*d14abf15SRobert Mustacchi }
174*d14abf15SRobert Mustacchi
175*d14abf15SRobert Mustacchi
176*d14abf15SRobert Mustacchi __inline
177*d14abf15SRobert Mustacchi s_list_entry_t *
s_list_peek_head(s_list_t * s_list)178*d14abf15SRobert Mustacchi s_list_peek_head(
179*d14abf15SRobert Mustacchi s_list_t *s_list)
180*d14abf15SRobert Mustacchi {
181*d14abf15SRobert Mustacchi return s_list->head;
182*d14abf15SRobert Mustacchi }
183*d14abf15SRobert Mustacchi
184*d14abf15SRobert Mustacchi
185*d14abf15SRobert Mustacchi __inline
186*d14abf15SRobert Mustacchi s_list_entry_t *
s_list_peek_tail(s_list_t * s_list)187*d14abf15SRobert Mustacchi s_list_peek_tail(
188*d14abf15SRobert Mustacchi s_list_t *s_list)
189*d14abf15SRobert Mustacchi {
190*d14abf15SRobert Mustacchi return s_list->tail;
191*d14abf15SRobert Mustacchi }
192*d14abf15SRobert Mustacchi
193*d14abf15SRobert Mustacchi
194*d14abf15SRobert Mustacchi __inline
195*d14abf15SRobert Mustacchi s_list_entry_t *
s_list_next_entry(s_list_entry_t * s_entry)196*d14abf15SRobert Mustacchi s_list_next_entry(
197*d14abf15SRobert Mustacchi s_list_entry_t *s_entry)
198*d14abf15SRobert Mustacchi {
199*d14abf15SRobert Mustacchi return s_entry->next;
200*d14abf15SRobert Mustacchi }
201*d14abf15SRobert Mustacchi
202*d14abf15SRobert Mustacchi
203*d14abf15SRobert Mustacchi __inline
204*d14abf15SRobert Mustacchi unsigned long
s_list_entry_cnt(s_list_t * s_list)205*d14abf15SRobert Mustacchi s_list_entry_cnt(
206*d14abf15SRobert Mustacchi s_list_t *s_list)
207*d14abf15SRobert Mustacchi {
208*d14abf15SRobert Mustacchi return s_list->cnt;
209*d14abf15SRobert Mustacchi }
210*d14abf15SRobert Mustacchi
211*d14abf15SRobert Mustacchi
212*d14abf15SRobert Mustacchi __inline
213*d14abf15SRobert Mustacchi char
s_list_is_empty(s_list_t * s_list)214*d14abf15SRobert Mustacchi s_list_is_empty(
215*d14abf15SRobert Mustacchi s_list_t *s_list)
216*d14abf15SRobert Mustacchi {
217*d14abf15SRobert Mustacchi return s_list->cnt == 0;
218*d14abf15SRobert Mustacchi }
219*d14abf15SRobert Mustacchi
220*d14abf15SRobert Mustacchi
221*d14abf15SRobert Mustacchi __inline
222*d14abf15SRobert Mustacchi void
s_list_add_head(s_list_t * s_list,s_list_t * s_list_head)223*d14abf15SRobert Mustacchi s_list_add_head(
224*d14abf15SRobert Mustacchi s_list_t *s_list,
225*d14abf15SRobert Mustacchi s_list_t *s_list_head)
226*d14abf15SRobert Mustacchi {
227*d14abf15SRobert Mustacchi if(s_list->cnt == 0)
228*d14abf15SRobert Mustacchi {
229*d14abf15SRobert Mustacchi *s_list = *s_list_head;
230*d14abf15SRobert Mustacchi }
231*d14abf15SRobert Mustacchi else if(s_list_head->cnt)
232*d14abf15SRobert Mustacchi {
233*d14abf15SRobert Mustacchi s_list_head->tail->next = s_list->head;
234*d14abf15SRobert Mustacchi s_list->head = s_list_head->head;
235*d14abf15SRobert Mustacchi s_list->cnt += s_list_head->cnt;
236*d14abf15SRobert Mustacchi }
237*d14abf15SRobert Mustacchi }
238*d14abf15SRobert Mustacchi
239*d14abf15SRobert Mustacchi
240*d14abf15SRobert Mustacchi __inline
241*d14abf15SRobert Mustacchi void
s_list_add_tail(s_list_t * s_list,s_list_t * s_list_tail)242*d14abf15SRobert Mustacchi s_list_add_tail(
243*d14abf15SRobert Mustacchi s_list_t *s_list,
244*d14abf15SRobert Mustacchi s_list_t *s_list_tail)
245*d14abf15SRobert Mustacchi {
246*d14abf15SRobert Mustacchi if(s_list->cnt == 0)
247*d14abf15SRobert Mustacchi {
248*d14abf15SRobert Mustacchi *s_list = *s_list_tail;
249*d14abf15SRobert Mustacchi }
250*d14abf15SRobert Mustacchi else if(s_list_tail->cnt)
251*d14abf15SRobert Mustacchi {
252*d14abf15SRobert Mustacchi s_list->tail->next = s_list_tail->head;
253*d14abf15SRobert Mustacchi s_list->tail = s_list_tail->tail;
254*d14abf15SRobert Mustacchi s_list->cnt += s_list_tail->cnt;
255*d14abf15SRobert Mustacchi }
256*d14abf15SRobert Mustacchi }
257*d14abf15SRobert Mustacchi
258*d14abf15SRobert Mustacchi __inline
259*d14abf15SRobert Mustacchi void
s_list_split(s_list_t * s_list,s_list_t * s_list_head,s_list_entry_t * split_entry,unsigned long entry_cnt)260*d14abf15SRobert Mustacchi s_list_split(
261*d14abf15SRobert Mustacchi s_list_t * s_list,
262*d14abf15SRobert Mustacchi s_list_t * s_list_head,
263*d14abf15SRobert Mustacchi s_list_entry_t * split_entry,
264*d14abf15SRobert Mustacchi unsigned long entry_cnt)
265*d14abf15SRobert Mustacchi {
266*d14abf15SRobert Mustacchi if (split_entry->next == NULL) {
267*d14abf15SRobert Mustacchi s_list_head->head = s_list->head;
268*d14abf15SRobert Mustacchi s_list_head->tail = split_entry;
269*d14abf15SRobert Mustacchi s_list_head->cnt = entry_cnt;
270*d14abf15SRobert Mustacchi
271*d14abf15SRobert Mustacchi s_list->head = NULL;
272*d14abf15SRobert Mustacchi s_list->tail = NULL;
273*d14abf15SRobert Mustacchi s_list->cnt = 0;
274*d14abf15SRobert Mustacchi } else {
275*d14abf15SRobert Mustacchi s_list_head->head = s_list->head;
276*d14abf15SRobert Mustacchi s_list_head->tail = split_entry;
277*d14abf15SRobert Mustacchi s_list_head->cnt = entry_cnt;
278*d14abf15SRobert Mustacchi
279*d14abf15SRobert Mustacchi s_list->head = split_entry->next;
280*d14abf15SRobert Mustacchi s_list->cnt = s_list->cnt - entry_cnt;
281*d14abf15SRobert Mustacchi split_entry->next = NULL;
282*d14abf15SRobert Mustacchi
283*d14abf15SRobert Mustacchi }
284*d14abf15SRobert Mustacchi }
285*d14abf15SRobert Mustacchi
286*d14abf15SRobert Mustacchi #else
287*d14abf15SRobert Mustacchi
288*d14abf15SRobert Mustacchi
289*d14abf15SRobert Mustacchi #define s_list_init(_s_list, _head_entry, _tail_entry, _entry_cnt) \
290*d14abf15SRobert Mustacchi (_s_list)->head = (_head_entry); \
291*d14abf15SRobert Mustacchi (_s_list)->tail = (_tail_entry); \
292*d14abf15SRobert Mustacchi (_s_list)->cnt = (_entry_cnt)
293*d14abf15SRobert Mustacchi
294*d14abf15SRobert Mustacchi
295*d14abf15SRobert Mustacchi #define s_list_clear(_s_list) \
296*d14abf15SRobert Mustacchi (_s_list)->head = (s_list_entry_t *) 0; \
297*d14abf15SRobert Mustacchi (_s_list)->tail = (s_list_entry_t *) 0; \
298*d14abf15SRobert Mustacchi (_s_list)->cnt = 0
299*d14abf15SRobert Mustacchi
300*d14abf15SRobert Mustacchi
301*d14abf15SRobert Mustacchi #define s_list_push_head(_s_list, _s_entry) \
302*d14abf15SRobert Mustacchi (_s_entry)->next = (_s_list)->head; \
303*d14abf15SRobert Mustacchi if((_s_list)->tail == (s_list_entry_t *) 0) \
304*d14abf15SRobert Mustacchi { \
305*d14abf15SRobert Mustacchi (_s_list)->tail = (_s_entry); \
306*d14abf15SRobert Mustacchi } \
307*d14abf15SRobert Mustacchi (_s_list)->head = (_s_entry); \
308*d14abf15SRobert Mustacchi (_s_list)->cnt++
309*d14abf15SRobert Mustacchi
310*d14abf15SRobert Mustacchi
311*d14abf15SRobert Mustacchi #define s_list_pop_head(_s_list) \
312*d14abf15SRobert Mustacchi (_s_list)->head; \
313*d14abf15SRobert Mustacchi if((_s_list)->head) \
314*d14abf15SRobert Mustacchi { \
315*d14abf15SRobert Mustacchi (_s_list)->head = (_s_list)->head->next; \
316*d14abf15SRobert Mustacchi if((_s_list)->head == (s_list_entry_t *) 0) \
317*d14abf15SRobert Mustacchi { \
318*d14abf15SRobert Mustacchi (_s_list)->tail = (s_list_entry_t *) 0; \
319*d14abf15SRobert Mustacchi } \
320*d14abf15SRobert Mustacchi (_s_list)->cnt--; \
321*d14abf15SRobert Mustacchi }
322*d14abf15SRobert Mustacchi
323*d14abf15SRobert Mustacchi
324*d14abf15SRobert Mustacchi #define s_list_push_tail(_s_list, _s_entry) \
325*d14abf15SRobert Mustacchi (_s_entry)->next = (s_list_entry_t *) 0; \
326*d14abf15SRobert Mustacchi if((_s_list)->tail) \
327*d14abf15SRobert Mustacchi { \
328*d14abf15SRobert Mustacchi (_s_list)->tail->next = (_s_entry); \
329*d14abf15SRobert Mustacchi } \
330*d14abf15SRobert Mustacchi else \
331*d14abf15SRobert Mustacchi { \
332*d14abf15SRobert Mustacchi (_s_list)->head = (_s_entry); \
333*d14abf15SRobert Mustacchi } \
334*d14abf15SRobert Mustacchi (_s_list)->tail = (_s_entry); \
335*d14abf15SRobert Mustacchi (_s_list)->cnt++
336*d14abf15SRobert Mustacchi
337*d14abf15SRobert Mustacchi
338*d14abf15SRobert Mustacchi #define s_list_peek_head(_s_list) ((_s_list)->head)
339*d14abf15SRobert Mustacchi
340*d14abf15SRobert Mustacchi
341*d14abf15SRobert Mustacchi #define s_list_peek_tail(_s_list) ((_s_list)->tail)
342*d14abf15SRobert Mustacchi
343*d14abf15SRobert Mustacchi
344*d14abf15SRobert Mustacchi #define s_list_next_entry(_s_entry) ((_s_entry)->next)
345*d14abf15SRobert Mustacchi
346*d14abf15SRobert Mustacchi
347*d14abf15SRobert Mustacchi #define s_list_entry_cnt(_s_list) ((_s_list)->cnt)
348*d14abf15SRobert Mustacchi
349*d14abf15SRobert Mustacchi
350*d14abf15SRobert Mustacchi #define s_list_is_empty(_s_list) ((_s_list)->cnt == 0)
351*d14abf15SRobert Mustacchi
352*d14abf15SRobert Mustacchi
353*d14abf15SRobert Mustacchi #define s_list_add_head(_s_list, _s_list_head) \
354*d14abf15SRobert Mustacchi if((_s_list)->cnt == 0) \
355*d14abf15SRobert Mustacchi { \
356*d14abf15SRobert Mustacchi *(_s_list) = *(_s_list_head); \
357*d14abf15SRobert Mustacchi } \
358*d14abf15SRobert Mustacchi else if((_s_list_head)->cnt) \
359*d14abf15SRobert Mustacchi { \
360*d14abf15SRobert Mustacchi (_s_list_head)->tail->next = (_s_list)->head; \
361*d14abf15SRobert Mustacchi (_s_list)->head = (_s_list_head)->head; \
362*d14abf15SRobert Mustacchi (_s_list)->cnt += (_s_list_head)->cnt; \
363*d14abf15SRobert Mustacchi }
364*d14abf15SRobert Mustacchi
365*d14abf15SRobert Mustacchi #define s_list_add_tail(_s_list, _s_list_tail) \
366*d14abf15SRobert Mustacchi if((_s_list)->cnt == 0) \
367*d14abf15SRobert Mustacchi { \
368*d14abf15SRobert Mustacchi *(_s_list) = *(_s_list_tail); \
369*d14abf15SRobert Mustacchi } \
370*d14abf15SRobert Mustacchi else if((_s_list_tail)->cnt) \
371*d14abf15SRobert Mustacchi { \
372*d14abf15SRobert Mustacchi (_s_list)->tail->next = (_s_list_tail)->head; \
373*d14abf15SRobert Mustacchi (_s_list)->tail = (_s_list_tail)->tail; \
374*d14abf15SRobert Mustacchi (_s_list)->cnt += (_s_list_tail)->cnt; \
375*d14abf15SRobert Mustacchi }
376*d14abf15SRobert Mustacchi
377*d14abf15SRobert Mustacchi #define s_list_split(_s_list, _s_list_head, _split_entry, _entry_cnt) \
378*d14abf15SRobert Mustacchi if ((_split_entry)->next == NULL) { \
379*d14abf15SRobert Mustacchi (_s_list_head)->head = (_s_list)->head; \
380*d14abf15SRobert Mustacchi (_s_list_head)->tail = _split_entry; \
381*d14abf15SRobert Mustacchi (_s_list_head)->cnt = _entry_cnt; \
382*d14abf15SRobert Mustacchi (_s_list)->head = NULL; \
383*d14abf15SRobert Mustacchi (_s_list)->tail = NULL; \
384*d14abf15SRobert Mustacchi (_s_list)->cnt = 0; \
385*d14abf15SRobert Mustacchi } else { \
386*d14abf15SRobert Mustacchi (_s_list_head)->head = (_s_list)->head; \
387*d14abf15SRobert Mustacchi (_s_list_head)->tail = _split_entry; \
388*d14abf15SRobert Mustacchi (_s_list_head)->cnt = (_entry_cnt); \
389*d14abf15SRobert Mustacchi (_s_list)->head = (_split_entry)->next; \
390*d14abf15SRobert Mustacchi (_s_list)->cnt = (_s_list)->cnt - (_entry_cnt); \
391*d14abf15SRobert Mustacchi (_split_entry)->next = NULL; \
392*d14abf15SRobert Mustacchi }
393*d14abf15SRobert Mustacchi
394*d14abf15SRobert Mustacchi #endif
395*d14abf15SRobert Mustacchi
396*d14abf15SRobert Mustacchi
397*d14abf15SRobert Mustacchi
398*d14abf15SRobert Mustacchi /*******************************************************************************
399*d14abf15SRobert Mustacchi * Double link list entry.
400*d14abf15SRobert Mustacchi ******************************************************************************/
401*d14abf15SRobert Mustacchi
402*d14abf15SRobert Mustacchi typedef struct _d_list_entry_t
403*d14abf15SRobert Mustacchi {
404*d14abf15SRobert Mustacchi struct _d_list_entry_t *next;
405*d14abf15SRobert Mustacchi struct _d_list_entry_t *prev;
406*d14abf15SRobert Mustacchi } d_list_entry_t;
407*d14abf15SRobert Mustacchi
408*d14abf15SRobert Mustacchi #define D_LINK_CAST(_p) ((d_list_entry_t *) (_p))
409*d14abf15SRobert Mustacchi
410*d14abf15SRobert Mustacchi
411*d14abf15SRobert Mustacchi typedef struct _d_list_t
412*d14abf15SRobert Mustacchi {
413*d14abf15SRobert Mustacchi d_list_entry_t *head;
414*d14abf15SRobert Mustacchi d_list_entry_t *tail;
415*d14abf15SRobert Mustacchi unsigned long cnt;
416*d14abf15SRobert Mustacchi } d_list_t;
417*d14abf15SRobert Mustacchi
418*d14abf15SRobert Mustacchi
419*d14abf15SRobert Mustacchi
420*d14abf15SRobert Mustacchi #ifdef _INLINE_LISTQ_CALLS
421*d14abf15SRobert Mustacchi
422*d14abf15SRobert Mustacchi
423*d14abf15SRobert Mustacchi __inline
424*d14abf15SRobert Mustacchi void
d_list_init(d_list_t * d_list,d_list_entry_t * head_entry,d_list_entry_t * tail_entry,unsigned long entry_cnt)425*d14abf15SRobert Mustacchi d_list_init(
426*d14abf15SRobert Mustacchi d_list_t *d_list,
427*d14abf15SRobert Mustacchi d_list_entry_t *head_entry,
428*d14abf15SRobert Mustacchi d_list_entry_t *tail_entry,
429*d14abf15SRobert Mustacchi unsigned long entry_cnt)
430*d14abf15SRobert Mustacchi {
431*d14abf15SRobert Mustacchi d_list->head = head_entry;
432*d14abf15SRobert Mustacchi d_list->tail = tail_entry;
433*d14abf15SRobert Mustacchi d_list->cnt = entry_cnt;
434*d14abf15SRobert Mustacchi }
435*d14abf15SRobert Mustacchi
436*d14abf15SRobert Mustacchi
437*d14abf15SRobert Mustacchi __inline
438*d14abf15SRobert Mustacchi void
d_list_clear(d_list_t * d_list)439*d14abf15SRobert Mustacchi d_list_clear(
440*d14abf15SRobert Mustacchi d_list_t *d_list)
441*d14abf15SRobert Mustacchi {
442*d14abf15SRobert Mustacchi d_list->head = (d_list_entry_t *) 0;
443*d14abf15SRobert Mustacchi d_list->tail = (d_list_entry_t *) 0;
444*d14abf15SRobert Mustacchi d_list->cnt = 0;
445*d14abf15SRobert Mustacchi }
446*d14abf15SRobert Mustacchi
447*d14abf15SRobert Mustacchi
448*d14abf15SRobert Mustacchi __inline
449*d14abf15SRobert Mustacchi void
d_list_push_head(d_list_t * d_list,d_list_entry_t * d_entry)450*d14abf15SRobert Mustacchi d_list_push_head(
451*d14abf15SRobert Mustacchi d_list_t *d_list,
452*d14abf15SRobert Mustacchi d_list_entry_t *d_entry)
453*d14abf15SRobert Mustacchi {
454*d14abf15SRobert Mustacchi d_entry->prev = (d_list_entry_t *) 0;
455*d14abf15SRobert Mustacchi d_entry->next = d_list->head;
456*d14abf15SRobert Mustacchi
457*d14abf15SRobert Mustacchi if(d_list->tail == (d_list_entry_t *) 0)
458*d14abf15SRobert Mustacchi {
459*d14abf15SRobert Mustacchi d_list->tail = d_entry;
460*d14abf15SRobert Mustacchi }
461*d14abf15SRobert Mustacchi else
462*d14abf15SRobert Mustacchi {
463*d14abf15SRobert Mustacchi d_list->head->prev = d_entry;
464*d14abf15SRobert Mustacchi }
465*d14abf15SRobert Mustacchi
466*d14abf15SRobert Mustacchi d_list->head = d_entry;
467*d14abf15SRobert Mustacchi
468*d14abf15SRobert Mustacchi d_list->cnt++;
469*d14abf15SRobert Mustacchi }
470*d14abf15SRobert Mustacchi
471*d14abf15SRobert Mustacchi
472*d14abf15SRobert Mustacchi __inline
473*d14abf15SRobert Mustacchi d_list_entry_t *
d_list_pop_head(d_list_t * d_list)474*d14abf15SRobert Mustacchi d_list_pop_head(
475*d14abf15SRobert Mustacchi d_list_t *d_list)
476*d14abf15SRobert Mustacchi {
477*d14abf15SRobert Mustacchi d_list_entry_t *d_entry;
478*d14abf15SRobert Mustacchi
479*d14abf15SRobert Mustacchi d_entry = d_list->head;
480*d14abf15SRobert Mustacchi if(d_list->head)
481*d14abf15SRobert Mustacchi {
482*d14abf15SRobert Mustacchi d_list->head = d_list->head->next;
483*d14abf15SRobert Mustacchi if(d_list->head)
484*d14abf15SRobert Mustacchi {
485*d14abf15SRobert Mustacchi d_list->head->prev = (d_list_entry_t *) 0;
486*d14abf15SRobert Mustacchi }
487*d14abf15SRobert Mustacchi else
488*d14abf15SRobert Mustacchi {
489*d14abf15SRobert Mustacchi d_list->tail = (d_list_entry_t *) 0;
490*d14abf15SRobert Mustacchi }
491*d14abf15SRobert Mustacchi
492*d14abf15SRobert Mustacchi d_list->cnt--;
493*d14abf15SRobert Mustacchi }
494*d14abf15SRobert Mustacchi
495*d14abf15SRobert Mustacchi return d_entry;
496*d14abf15SRobert Mustacchi }
497*d14abf15SRobert Mustacchi
498*d14abf15SRobert Mustacchi
499*d14abf15SRobert Mustacchi __inline
500*d14abf15SRobert Mustacchi void
d_list_push_tail(d_list_t * d_list,d_list_entry_t * d_entry)501*d14abf15SRobert Mustacchi d_list_push_tail(
502*d14abf15SRobert Mustacchi d_list_t *d_list,
503*d14abf15SRobert Mustacchi d_list_entry_t *d_entry)
504*d14abf15SRobert Mustacchi {
505*d14abf15SRobert Mustacchi d_entry->next = (d_list_entry_t *) 0;
506*d14abf15SRobert Mustacchi d_entry->prev = d_list->tail;
507*d14abf15SRobert Mustacchi
508*d14abf15SRobert Mustacchi if(d_list->tail)
509*d14abf15SRobert Mustacchi {
510*d14abf15SRobert Mustacchi d_list->tail->next = d_entry;
511*d14abf15SRobert Mustacchi }
512*d14abf15SRobert Mustacchi else
513*d14abf15SRobert Mustacchi {
514*d14abf15SRobert Mustacchi d_list->head = d_entry;
515*d14abf15SRobert Mustacchi }
516*d14abf15SRobert Mustacchi d_list->tail = d_entry;
517*d14abf15SRobert Mustacchi
518*d14abf15SRobert Mustacchi d_list->cnt++;
519*d14abf15SRobert Mustacchi }
520*d14abf15SRobert Mustacchi
521*d14abf15SRobert Mustacchi
522*d14abf15SRobert Mustacchi __inline
523*d14abf15SRobert Mustacchi d_list_entry_t *
d_list_pop_tail(d_list_t * d_list)524*d14abf15SRobert Mustacchi d_list_pop_tail(
525*d14abf15SRobert Mustacchi d_list_t *d_list)
526*d14abf15SRobert Mustacchi {
527*d14abf15SRobert Mustacchi d_list_entry_t *d_entry;
528*d14abf15SRobert Mustacchi
529*d14abf15SRobert Mustacchi d_entry = d_list->tail;
530*d14abf15SRobert Mustacchi
531*d14abf15SRobert Mustacchi if(d_list->tail)
532*d14abf15SRobert Mustacchi {
533*d14abf15SRobert Mustacchi d_list->tail = d_list->tail->prev;
534*d14abf15SRobert Mustacchi if(d_list->tail)
535*d14abf15SRobert Mustacchi {
536*d14abf15SRobert Mustacchi d_list->tail->next = (d_list_entry_t *) 0;
537*d14abf15SRobert Mustacchi }
538*d14abf15SRobert Mustacchi else
539*d14abf15SRobert Mustacchi {
540*d14abf15SRobert Mustacchi d_list->head = (d_list_entry_t *) 0;
541*d14abf15SRobert Mustacchi }
542*d14abf15SRobert Mustacchi
543*d14abf15SRobert Mustacchi d_list->cnt--;
544*d14abf15SRobert Mustacchi }
545*d14abf15SRobert Mustacchi
546*d14abf15SRobert Mustacchi return d_entry;
547*d14abf15SRobert Mustacchi }
548*d14abf15SRobert Mustacchi
549*d14abf15SRobert Mustacchi
550*d14abf15SRobert Mustacchi __inline
551*d14abf15SRobert Mustacchi d_list_entry_t *
d_list_peek_head(d_list_t * d_list)552*d14abf15SRobert Mustacchi d_list_peek_head(
553*d14abf15SRobert Mustacchi d_list_t *d_list)
554*d14abf15SRobert Mustacchi {
555*d14abf15SRobert Mustacchi return d_list->head;
556*d14abf15SRobert Mustacchi }
557*d14abf15SRobert Mustacchi
558*d14abf15SRobert Mustacchi
559*d14abf15SRobert Mustacchi __inline
560*d14abf15SRobert Mustacchi d_list_entry_t *
d_list_peek_tail(d_list_t * d_list)561*d14abf15SRobert Mustacchi d_list_peek_tail(
562*d14abf15SRobert Mustacchi d_list_t *d_list)
563*d14abf15SRobert Mustacchi {
564*d14abf15SRobert Mustacchi return d_list->tail;
565*d14abf15SRobert Mustacchi }
566*d14abf15SRobert Mustacchi
567*d14abf15SRobert Mustacchi
568*d14abf15SRobert Mustacchi __inline
569*d14abf15SRobert Mustacchi d_list_entry_t *
d_list_next_entry(d_list_entry_t * d_entry)570*d14abf15SRobert Mustacchi d_list_next_entry(
571*d14abf15SRobert Mustacchi d_list_entry_t *d_entry)
572*d14abf15SRobert Mustacchi {
573*d14abf15SRobert Mustacchi return d_entry->next;
574*d14abf15SRobert Mustacchi }
575*d14abf15SRobert Mustacchi
576*d14abf15SRobert Mustacchi
577*d14abf15SRobert Mustacchi __inline
578*d14abf15SRobert Mustacchi void
d_list_remove_entry(d_list_t * d_list,d_list_entry_t * d_entry)579*d14abf15SRobert Mustacchi d_list_remove_entry(
580*d14abf15SRobert Mustacchi d_list_t *d_list,
581*d14abf15SRobert Mustacchi d_list_entry_t *d_entry)
582*d14abf15SRobert Mustacchi {
583*d14abf15SRobert Mustacchi if(d_list->head == d_entry)
584*d14abf15SRobert Mustacchi {
585*d14abf15SRobert Mustacchi d_list_pop_head(d_list);
586*d14abf15SRobert Mustacchi }
587*d14abf15SRobert Mustacchi else if(d_list->tail == d_entry)
588*d14abf15SRobert Mustacchi {
589*d14abf15SRobert Mustacchi d_list_pop_tail(d_list);
590*d14abf15SRobert Mustacchi }
591*d14abf15SRobert Mustacchi else
592*d14abf15SRobert Mustacchi {
593*d14abf15SRobert Mustacchi d_entry->prev->next = d_entry->next;
594*d14abf15SRobert Mustacchi d_entry->next->prev = d_entry->prev;
595*d14abf15SRobert Mustacchi d_list->cnt--;
596*d14abf15SRobert Mustacchi }
597*d14abf15SRobert Mustacchi }
598*d14abf15SRobert Mustacchi
599*d14abf15SRobert Mustacchi __inline
600*d14abf15SRobert Mustacchi void
d_list_insert_entry(d_list_t * d_list,d_list_entry_t * d_entry_prev,d_list_entry_t * d_entry_next,d_list_entry_t * d_entry)601*d14abf15SRobert Mustacchi d_list_insert_entry(
602*d14abf15SRobert Mustacchi d_list_t *d_list,
603*d14abf15SRobert Mustacchi d_list_entry_t *d_entry_prev,
604*d14abf15SRobert Mustacchi d_list_entry_t *d_entry_next,
605*d14abf15SRobert Mustacchi d_list_entry_t *d_entry)
606*d14abf15SRobert Mustacchi {
607*d14abf15SRobert Mustacchi if (d_entry_prev == NULL)
608*d14abf15SRobert Mustacchi {
609*d14abf15SRobert Mustacchi d_list_push_head(d_list, d_entry);
610*d14abf15SRobert Mustacchi }
611*d14abf15SRobert Mustacchi else if (d_entry_next == NULL)
612*d14abf15SRobert Mustacchi {
613*d14abf15SRobert Mustacchi d_list_push_tail(d_list, d_entry);
614*d14abf15SRobert Mustacchi }
615*d14abf15SRobert Mustacchi else
616*d14abf15SRobert Mustacchi {
617*d14abf15SRobert Mustacchi d_entry->next = d_entry_next;
618*d14abf15SRobert Mustacchi d_entry->prev = d_entry_prev;
619*d14abf15SRobert Mustacchi d_entry_prev->next = d_entry;
620*d14abf15SRobert Mustacchi d_entry_next->prev = d_entry;
621*d14abf15SRobert Mustacchi d_list->cnt++;
622*d14abf15SRobert Mustacchi }
623*d14abf15SRobert Mustacchi }
624*d14abf15SRobert Mustacchi
625*d14abf15SRobert Mustacchi
626*d14abf15SRobert Mustacchi __inline
627*d14abf15SRobert Mustacchi d_list_entry_t *
d_list_prev_entry(d_list_entry_t * d_entry)628*d14abf15SRobert Mustacchi d_list_prev_entry(
629*d14abf15SRobert Mustacchi d_list_entry_t *d_entry)
630*d14abf15SRobert Mustacchi {
631*d14abf15SRobert Mustacchi return d_entry->prev;
632*d14abf15SRobert Mustacchi }
633*d14abf15SRobert Mustacchi
634*d14abf15SRobert Mustacchi
635*d14abf15SRobert Mustacchi __inline
636*d14abf15SRobert Mustacchi unsigned long
d_list_entry_cnt(d_list_t * d_list)637*d14abf15SRobert Mustacchi d_list_entry_cnt(
638*d14abf15SRobert Mustacchi d_list_t *d_list)
639*d14abf15SRobert Mustacchi {
640*d14abf15SRobert Mustacchi return d_list->cnt;
641*d14abf15SRobert Mustacchi }
642*d14abf15SRobert Mustacchi
643*d14abf15SRobert Mustacchi
644*d14abf15SRobert Mustacchi __inline
645*d14abf15SRobert Mustacchi char
d_list_is_empty(d_list_t * d_list)646*d14abf15SRobert Mustacchi d_list_is_empty(
647*d14abf15SRobert Mustacchi d_list_t *d_list)
648*d14abf15SRobert Mustacchi {
649*d14abf15SRobert Mustacchi return d_list->cnt == 0;
650*d14abf15SRobert Mustacchi }
651*d14abf15SRobert Mustacchi
652*d14abf15SRobert Mustacchi
653*d14abf15SRobert Mustacchi __inline
654*d14abf15SRobert Mustacchi void
d_list_add_head(d_list_t * d_list,d_list_t * d_list_head)655*d14abf15SRobert Mustacchi d_list_add_head(
656*d14abf15SRobert Mustacchi d_list_t *d_list,
657*d14abf15SRobert Mustacchi d_list_t *d_list_head)
658*d14abf15SRobert Mustacchi {
659*d14abf15SRobert Mustacchi d_list_head->tail->next = d_list->head;
660*d14abf15SRobert Mustacchi
661*d14abf15SRobert Mustacchi if(d_list->head)
662*d14abf15SRobert Mustacchi {
663*d14abf15SRobert Mustacchi d_list->head->prev = d_list_head->tail;
664*d14abf15SRobert Mustacchi }
665*d14abf15SRobert Mustacchi else
666*d14abf15SRobert Mustacchi {
667*d14abf15SRobert Mustacchi d_list->tail = d_list_head->tail;
668*d14abf15SRobert Mustacchi }
669*d14abf15SRobert Mustacchi d_list->head = d_list_head->head;
670*d14abf15SRobert Mustacchi
671*d14abf15SRobert Mustacchi d_list->cnt += d_list_head->cnt;
672*d14abf15SRobert Mustacchi }
673*d14abf15SRobert Mustacchi
674*d14abf15SRobert Mustacchi
675*d14abf15SRobert Mustacchi __inline
676*d14abf15SRobert Mustacchi void
d_list_add_tail(d_list_t * d_list,d_list_t * d_list_tail)677*d14abf15SRobert Mustacchi d_list_add_tail(
678*d14abf15SRobert Mustacchi d_list_t *d_list,
679*d14abf15SRobert Mustacchi d_list_t *d_list_tail)
680*d14abf15SRobert Mustacchi {
681*d14abf15SRobert Mustacchi d_list_tail->head->prev = d_list->tail;
682*d14abf15SRobert Mustacchi
683*d14abf15SRobert Mustacchi if(d_list->tail)
684*d14abf15SRobert Mustacchi {
685*d14abf15SRobert Mustacchi d_list->tail->next = d_list_tail->head;
686*d14abf15SRobert Mustacchi }
687*d14abf15SRobert Mustacchi else
688*d14abf15SRobert Mustacchi {
689*d14abf15SRobert Mustacchi d_list->head = d_list_tail->head;
690*d14abf15SRobert Mustacchi }
691*d14abf15SRobert Mustacchi d_list->tail = d_list_tail->tail;
692*d14abf15SRobert Mustacchi
693*d14abf15SRobert Mustacchi d_list->cnt += d_list_tail->cnt;
694*d14abf15SRobert Mustacchi }
695*d14abf15SRobert Mustacchi
696*d14abf15SRobert Mustacchi
697*d14abf15SRobert Mustacchi #else
698*d14abf15SRobert Mustacchi
699*d14abf15SRobert Mustacchi
700*d14abf15SRobert Mustacchi #define d_list_init(_d_list, _head_entry, _tail_entry, _entry_cnt) \
701*d14abf15SRobert Mustacchi (_d_list)->head = (_head_entry); \
702*d14abf15SRobert Mustacchi (_d_list)->tail = (_tail_entry); \
703*d14abf15SRobert Mustacchi (_d_list)->cnt = (_entry_cnt)
704*d14abf15SRobert Mustacchi
705*d14abf15SRobert Mustacchi
706*d14abf15SRobert Mustacchi #define d_list_clear(_d_list) \
707*d14abf15SRobert Mustacchi (_d_list)->head = (d_list_entry_t *) 0; \
708*d14abf15SRobert Mustacchi (_d_list)->tail = (d_list_entry_t *) 0; \
709*d14abf15SRobert Mustacchi (_d_list)->cnt = 0
710*d14abf15SRobert Mustacchi
711*d14abf15SRobert Mustacchi
712*d14abf15SRobert Mustacchi #define d_list_push_head(_d_list, _d_entry) \
713*d14abf15SRobert Mustacchi (_d_entry)->prev = (d_list_entry_t *) 0; \
714*d14abf15SRobert Mustacchi (_d_entry)->next = (_d_list)->head; \
715*d14abf15SRobert Mustacchi if((_d_list)->tail == (d_list_entry_t *) 0) \
716*d14abf15SRobert Mustacchi { \
717*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_entry); \
718*d14abf15SRobert Mustacchi } \
719*d14abf15SRobert Mustacchi else \
720*d14abf15SRobert Mustacchi { \
721*d14abf15SRobert Mustacchi (_d_list)->head->prev = (_d_entry); \
722*d14abf15SRobert Mustacchi } \
723*d14abf15SRobert Mustacchi (_d_list)->head = (_d_entry); \
724*d14abf15SRobert Mustacchi (_d_list)->cnt++
725*d14abf15SRobert Mustacchi
726*d14abf15SRobert Mustacchi
727*d14abf15SRobert Mustacchi #define d_list_pop_head(_d_list) \
728*d14abf15SRobert Mustacchi (_d_list)->head; \
729*d14abf15SRobert Mustacchi if((_d_list)->head) \
730*d14abf15SRobert Mustacchi { \
731*d14abf15SRobert Mustacchi (_d_list)->head = (_d_list)->head->next; \
732*d14abf15SRobert Mustacchi if((_d_list)->head) \
733*d14abf15SRobert Mustacchi { \
734*d14abf15SRobert Mustacchi (_d_list)->head->prev = (d_list_entry_t *) 0; \
735*d14abf15SRobert Mustacchi } \
736*d14abf15SRobert Mustacchi else \
737*d14abf15SRobert Mustacchi { \
738*d14abf15SRobert Mustacchi (_d_list)->tail = (d_list_entry_t *) 0; \
739*d14abf15SRobert Mustacchi } \
740*d14abf15SRobert Mustacchi (_d_list)->cnt--; \
741*d14abf15SRobert Mustacchi }
742*d14abf15SRobert Mustacchi
743*d14abf15SRobert Mustacchi
744*d14abf15SRobert Mustacchi #define d_list_push_tail(_d_list, _d_entry) \
745*d14abf15SRobert Mustacchi (_d_entry)->next = (d_list_entry_t *) 0; \
746*d14abf15SRobert Mustacchi (_d_entry)->prev = (_d_list)->tail; \
747*d14abf15SRobert Mustacchi if((_d_list)->tail) \
748*d14abf15SRobert Mustacchi { \
749*d14abf15SRobert Mustacchi (_d_list)->tail->next = (_d_entry); \
750*d14abf15SRobert Mustacchi } \
751*d14abf15SRobert Mustacchi else \
752*d14abf15SRobert Mustacchi { \
753*d14abf15SRobert Mustacchi (_d_list)->head = (_d_entry); \
754*d14abf15SRobert Mustacchi } \
755*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_entry); \
756*d14abf15SRobert Mustacchi (_d_list)->cnt++
757*d14abf15SRobert Mustacchi
758*d14abf15SRobert Mustacchi
759*d14abf15SRobert Mustacchi #define d_list_pop_tail(_d_list) \
760*d14abf15SRobert Mustacchi (_d_list)->tail; \
761*d14abf15SRobert Mustacchi if((_d_list)->tail) \
762*d14abf15SRobert Mustacchi { \
763*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_list)->tail->prev; \
764*d14abf15SRobert Mustacchi if((_d_list)->tail) \
765*d14abf15SRobert Mustacchi { \
766*d14abf15SRobert Mustacchi (_d_list)->tail->next = (d_list_entry_t *) 0; \
767*d14abf15SRobert Mustacchi } \
768*d14abf15SRobert Mustacchi else \
769*d14abf15SRobert Mustacchi { \
770*d14abf15SRobert Mustacchi (_d_list)->head = (d_list_entry_t *) 0; \
771*d14abf15SRobert Mustacchi } \
772*d14abf15SRobert Mustacchi (_d_list)->cnt--; \
773*d14abf15SRobert Mustacchi }
774*d14abf15SRobert Mustacchi
775*d14abf15SRobert Mustacchi
776*d14abf15SRobert Mustacchi #define d_list_peek_head(_d_list) ((_d_list)->head)
777*d14abf15SRobert Mustacchi
778*d14abf15SRobert Mustacchi
779*d14abf15SRobert Mustacchi #define d_list_peek_tail(_d_list) ((_d_list)->tail)
780*d14abf15SRobert Mustacchi
781*d14abf15SRobert Mustacchi
782*d14abf15SRobert Mustacchi #define d_list_next_entry(_d_entry) ((_d_entry)->next)
783*d14abf15SRobert Mustacchi
784*d14abf15SRobert Mustacchi #define d_list_insert_entry(_d_list, _d_entry_prev, _d_entry_next, _d_entry) \
785*d14abf15SRobert Mustacchi if (_d_entry_prev == NULL ) \
786*d14abf15SRobert Mustacchi { \
787*d14abf15SRobert Mustacchi (_d_entry)->prev = (d_list_entry_t *) 0; \
788*d14abf15SRobert Mustacchi (_d_entry)->next = (_d_list)->head; \
789*d14abf15SRobert Mustacchi if((_d_list)->tail == (d_list_entry_t *) 0) \
790*d14abf15SRobert Mustacchi { \
791*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_entry); \
792*d14abf15SRobert Mustacchi } \
793*d14abf15SRobert Mustacchi (_d_list)->head = (_d_entry); \
794*d14abf15SRobert Mustacchi (_d_list)->cnt++; \
795*d14abf15SRobert Mustacchi } \
796*d14abf15SRobert Mustacchi else if (_d_entry_next == NULL ) \
797*d14abf15SRobert Mustacchi { \
798*d14abf15SRobert Mustacchi (_d_entry)->next = (d_list_entry_t *) 0; \
799*d14abf15SRobert Mustacchi (_d_entry)->prev = (_d_list)->tail; \
800*d14abf15SRobert Mustacchi if((_d_list)->tail) \
801*d14abf15SRobert Mustacchi { \
802*d14abf15SRobert Mustacchi (_d_list)->tail->next = (_d_entry); \
803*d14abf15SRobert Mustacchi } \
804*d14abf15SRobert Mustacchi else \
805*d14abf15SRobert Mustacchi { \
806*d14abf15SRobert Mustacchi (_d_list)->head = (_d_entry); \
807*d14abf15SRobert Mustacchi } \
808*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_entry); \
809*d14abf15SRobert Mustacchi (_d_list)->cnt++; \
810*d14abf15SRobert Mustacchi } \
811*d14abf15SRobert Mustacchi else \
812*d14abf15SRobert Mustacchi { \
813*d14abf15SRobert Mustacchi (_d_entry)->next = (_d_entry_next); \
814*d14abf15SRobert Mustacchi (_d_entry)->prev = (_d_entry_prev); \
815*d14abf15SRobert Mustacchi (_d_entry_prev)->next = (_d_entry); \
816*d14abf15SRobert Mustacchi (_d_entry_next)->prev = (_d_entry); \
817*d14abf15SRobert Mustacchi (_d_list)->cnt++; \
818*d14abf15SRobert Mustacchi }
819*d14abf15SRobert Mustacchi
820*d14abf15SRobert Mustacchi #define d_list_remove_entry(_d_list, _d_entry) \
821*d14abf15SRobert Mustacchi if((_d_list)->head == (_d_entry)) \
822*d14abf15SRobert Mustacchi { \
823*d14abf15SRobert Mustacchi if((_d_list)->head) \
824*d14abf15SRobert Mustacchi { \
825*d14abf15SRobert Mustacchi (_d_list)->head = (_d_list)->head->next; \
826*d14abf15SRobert Mustacchi if((_d_list)->head) \
827*d14abf15SRobert Mustacchi { \
828*d14abf15SRobert Mustacchi (_d_list)->head->prev = (d_list_entry_t *) 0; \
829*d14abf15SRobert Mustacchi } \
830*d14abf15SRobert Mustacchi else \
831*d14abf15SRobert Mustacchi { \
832*d14abf15SRobert Mustacchi (_d_list)->tail = (d_list_entry_t *) 0; \
833*d14abf15SRobert Mustacchi } \
834*d14abf15SRobert Mustacchi (_d_list)->cnt--; \
835*d14abf15SRobert Mustacchi } \
836*d14abf15SRobert Mustacchi } \
837*d14abf15SRobert Mustacchi else if((_d_list)->tail == (_d_entry)) \
838*d14abf15SRobert Mustacchi { \
839*d14abf15SRobert Mustacchi if((_d_list)->tail) \
840*d14abf15SRobert Mustacchi { \
841*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_list)->tail->prev; \
842*d14abf15SRobert Mustacchi if((_d_list)->tail) \
843*d14abf15SRobert Mustacchi { \
844*d14abf15SRobert Mustacchi (_d_list)->tail->next = (d_list_entry_t *) 0; \
845*d14abf15SRobert Mustacchi } \
846*d14abf15SRobert Mustacchi else \
847*d14abf15SRobert Mustacchi { \
848*d14abf15SRobert Mustacchi (_d_list)->head = (d_list_entry_t *) 0; \
849*d14abf15SRobert Mustacchi } \
850*d14abf15SRobert Mustacchi (_d_list)->cnt--; \
851*d14abf15SRobert Mustacchi } \
852*d14abf15SRobert Mustacchi } \
853*d14abf15SRobert Mustacchi else \
854*d14abf15SRobert Mustacchi { \
855*d14abf15SRobert Mustacchi (_d_entry)->prev->next = (_d_entry)->next; \
856*d14abf15SRobert Mustacchi (_d_entry)->next->prev = (_d_entry)->prev; \
857*d14abf15SRobert Mustacchi (_d_list)->cnt--; \
858*d14abf15SRobert Mustacchi }
859*d14abf15SRobert Mustacchi
860*d14abf15SRobert Mustacchi
861*d14abf15SRobert Mustacchi #define d_list_prev_entry(_d_entry) ((_d_entry)->prev)
862*d14abf15SRobert Mustacchi
863*d14abf15SRobert Mustacchi
864*d14abf15SRobert Mustacchi #define d_list_entry_cnt(_d_list) ((_d_list)->cnt)
865*d14abf15SRobert Mustacchi
866*d14abf15SRobert Mustacchi
867*d14abf15SRobert Mustacchi #define d_list_is_empty(_d_list) ((_d_list)->cnt == 0)
868*d14abf15SRobert Mustacchi
869*d14abf15SRobert Mustacchi
870*d14abf15SRobert Mustacchi #define d_list_add_head(_d_list, _d_list_head) \
871*d14abf15SRobert Mustacchi (_d_list_head)->tail->next = (_d_list)->head; \
872*d14abf15SRobert Mustacchi if((_d_list)->head) \
873*d14abf15SRobert Mustacchi { \
874*d14abf15SRobert Mustacchi (_d_list)->head->prev = (_d_list_head)->tail; \
875*d14abf15SRobert Mustacchi } \
876*d14abf15SRobert Mustacchi else \
877*d14abf15SRobert Mustacchi { \
878*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_list_head)->tail; \
879*d14abf15SRobert Mustacchi } \
880*d14abf15SRobert Mustacchi (_d_list)->head = (_d_list_head)->head; \
881*d14abf15SRobert Mustacchi (_d_list)->cnt += (_d_list_head)->cnt
882*d14abf15SRobert Mustacchi
883*d14abf15SRobert Mustacchi
884*d14abf15SRobert Mustacchi #define d_list_add_tail(_d_list, _d_list_tail) \
885*d14abf15SRobert Mustacchi (_d_list_tail)->head->prev = (_d_list)->tail; \
886*d14abf15SRobert Mustacchi if((_d_list)->tail) \
887*d14abf15SRobert Mustacchi { \
888*d14abf15SRobert Mustacchi (_d_list)->tail->next = (_d_list_tail)->head; \
889*d14abf15SRobert Mustacchi } \
890*d14abf15SRobert Mustacchi else \
891*d14abf15SRobert Mustacchi { \
892*d14abf15SRobert Mustacchi (_d_list)->head = (_d_list_tail)->head; \
893*d14abf15SRobert Mustacchi } \
894*d14abf15SRobert Mustacchi (_d_list)->tail = (_d_list_tail)->tail; \
895*d14abf15SRobert Mustacchi (_d_list)->cnt += (_d_list_tail)->cnt
896*d14abf15SRobert Mustacchi
897*d14abf15SRobert Mustacchi
898*d14abf15SRobert Mustacchi #endif
899*d14abf15SRobert Mustacchi
900*d14abf15SRobert Mustacchi
901*d14abf15SRobert Mustacchi
902*d14abf15SRobert Mustacchi /*******************************************************************************
903*d14abf15SRobert Mustacchi * Array list.
904*d14abf15SRobert Mustacchi ******************************************************************************/
905*d14abf15SRobert Mustacchi
906*d14abf15SRobert Mustacchi typedef void *q_list_entry_t;
907*d14abf15SRobert Mustacchi
908*d14abf15SRobert Mustacchi typedef struct _q_list_t
909*d14abf15SRobert Mustacchi {
910*d14abf15SRobert Mustacchi q_list_entry_t *head;
911*d14abf15SRobert Mustacchi q_list_entry_t *tail;
912*d14abf15SRobert Mustacchi unsigned long cnt;
913*d14abf15SRobert Mustacchi
914*d14abf15SRobert Mustacchi unsigned long max_cnt;
915*d14abf15SRobert Mustacchi q_list_entry_t *first_entry_addr;
916*d14abf15SRobert Mustacchi q_list_entry_t *last_entry_addr;
917*d14abf15SRobert Mustacchi } q_list_t;
918*d14abf15SRobert Mustacchi
919*d14abf15SRobert Mustacchi
920*d14abf15SRobert Mustacchi
921*d14abf15SRobert Mustacchi #ifdef _INLINE_LISTQ_CALLS
922*d14abf15SRobert Mustacchi
923*d14abf15SRobert Mustacchi
924*d14abf15SRobert Mustacchi __inline
925*d14abf15SRobert Mustacchi void
q_list_init(q_list_t * q_list,q_list_entry_t q_list_arr[],unsigned long max_cnt)926*d14abf15SRobert Mustacchi q_list_init(
927*d14abf15SRobert Mustacchi q_list_t *q_list,
928*d14abf15SRobert Mustacchi q_list_entry_t q_list_arr[],
929*d14abf15SRobert Mustacchi unsigned long max_cnt)
930*d14abf15SRobert Mustacchi {
931*d14abf15SRobert Mustacchi q_list->max_cnt = max_cnt;
932*d14abf15SRobert Mustacchi q_list->first_entry_addr = q_list_arr;
933*d14abf15SRobert Mustacchi q_list->last_entry_addr = q_list_arr + (max_cnt-1);
934*d14abf15SRobert Mustacchi
935*d14abf15SRobert Mustacchi q_list->head = q_list->first_entry_addr;
936*d14abf15SRobert Mustacchi q_list->tail = q_list->first_entry_addr;
937*d14abf15SRobert Mustacchi q_list->cnt = 0;
938*d14abf15SRobert Mustacchi }
939*d14abf15SRobert Mustacchi
940*d14abf15SRobert Mustacchi
941*d14abf15SRobert Mustacchi __inline
942*d14abf15SRobert Mustacchi void
q_list_clear(q_list_t * q_list)943*d14abf15SRobert Mustacchi q_list_clear(
944*d14abf15SRobert Mustacchi q_list_t *q_list)
945*d14abf15SRobert Mustacchi {
946*d14abf15SRobert Mustacchi q_list->head = q_list->first_entry_addr;
947*d14abf15SRobert Mustacchi q_list->tail = q_list->first_entry_addr;
948*d14abf15SRobert Mustacchi q_list->cnt = 0;
949*d14abf15SRobert Mustacchi }
950*d14abf15SRobert Mustacchi
951*d14abf15SRobert Mustacchi
952*d14abf15SRobert Mustacchi __inline
953*d14abf15SRobert Mustacchi void
q_list_push_head(q_list_t * q_list,q_list_entry_t q_entry)954*d14abf15SRobert Mustacchi q_list_push_head(
955*d14abf15SRobert Mustacchi q_list_t *q_list,
956*d14abf15SRobert Mustacchi q_list_entry_t q_entry)
957*d14abf15SRobert Mustacchi {
958*d14abf15SRobert Mustacchi if(q_list->cnt < q_list->max_cnt)
959*d14abf15SRobert Mustacchi {
960*d14abf15SRobert Mustacchi if(q_list->head == q_list->first_entry_addr)
961*d14abf15SRobert Mustacchi {
962*d14abf15SRobert Mustacchi q_list->head = q_list->last_entry_addr;
963*d14abf15SRobert Mustacchi }
964*d14abf15SRobert Mustacchi else
965*d14abf15SRobert Mustacchi {
966*d14abf15SRobert Mustacchi q_list->head--;
967*d14abf15SRobert Mustacchi }
968*d14abf15SRobert Mustacchi
969*d14abf15SRobert Mustacchi *(q_list->head) = q_entry;
970*d14abf15SRobert Mustacchi q_list->cnt++;
971*d14abf15SRobert Mustacchi }
972*d14abf15SRobert Mustacchi }
973*d14abf15SRobert Mustacchi
974*d14abf15SRobert Mustacchi
975*d14abf15SRobert Mustacchi __inline
976*d14abf15SRobert Mustacchi q_list_entry_t
q_list_pop_head(q_list_t * q_list)977*d14abf15SRobert Mustacchi q_list_pop_head(
978*d14abf15SRobert Mustacchi q_list_t *q_list)
979*d14abf15SRobert Mustacchi {
980*d14abf15SRobert Mustacchi q_list_entry_t q_entry;
981*d14abf15SRobert Mustacchi
982*d14abf15SRobert Mustacchi q_entry = q_list->cnt ? *q_list->head : (q_list_entry_t *) 0;
983*d14abf15SRobert Mustacchi if(q_list->cnt)
984*d14abf15SRobert Mustacchi {
985*d14abf15SRobert Mustacchi if(q_list->head == q_list->last_entry_addr)
986*d14abf15SRobert Mustacchi {
987*d14abf15SRobert Mustacchi q_list->head = q_list->first_entry_addr;
988*d14abf15SRobert Mustacchi }
989*d14abf15SRobert Mustacchi else
990*d14abf15SRobert Mustacchi {
991*d14abf15SRobert Mustacchi q_list->head++;
992*d14abf15SRobert Mustacchi }
993*d14abf15SRobert Mustacchi
994*d14abf15SRobert Mustacchi q_list->cnt--;
995*d14abf15SRobert Mustacchi }
996*d14abf15SRobert Mustacchi
997*d14abf15SRobert Mustacchi return q_entry;
998*d14abf15SRobert Mustacchi }
999*d14abf15SRobert Mustacchi
1000*d14abf15SRobert Mustacchi
1001*d14abf15SRobert Mustacchi __inline
1002*d14abf15SRobert Mustacchi void
q_list_push_tail(q_list_t * q_list,q_list_entry_t q_entry)1003*d14abf15SRobert Mustacchi q_list_push_tail(
1004*d14abf15SRobert Mustacchi q_list_t *q_list,
1005*d14abf15SRobert Mustacchi q_list_entry_t q_entry)
1006*d14abf15SRobert Mustacchi {
1007*d14abf15SRobert Mustacchi if(q_list->cnt < q_list->max_cnt)
1008*d14abf15SRobert Mustacchi {
1009*d14abf15SRobert Mustacchi *q_list->tail = q_entry;
1010*d14abf15SRobert Mustacchi if(q_list->tail == q_list->last_entry_addr)
1011*d14abf15SRobert Mustacchi {
1012*d14abf15SRobert Mustacchi q_list->tail = q_list->first_entry_addr;
1013*d14abf15SRobert Mustacchi }
1014*d14abf15SRobert Mustacchi else
1015*d14abf15SRobert Mustacchi {
1016*d14abf15SRobert Mustacchi q_list->tail++;
1017*d14abf15SRobert Mustacchi }
1018*d14abf15SRobert Mustacchi
1019*d14abf15SRobert Mustacchi q_list->cnt++;
1020*d14abf15SRobert Mustacchi }
1021*d14abf15SRobert Mustacchi }
1022*d14abf15SRobert Mustacchi
1023*d14abf15SRobert Mustacchi
1024*d14abf15SRobert Mustacchi __inline
1025*d14abf15SRobert Mustacchi q_list_entry_t
q_list_pop_tail(q_list_t * q_list)1026*d14abf15SRobert Mustacchi q_list_pop_tail(
1027*d14abf15SRobert Mustacchi q_list_t *q_list)
1028*d14abf15SRobert Mustacchi {
1029*d14abf15SRobert Mustacchi q_list_entry_t q_entry;
1030*d14abf15SRobert Mustacchi
1031*d14abf15SRobert Mustacchi q_entry = q_list->cnt ?
1032*d14abf15SRobert Mustacchi (q_list->tail == q_list->first_entry_addr ?
1033*d14abf15SRobert Mustacchi *q_list->last_entry_addr : *(q_list->tail-1)) :
1034*d14abf15SRobert Mustacchi (q_list_entry_t *) 0;
1035*d14abf15SRobert Mustacchi
1036*d14abf15SRobert Mustacchi if(q_list->cnt)
1037*d14abf15SRobert Mustacchi {
1038*d14abf15SRobert Mustacchi if(q_list->tail == q_list->first_entry_addr)
1039*d14abf15SRobert Mustacchi {
1040*d14abf15SRobert Mustacchi q_list->tail = q_list->last_entry_addr;
1041*d14abf15SRobert Mustacchi }
1042*d14abf15SRobert Mustacchi else
1043*d14abf15SRobert Mustacchi {
1044*d14abf15SRobert Mustacchi q_list->tail--;
1045*d14abf15SRobert Mustacchi }
1046*d14abf15SRobert Mustacchi
1047*d14abf15SRobert Mustacchi q_list->cnt--;
1048*d14abf15SRobert Mustacchi }
1049*d14abf15SRobert Mustacchi
1050*d14abf15SRobert Mustacchi return q_entry;
1051*d14abf15SRobert Mustacchi }
1052*d14abf15SRobert Mustacchi
1053*d14abf15SRobert Mustacchi
1054*d14abf15SRobert Mustacchi __inline
1055*d14abf15SRobert Mustacchi q_list_entry_t
q_list_peek_head(q_list_t * q_list)1056*d14abf15SRobert Mustacchi q_list_peek_head(
1057*d14abf15SRobert Mustacchi q_list_t *q_list)
1058*d14abf15SRobert Mustacchi {
1059*d14abf15SRobert Mustacchi q_list_entry_t q_entry;
1060*d14abf15SRobert Mustacchi
1061*d14abf15SRobert Mustacchi q_entry = q_list->cnt ? *q_list->head : (q_list_entry_t *) 0;
1062*d14abf15SRobert Mustacchi
1063*d14abf15SRobert Mustacchi return q_entry;
1064*d14abf15SRobert Mustacchi }
1065*d14abf15SRobert Mustacchi
1066*d14abf15SRobert Mustacchi
1067*d14abf15SRobert Mustacchi __inline
1068*d14abf15SRobert Mustacchi q_list_entry_t
q_list_peek_tail(q_list_t * q_list)1069*d14abf15SRobert Mustacchi q_list_peek_tail(
1070*d14abf15SRobert Mustacchi q_list_t *q_list)
1071*d14abf15SRobert Mustacchi {
1072*d14abf15SRobert Mustacchi q_list_entry_t q_entry;
1073*d14abf15SRobert Mustacchi
1074*d14abf15SRobert Mustacchi q_entry = q_list->cnt ?
1075*d14abf15SRobert Mustacchi (q_list->tail == q_list->first_entry_addr ?
1076*d14abf15SRobert Mustacchi *q_list->last_entry_addr : *(q_list->tail - 1)) :
1077*d14abf15SRobert Mustacchi (q_list_entry_t *) 0;
1078*d14abf15SRobert Mustacchi
1079*d14abf15SRobert Mustacchi return q_entry;
1080*d14abf15SRobert Mustacchi }
1081*d14abf15SRobert Mustacchi
1082*d14abf15SRobert Mustacchi
1083*d14abf15SRobert Mustacchi __inline
1084*d14abf15SRobert Mustacchi unsigned long
q_list_entry_cnt(q_list_t * q_list)1085*d14abf15SRobert Mustacchi q_list_entry_cnt(
1086*d14abf15SRobert Mustacchi q_list_t *q_list)
1087*d14abf15SRobert Mustacchi {
1088*d14abf15SRobert Mustacchi return q_list->cnt;
1089*d14abf15SRobert Mustacchi }
1090*d14abf15SRobert Mustacchi
1091*d14abf15SRobert Mustacchi
1092*d14abf15SRobert Mustacchi __inline
1093*d14abf15SRobert Mustacchi char
q_list_is_empty(q_list_t * q_list)1094*d14abf15SRobert Mustacchi q_list_is_empty(
1095*d14abf15SRobert Mustacchi q_list_t *q_list)
1096*d14abf15SRobert Mustacchi {
1097*d14abf15SRobert Mustacchi return q_list->cnt == 0;
1098*d14abf15SRobert Mustacchi }
1099*d14abf15SRobert Mustacchi
1100*d14abf15SRobert Mustacchi
1101*d14abf15SRobert Mustacchi __inline
1102*d14abf15SRobert Mustacchi char
q_list_is_full(q_list_t * q_list)1103*d14abf15SRobert Mustacchi q_list_is_full(
1104*d14abf15SRobert Mustacchi q_list_t *q_list)
1105*d14abf15SRobert Mustacchi {
1106*d14abf15SRobert Mustacchi return q_list->cnt == q_list->max_cnt;
1107*d14abf15SRobert Mustacchi }
1108*d14abf15SRobert Mustacchi
1109*d14abf15SRobert Mustacchi
1110*d14abf15SRobert Mustacchi #else
1111*d14abf15SRobert Mustacchi
1112*d14abf15SRobert Mustacchi
1113*d14abf15SRobert Mustacchi #define q_list_init(_q_list, _q_list_arr, _max_cnt) \
1114*d14abf15SRobert Mustacchi (_q_list)->max_cnt = (_max_cnt); \
1115*d14abf15SRobert Mustacchi (_q_list)->first_entry_addr = (_q_list_arr); \
1116*d14abf15SRobert Mustacchi (_q_list)->last_entry_addr = (_q_list_arr) + ((_max_cnt) - 1); \
1117*d14abf15SRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
1118*d14abf15SRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
1119*d14abf15SRobert Mustacchi (_q_list)->cnt = 0
1120*d14abf15SRobert Mustacchi
1121*d14abf15SRobert Mustacchi
1122*d14abf15SRobert Mustacchi #define q_list_clear(_q_list) \
1123*d14abf15SRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
1124*d14abf15SRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
1125*d14abf15SRobert Mustacchi (_q_list)->cnt = 0
1126*d14abf15SRobert Mustacchi
1127*d14abf15SRobert Mustacchi
1128*d14abf15SRobert Mustacchi #define q_list_push_head(_q_list, _q_entry) \
1129*d14abf15SRobert Mustacchi if((_q_list)->cnt < (_q_list)->max_cnt) \
1130*d14abf15SRobert Mustacchi { \
1131*d14abf15SRobert Mustacchi if((_q_list)->head == (_q_list)->first_entry_addr) \
1132*d14abf15SRobert Mustacchi { \
1133*d14abf15SRobert Mustacchi (_q_list)->head = (_q_list)->last_entry_addr; \
1134*d14abf15SRobert Mustacchi } \
1135*d14abf15SRobert Mustacchi else \
1136*d14abf15SRobert Mustacchi { \
1137*d14abf15SRobert Mustacchi (_q_list)->head--; \
1138*d14abf15SRobert Mustacchi } \
1139*d14abf15SRobert Mustacchi *((_q_list)->head) = (_q_entry); \
1140*d14abf15SRobert Mustacchi (_q_list)->cnt++; \
1141*d14abf15SRobert Mustacchi }
1142*d14abf15SRobert Mustacchi
1143*d14abf15SRobert Mustacchi
1144*d14abf15SRobert Mustacchi #define q_list_pop_head(_q_list) \
1145*d14abf15SRobert Mustacchi (_q_list)->cnt ? *(_q_list)->head : (q_list_entry_t *) 0; \
1146*d14abf15SRobert Mustacchi if((_q_list)->cnt) \
1147*d14abf15SRobert Mustacchi { \
1148*d14abf15SRobert Mustacchi if((_q_list)->head == (_q_list)->last_entry_addr) \
1149*d14abf15SRobert Mustacchi { \
1150*d14abf15SRobert Mustacchi (_q_list)->head = (_q_list)->first_entry_addr; \
1151*d14abf15SRobert Mustacchi } \
1152*d14abf15SRobert Mustacchi else \
1153*d14abf15SRobert Mustacchi { \
1154*d14abf15SRobert Mustacchi (_q_list)->head++; \
1155*d14abf15SRobert Mustacchi } \
1156*d14abf15SRobert Mustacchi (_q_list)->cnt--; \
1157*d14abf15SRobert Mustacchi }
1158*d14abf15SRobert Mustacchi
1159*d14abf15SRobert Mustacchi
1160*d14abf15SRobert Mustacchi #define q_list_push_tail(_q_list, _q_entry) \
1161*d14abf15SRobert Mustacchi if((_q_list)->cnt < (_q_list)->max_cnt) \
1162*d14abf15SRobert Mustacchi { \
1163*d14abf15SRobert Mustacchi *(_q_list)->tail = (_q_entry); \
1164*d14abf15SRobert Mustacchi if((_q_list)->tail == (_q_list)->last_entry_addr) \
1165*d14abf15SRobert Mustacchi { \
1166*d14abf15SRobert Mustacchi (_q_list)->tail = (_q_list)->first_entry_addr; \
1167*d14abf15SRobert Mustacchi } \
1168*d14abf15SRobert Mustacchi else \
1169*d14abf15SRobert Mustacchi { \
1170*d14abf15SRobert Mustacchi (_q_list)->tail++; \
1171*d14abf15SRobert Mustacchi } \
1172*d14abf15SRobert Mustacchi (_q_list)->cnt++; \
1173*d14abf15SRobert Mustacchi }
1174*d14abf15SRobert Mustacchi
1175*d14abf15SRobert Mustacchi
1176*d14abf15SRobert Mustacchi #define q_list_pop_tail(_q_list) \
1177*d14abf15SRobert Mustacchi (_q_list)->cnt ? ((_q_list)->tail == (_q_list)->first_entry_addr ? \
1178*d14abf15SRobert Mustacchi *(_q_list)->last_entry_addr : *((_q_list)->tail-1)) : \
1179*d14abf15SRobert Mustacchi (q_list_entry_t *) 0; \
1180*d14abf15SRobert Mustacchi if((_q_list)->cnt) \
1181*d14abf15SRobert Mustacchi { \
1182*d14abf15SRobert Mustacchi if((_q_list)->tail == (_q_list)->first_entry_addr) \
1183*d14abf15SRobert Mustacchi { \
1184*d14abf15SRobert Mustacchi (_q_list)->tail = (_q_list)->last_entry_addr; \
1185*d14abf15SRobert Mustacchi } \
1186*d14abf15SRobert Mustacchi else \
1187*d14abf15SRobert Mustacchi { \
1188*d14abf15SRobert Mustacchi (_q_list)->tail--; \
1189*d14abf15SRobert Mustacchi } \
1190*d14abf15SRobert Mustacchi (_q_list)->cnt--; \
1191*d14abf15SRobert Mustacchi } \
1192*d14abf15SRobert Mustacchi
1193*d14abf15SRobert Mustacchi
1194*d14abf15SRobert Mustacchi #define q_list_peek_head(_q_list) \
1195*d14abf15SRobert Mustacchi ((_q_list)->cnt ? *(_q_list)->head : (q_list_entry_t *) 0)
1196*d14abf15SRobert Mustacchi
1197*d14abf15SRobert Mustacchi
1198*d14abf15SRobert Mustacchi #define q_list_peek_tail(_q_list) \
1199*d14abf15SRobert Mustacchi ((_q_list)->cnt ? ((_q_list)->tail == (_q_list)->first_entry_addr ? \
1200*d14abf15SRobert Mustacchi *(_q_list)->last_entry_addr : *((_q_list)->tail - 1)) : \
1201*d14abf15SRobert Mustacchi (q_list_entry_t *) 0)
1202*d14abf15SRobert Mustacchi
1203*d14abf15SRobert Mustacchi
1204*d14abf15SRobert Mustacchi #define q_list_entry_cnt(_q_list) ((_q_list)->cnt)
1205*d14abf15SRobert Mustacchi
1206*d14abf15SRobert Mustacchi
1207*d14abf15SRobert Mustacchi #define q_list_is_empty(_q_list) ((_q_list)->cnt == 0)
1208*d14abf15SRobert Mustacchi
1209*d14abf15SRobert Mustacchi
1210*d14abf15SRobert Mustacchi #define q_list_is_full(_q_list) ((_q_list)->cnt == (_q_list)->max_cnt)
1211*d14abf15SRobert Mustacchi
1212*d14abf15SRobert Mustacchi
1213*d14abf15SRobert Mustacchi #endif
1214*d14abf15SRobert Mustacchi
1215*d14abf15SRobert Mustacchi
1216*d14abf15SRobert Mustacchi
1217*d14abf15SRobert Mustacchi
1218*d14abf15SRobert Mustacchi #endif /* _listq_h_ */
1219*d14abf15SRobert Mustacchi
1220