mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-11-13 13:30:05 -05:00
list: add iteration with a cursor
Iterating a list with a cursor is heavier but is safe against removal of any element in the list. Move the hook cursor iterator to list.
This commit is contained in:
parent
ce4232cbc7
commit
5fe230e5ff
2 changed files with 19 additions and 11 deletions
|
|
@ -84,7 +84,7 @@ static inline void spa_list_remove(struct spa_list *elem)
|
|||
pos = spa_list_next(pos, member))
|
||||
|
||||
#define spa_list_for_each(pos, head, member) \
|
||||
spa_list_for_each_next(pos, head, head, member) \
|
||||
spa_list_for_each_next(pos, head, head, member)
|
||||
|
||||
#define spa_list_for_each_safe_next(pos, tmp, head, curr, member) \
|
||||
for (pos = spa_list_first(curr, __typeof__(*pos), member), \
|
||||
|
|
@ -94,7 +94,20 @@ static inline void spa_list_remove(struct spa_list *elem)
|
|||
tmp = spa_list_next(pos, member))
|
||||
|
||||
#define spa_list_for_each_safe(pos, tmp, head, member) \
|
||||
spa_list_for_each_safe_next(pos, tmp, head, head, member) \
|
||||
spa_list_for_each_safe_next(pos, tmp, head, head, member)
|
||||
|
||||
#define spa_list_cursor_start(cursor, head, member) \
|
||||
spa_list_prepend(head, &(cursor).member)
|
||||
|
||||
#define spa_list_for_each_cursor(pos, cursor, head, member) \
|
||||
for(pos = spa_list_first(&(cursor).member, __typeof__(*(pos)), member); \
|
||||
spa_list_remove(&(pos)->member), \
|
||||
spa_list_append(&(cursor).member, &(pos)->member), \
|
||||
!spa_list_is_end(pos, head, member); \
|
||||
pos = spa_list_next(&cursor, member))
|
||||
|
||||
#define spa_list_cursor_end(cursor, member) \
|
||||
spa_list_remove(&(cursor).member)
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue