From 935851a6a69d770da25e203c3df03d11cf689141 Mon Sep 17 00:00:00 2001 From: Wim Taymans Date: Wed, 18 Nov 2020 15:00:01 +0100 Subject: [PATCH] spa: add safe_reverse function --- spa/include/spa/utils/list.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spa/include/spa/utils/list.h b/spa/include/spa/utils/list.h index 90917ea23..f9dd37ccb 100644 --- a/spa/include/spa/utils/list.h +++ b/spa/include/spa/utils/list.h @@ -106,7 +106,7 @@ static inline void spa_list_remove(struct spa_list *elem) #define spa_list_for_each(pos, head, member) \ spa_list_for_each_next(pos, head, head, member) -#define spa_list_for_each_reverse(pos, head, member) \ +#define spa_list_for_each_reverse(pos, head, member) \ spa_list_for_each_prev(pos, head, head, member) #define spa_list_for_each_safe_next(pos, tmp, head, curr, member) \ @@ -115,9 +115,18 @@ static inline void spa_list_remove(struct spa_list *elem) !spa_list_is_end(pos, head, member); \ pos = tmp) +#define spa_list_for_each_safe_prev(pos, tmp, head, curr, member) \ + for (pos = spa_list_last(curr, __typeof__(*pos), member); \ + tmp = spa_list_prev(pos, member), \ + !spa_list_is_end(pos, head, member); \ + pos = tmp) + #define spa_list_for_each_safe(pos, tmp, head, member) \ spa_list_for_each_safe_next(pos, tmp, head, head, member) +#define spa_list_for_each_safe_reverse(pos, tmp, head, member) \ + spa_list_for_each_safe_prev(pos, tmp, head, head, member) + #define spa_list_cursor_start(cursor, head, member) \ spa_list_prepend(head, &(cursor).member)