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 { |