#definewl_list_for_each(pos,head,member)[related]Value:.PP
for (pos = wl_container_of((head)->next, pos, member); \
&pos->member != (head); \
pos = wl_container_of(pos->member.next, pos, member))
Iterates over a list.
This macro expresses a for-each iterator for wl_list. Given a list and wl_list link member name (often
named link by convention), this macro assigns each element in the list to pos, which can then be
referenced in a trailing code block. For example, given a wl_list of struct message elements:
struct message {
char *contents;
wl_list link;
};
struct wl_list *message_list;
// Assume message_list now "contains" many messages
struct message *m;
wl_list_for_each(m, message_list, link) {
do_something_with_message(m);
}
Parameterspos Cursor that each list element will be assigned to
head Head of the list to iterate over
member Name of the link member within the element struct
#definewl_list_for_each_reverse(pos,head,member)[related]Value:.PP
for (pos = wl_container_of((head)->prev, pos, member); \
&pos->member != (head); \
pos = wl_container_of(pos->member.prev, pos, member))
Iterates backwards over a list.
Seealsowl_list_for_each()Parameterspos Cursor that each list element will be assigned to
head Head of the list to iterate over
member Name of the link member within the element struct
#definewl_list_for_each_reverse_safe(pos,tmp,head,member)[related]Value:.PP
for (pos = wl_container_of((head)->prev, pos, member), \
tmp = wl_container_of((pos)->member.prev, tmp, member); \
&pos->member != (head); \
pos = tmp, \
tmp = wl_container_of(pos->member.prev, tmp, member))
Iterates backwards over a list, safe against removal of the list element.
Note
Only removal of the current element, pos, is safe. Removing any other element during traversal may
lead to a loop malfunction.
Seealsowl_list_for_each()Parameterspos Cursor that each list element will be assigned to
tmp Temporary pointer of the same type as pos
head Head of the list to iterate over
member Name of the link member within the element struct
#definewl_list_for_each_safe(pos,tmp,head,member)[related]Value:.PP
for (pos = wl_container_of((head)->next, pos, member), \
tmp = wl_container_of((pos)->member.next, tmp, member); \
&pos->member != (head); \
pos = tmp, \
tmp = wl_container_of(pos->member.next, tmp, member))
Iterates over a list, safe against removal of the list element.
Note
Only removal of the current element, pos, is safe. Removing any other element during traversal may
lead to a loop malfunction.
Seealsowl_list_for_each()Parameterspos Cursor that each list element will be assigned to
tmp Temporary pointer of the same type as pos
head Head of the list to iterate over
member Name of the link member within the element struct