10#define LIST_INTERFACE_BASE(type) struct { \
15#define LIST_INTERFACE(type) union { \
16 ListInterface list_interface; \
17 LIST_INTERFACE_BASE(type); \
28#define LIST_ANCHOR_INTERFACE_BASE(type) struct { \
33#define LIST_ANCHOR_INTERFACE(type) union { \
34 ListAnchorInterface list_anchor_interface; \
35 LIST_ANCHOR_INTERFACE_BASE(type); \
38#define LIST_ANCHOR(type) struct { \
39 LIST_ANCHOR_INTERFACE(type); \
164#define LIST_CAST(expr) (List *)(expr)
165#define LIST_CAST_2(expr) (List **)(expr)
166#define LIST_ANCHOR_CAST(expr) (ListAnchor *)(expr)
167#define LIST_CAST_RETURN(typekey, e_return) (__typeof__(*(typekey)) *)(e_return)
173#define list_insert(dest, elem) \
174 (LIST_CAST_RETURN(elem, list_insert(LIST_CAST_2(dest), LIST_CAST(elem))))
176#define alist_insert(list, ref, elem) \
177 (LIST_CAST_RETURN(elem, alist_insert(LIST_ANCHOR_CAST(list), LIST_CAST(ref), LIST_CAST(elem))))
179#define list_push(dest, elem) \
180 (LIST_CAST_RETURN(elem, list_push(LIST_CAST_2(dest), LIST_CAST(elem))))
182#define alist_push(list, elem) \
183 (LIST_CAST_RETURN(elem, alist_push(LIST_ANCHOR_CAST(list), LIST_CAST(elem))))
185#define list_append(dest, elem) \
186 (LIST_CAST_RETURN(elem, list_append(LIST_CAST_2(dest), LIST_CAST(elem))))
188#define alist_append(list, elem) \
189 (LIST_CAST_RETURN(elem, alist_append(LIST_ANCHOR_CAST(list), LIST_CAST(elem))))
191#define list_unlink(dest, elem) \
192 (LIST_CAST_RETURN(elem, list_unlink(LIST_CAST_2(dest), LIST_CAST(elem))))
194#define alist_unlink(list, elem) \
195 (LIST_CAST_RETURN(elem, alist_unlink(LIST_ANCHOR_CAST(list), LIST_CAST(elem))))
197#define list_pop(dest) \
198 (LIST_CAST_RETURN(*(dest), list_pop(LIST_CAST_2(dest))))
200#define alist_pop(list) \
201 (LIST_CAST_RETURN((list)->first, alist_pop(LIST_ANCHOR_CAST(list))))
203#define alist_merge_tail(dst, src) \
204 alist_merge_tail(LIST_ANCHOR_CAST(dst), LIST_ANCHOR_CAST(src))
#define alist_unlink(list, elem)
Definition list.h:194
#define alist_insert(list, ref, elem)
Definition list.h:176
#define list_unlink(dest, elem)
Definition list.h:191
#define alist_push(list, elem)
Definition list.h:182
#define list_append(dest, elem)
Definition list.h:185
#define list_push(dest, elem)
Definition list.h:179
#define list_pop(dest)
Definition list.h:197
#define list_insert(dest, elem)
Definition list.h:173
#define alist_pop(list)
Definition list.h:200
#define alist_merge_tail(dst, src)
Definition list.h:203
#define alist_append(list, elem)
Definition list.h:188
LIST_ANCHOR_INTERFACE_BASE(ListInterface)
LIST_ANCHOR_INTERFACE(List)
LIST_INTERFACE(ListContainer)
void * data
Definition list.h:52
LIST_INTERFACE_BASE(ListInterface)