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