util: Merge util_format_write_4* functions.
[mesa.git] / src / util / list.h
index 8a18c4b0d8d8b99f500359082a5d1906b2d1a95b..d50eb1ea5dde481711d1f726d47323d8544b4d3a 100644 (file)
@@ -241,9 +241,23 @@ static inline void list_validate(const struct list_head *list)
        &pos->member != (head);                                         \
        pos = LIST_ENTRY(type, pos->member.next, member))
 
+#define list_for_each_entry_from_safe(type, pos, start, head, member)   \
+   for (type *pos = LIST_ENTRY(type, (start), member),                  \
+            *__next = LIST_ENTRY(type, pos->member.next, member);      \
+       &pos->member != (head);                                         \
+       pos = __next,                                                   \
+       __next = LIST_ENTRY(type, __next->member.next, member))
+
 #define list_for_each_entry_from_rev(type, pos, start, head, member)    \
    for (type *pos = LIST_ENTRY(type, (start), member);                  \
        &pos->member != (head);                                         \
        pos = LIST_ENTRY(type, pos->member.prev, member))
 
+#define list_pair_for_each_entry(type, pos1, pos2, head1, head2, member) \
+   for (type *pos1 = LIST_ENTRY(type, (head1)->next, member),           \
+             *pos2 = LIST_ENTRY(type, (head2)->next, member);           \
+        &pos1->member != (head1) && &pos2->member != (head2);           \
+       pos1 = LIST_ENTRY(type, pos1->member.next, member),               \
+       pos2 = LIST_ENTRY(type, pos2->member.next, member))
+
 #endif /*_UTIL_LIST_H_*/