diff options
Diffstat (limited to 'src/llist.h')
| -rw-r--r-- | src/llist.h | 124 | 
1 files changed, 63 insertions, 61 deletions
diff --git a/src/llist.h b/src/llist.h index cf49bef..5464cb9 100644 --- a/src/llist.h +++ b/src/llist.h @@ -1,3 +1,5 @@ +/*-*- Mode: C; c-basic-offset: 8 -*-*/ +  #ifndef foocanberrallistfoo  #define foocanberrallistfoo @@ -27,80 +29,80 @@  /* The head of the linked list. Use this in the structure that shall   * contain the head of the linked list */ -#define CA_LLIST_HEAD(t,name)                                           \ -    t *name +#define CA_LLIST_HEAD(t,name)                   \ +        t *name  /* The pointers in the linked list's items. Use this in the item structure */ -#define CA_LLIST_FIELDS(t)                                              \ -    t *next, *prev +#define CA_LLIST_FIELDS(t)                      \ +        t *next, *prev  /* Initialize the list's head */ -#define CA_LLIST_HEAD_INIT(t,item)                                      \ -    do {                                                                \ -        (item) = (t*) NULL; }                                           \ -    while(0) +#define CA_LLIST_HEAD_INIT(t,item)              \ +        do {                                    \ +                (item) = (t*) NULL; }           \ +        while(0)  /* Initialize a list item */ -#define CA_LLIST_INIT(t,item)                                           \ -    do {                                                                \ -        t *_item = (item);                                              \ -        ca_assert(_item);                                               \ -        _item->prev = _item->next = NULL;                               \ -    } while(0) +#define CA_LLIST_INIT(t,item)                           \ +        do {                                            \ +                t *_item = (item);                      \ +                ca_assert(_item);                       \ +                _item->prev = _item->next = NULL;       \ +        } while(0)  /* Prepend an item to the list */ -#define CA_LLIST_PREPEND(t,head,item)                                   \ -    do {                                                                \ -        t **_head = &(head), *_item = (item);                           \ -        ca_assert(_item);                                               \ -        if ((_item->next = *_head))                                     \ -            _item->next->prev = _item;                                  \ -        _item->prev = NULL;                                             \ -        *_head = _item;                                                 \ -    } while (0) +#define CA_LLIST_PREPEND(t,head,item)                   \ +        do {                                            \ +                t **_head = &(head), *_item = (item);   \ +                ca_assert(_item);                       \ +                if ((_item->next = *_head))             \ +                        _item->next->prev = _item;      \ +                _item->prev = NULL;                     \ +                *_head = _item;                         \ +        } while (0)  /* Remove an item from the list */ -#define CA_LLIST_REMOVE(t,head,item)                                    \ -    do {                                                                \ -        t **_head = &(head), *_item = (item);                           \ -        ca_assert(_item);                                               \ -        if (_item->next)                                                \ -            _item->next->prev = _item->prev;                            \ -        if (_item->prev)                                                \ -            _item->prev->next = _item->next;                            \ -        else {                                                          \ -            ca_assert(*_head == _item);                                 \ -            *_head = _item->next;                                       \ -        }                                                               \ -        _item->next = _item->prev = NULL;                               \ -    } while(0) +#define CA_LLIST_REMOVE(t,head,item)                            \ +        do {                                                    \ +                t **_head = &(head), *_item = (item);           \ +                ca_assert(_item);                               \ +                if (_item->next)                                \ +                        _item->next->prev = _item->prev;        \ +                if (_item->prev)                                \ +                        _item->prev->next = _item->next;        \ +                else {                                          \ +                        ca_assert(*_head == _item);             \ +                        *_head = _item->next;                   \ +                }                                               \ +                _item->next = _item->prev = NULL;               \ +        } while(0)  /* Find the head of the list */ -#define CA_LLIST_FIND_HEAD(t,item,head)                                 \ -    do {                                                                \ -        t **_head = (head), *_item = (item);                            \ -        *_head = _item;                                                 \ -        ca_assert(_head);                                               \ -        while ((*_head)->prev)                                          \ -            *_head = (*_head)->prev;                                    \ -    } while (0) +#define CA_LLIST_FIND_HEAD(t,item,head)                 \ +        do {                                            \ +                t **_head = (head), *_item = (item);    \ +                *_head = _item;                         \ +                ca_assert(_head);                       \ +                while ((*_head)->prev)                  \ +                        *_head = (*_head)->prev;        \ +        } while (0)  /* Insert an item after another one (a = where, b = what) */ -#define CA_LLIST_INSERT_AFTER(t,head,a,b)                               \ -    do {                                                                \ -        t **_head = &(head), *_a = (a), *_b = (b);                      \ -        ca_assert(_b);                                                  \ -        if (!_a) {                                                      \ -            if ((_b->next = *_head))                                    \ -                _b->next->prev = _b;                                    \ -            _b->prev = NULL;                                            \ -            *_head = _b;                                                \ -        } else {                                                        \ -            if ((_b->next = _a->next))                                  \ -                _b->next->prev = _b;                                    \ -            _b->prev = _a;                                              \ -            _a->next = _b;                                              \ -        }                                                               \ -    } while (0) +#define CA_LLIST_INSERT_AFTER(t,head,a,b)                       \ +        do {                                                    \ +                t **_head = &(head), *_a = (a), *_b = (b);      \ +                ca_assert(_b);                                  \ +                if (!_a) {                                      \ +                        if ((_b->next = *_head))                \ +                                _b->next->prev = _b;            \ +                        _b->prev = NULL;                        \ +                        *_head = _b;                            \ +                } else {                                        \ +                        if ((_b->next = _a->next))              \ +                                _b->next->prev = _b;            \ +                        _b->prev = _a;                          \ +                        _a->next = _b;                          \ +                }                                               \ +        } while (0)  #endif  | 
