
Go to the source code of this file.
Defines | |
| #define | _list_find_hook(list, c, hook) MACRO_BEGIN _list_forall_hook(list, hook) if (c) break; MACRO_END |
| #define | _list_forall_hook(list, hook) for (hook=&list; *hook!=NULL; hook=&(*hook)->next) |
| #define | _list_merge_cond(listtype, a, b, cond, result) |
| #define | dlist_append(head, end, elt) |
| #define | dlist_forall_unlink(elt, head, end) for (elt=head; elt ? (head=elt->next, elt->next=NULL, elt->prev=NULL), 1 : (end=NULL, 0); elt=head) |
| #define | dlist_unlink_first(head, end, elt) |
| #define | list_append(listtype, list, elt) |
| #define | list_count(list, n, elt, c) |
| #define | list_find(elt, list, c) MACRO_BEGIN list_forall(elt, list) if (c) break; MACRO_END |
| #define | list_find2(elt, list, c, hook) MACRO_BEGIN list_forall2(elt, list, hook) if (c) break; MACRO_END |
| #define | list_forall(elt, list) for (elt=list; elt!=NULL; elt=elt->next) |
| #define | list_forall2(elt, list, hook) for (elt=list, hook=&list; elt!=NULL; hook=&elt->next, elt=elt->next) |
| #define | list_forall_unlink(elt, list) for (elt=list; elt ? (list=elt->next, elt->next=NULL), 1 : 0; elt=list) |
| #define | list_index(list, n, elt, c) |
| #define | list_insert_athook(elt, hook) MACRO_BEGIN elt->next = *hook; *hook = elt; MACRO_END |
| #define | list_insert_beforehook(elt, hook) MACRO_BEGIN elt->next = *hook; *hook = elt; hook=&elt->next; MACRO_END |
| #define | list_insert_ordered(listtype, list, elt, tmp, cond) |
| #define | list_length(listtype, list, n) |
| #define | list_mergesort(listtype, list, a, b, cond) |
| #define | list_nth(elt, list, n) |
| #define | list_nth_hook(elt, list, n, hook) |
| #define | list_prepend(list, elt) MACRO_BEGIN elt->next = list; list = elt; MACRO_END |
| #define | list_reverse(listtype, list) |
| #define | list_sort(listtype, list, a, b, cond) |
| #define | list_unlink(listtype, list, elt) |
| #define | list_unlink_athook(list, elt, hook) |
| #define | list_unlink_cond(listtype, list, elt, c) |
| #define | MACRO_BEGIN do { |
| #define | MACRO_END } while (0) |
| #define _list_find_hook | ( | list, | |
| c, | |||
| hook | |||
| ) | MACRO_BEGIN _list_forall_hook(list, hook) if (c) break; MACRO_END |
| #define _list_forall_hook | ( | list, | |
| hook | |||
| ) | for (hook=&list; *hook!=NULL; hook=&(*hook)->next) |
| #define _list_merge_cond | ( | listtype, | |
| a, | |||
| b, | |||
| cond, | |||
| result | |||
| ) |
MACRO_BEGIN \ listtype **_hook; \ _hook = &(result); \ while (1) { \ if (a==NULL) { \ *_hook = b; \ break; \ } else if (b==NULL) { \ *_hook = a; \ break; \ } else if (cond) { \ *_hook = a; \ _hook = &(a->next); \ a = a->next; \ } else { \ *_hook = b; \ _hook = &(b->next); \ b = b->next; \ } \ } \ MACRO_END
| #define dlist_append | ( | head, | |
| end, | |||
| elt | |||
| ) |
| #define dlist_unlink_first | ( | head, | |
| end, | |||
| elt | |||
| ) |
| #define list_append | ( | listtype, | |
| list, | |||
| elt | |||
| ) |
| #define list_count | ( | list, | |
| n, | |||
| elt, | |||
| c | |||
| ) |
| #define list_find | ( | elt, | |
| list, | |||
| c | |||
| ) | MACRO_BEGIN list_forall(elt, list) if (c) break; MACRO_END |
| #define list_find2 | ( | elt, | |
| list, | |||
| c, | |||
| hook | |||
| ) | MACRO_BEGIN list_forall2(elt, list, hook) if (c) break; MACRO_END |
| #define list_forall | ( | elt, | |
| list | |||
| ) | for (elt=list; elt!=NULL; elt=elt->next) |
| #define list_forall2 | ( | elt, | |
| list, | |||
| hook | |||
| ) | for (elt=list, hook=&list; elt!=NULL; hook=&elt->next, elt=elt->next) |
| #define list_index | ( | list, | |
| n, | |||
| elt, | |||
| c | |||
| ) |
| #define list_insert_athook | ( | elt, | |
| hook | |||
| ) | MACRO_BEGIN elt->next = *hook; *hook = elt; MACRO_END |
| #define list_insert_beforehook | ( | elt, | |
| hook | |||
| ) | MACRO_BEGIN elt->next = *hook; *hook = elt; hook=&elt->next; MACRO_END |
| #define list_insert_ordered | ( | listtype, | |
| list, | |||
| elt, | |||
| tmp, | |||
| cond | |||
| ) |
| #define list_length | ( | listtype, | |
| list, | |||
| n | |||
| ) |
| #define list_mergesort | ( | listtype, | |
| list, | |||
| a, | |||
| b, | |||
| cond | |||
| ) |
MACRO_BEGIN \
listtype *_elt, **_hook1; \
\
for (_elt=list; _elt; _elt=_elt->next1) { \
_elt->next1 = _elt->next; \
_elt->next = NULL; \
} \
do { \
_hook1 = &(list); \
while ((a = *_hook1) != NULL && (b = a->next1) != NULL ) { \
_elt = b->next1; \
_list_merge_cond(listtype, a, b, cond, *_hook1); \
_hook1 = &((*_hook1)->next1); \
*_hook1 = _elt; \
} \
} while (_hook1 != &(list)); \
MACRO_END
| #define list_nth_hook | ( | elt, | |
| list, | |||
| n, | |||
| hook | |||
| ) |
| #define list_prepend | ( | list, | |
| elt | |||
| ) | MACRO_BEGIN elt->next = list; list = elt; MACRO_END |
| #define list_reverse | ( | listtype, | |
| list | |||
| ) |
| #define list_unlink | ( | listtype, | |
| list, | |||
| elt | |||
| ) |
| #define list_unlink_athook | ( | list, | |
| elt, | |||
| hook | |||
| ) |
| #define list_unlink_cond | ( | listtype, | |
| list, | |||
| elt, | |||
| c | |||
| ) |
| #define MACRO_BEGIN do { |