shl: dlist: add *_but_one() loops
The *_but_one() variants of dlist-loops start from within a loop instead of at the head and iterate over all elements except the start-element. The start element is skipped as we would need a temporary variable to include it and in most times you want to skip the start-element, anyway. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
This commit is contained in:
parent
52edafe08c
commit
22e63dbdba
@ -105,6 +105,13 @@ static inline bool shl_dlist_empty(struct shl_dlist *head)
|
||||
#define shl_dlist_for_each(iter, head) \
|
||||
for (iter = (head)->next; iter != (head); iter = iter->next)
|
||||
|
||||
#define shl_dlist_for_each_but_one(iter, start, head) \
|
||||
for (iter = ((start)->next == (head)) ? \
|
||||
(start)->next->next : \
|
||||
(start)->next; \
|
||||
iter != (start); \
|
||||
iter = (iter->next == (head)) ? iter->next->next : iter->next)
|
||||
|
||||
#define shl_dlist_for_each_safe(iter, tmp, head) \
|
||||
for (iter = (head)->next, tmp = iter->next; iter != (head); \
|
||||
iter = tmp, tmp = iter->next)
|
||||
@ -112,6 +119,13 @@ static inline bool shl_dlist_empty(struct shl_dlist *head)
|
||||
#define shl_dlist_for_each_reverse(iter, head) \
|
||||
for (iter = (head)->prev; iter != (head); iter = iter->prev)
|
||||
|
||||
#define shl_dlist_for_each_reverse_but_one(iter, start, head) \
|
||||
for (iter = ((start)->prev == (head)) ? \
|
||||
(start)->prev->prev : \
|
||||
(start)->prev; \
|
||||
iter != (start); \
|
||||
iter = (iter->prev == (head)) ? iter->prev->prev : iter->prev)
|
||||
|
||||
#define shl_dlist_for_each_reverse_safe(iter, tmp, head) \
|
||||
for (iter = (head)->prev, tmp = iter->prev; iter != (head); \
|
||||
iter = tmp, tmp = iter->prev)
|
||||
|
Loading…
x
Reference in New Issue
Block a user