2 ** CDXLPlay (C) 2009 Fredrik Wikstrom
18 struct node
*tailpred
;
21 static inline void init_list(struct list
*list
) {
22 list
->head
= (struct node
*)&list
->tail
;
24 list
->tailpred
= (struct node
*)&list
->head
;
27 static inline int list_is_empty(struct list
*list
) {
28 return (list
->head
== (struct node
*)&list
->tail
);
31 static inline void add_head(struct list
*list
, struct node
*node
) {
32 node
->succ
= list
->head
;
33 node
->pred
= (struct node
*)&list
->head
;
34 node
->succ
->pred
= node
;
35 node
->pred
->succ
= node
;
38 static inline void add_tail(struct list
*list
, struct node
*node
) {
39 node
->succ
= (struct node
*)&list
->tail
;
40 node
->pred
= list
->tailpred
;
41 node
->succ
->pred
= node
;
42 node
->pred
->succ
= node
;
45 static inline struct node
*rem_node(struct node
*node
) {
46 if (node
&& node
->succ
&& node
->pred
) {
47 node
->succ
->pred
= node
->pred
;
48 node
->pred
->succ
= node
->succ
;
56 static inline struct node
*rem_head(struct list
*list
) {
57 return rem_node(list
->head
);
60 static inline struct node
*rem_tail(struct list
*list
) {
61 return rem_node(list
->tail
);