aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatt Turner <[email protected]>2014-06-24 16:32:29 -0700
committerMatt Turner <[email protected]>2014-07-01 08:55:51 -0700
commitda9f0316e6ea628c085040a0c145580301207489 (patch)
treefb4a5e768c5e3b087e891b28660360c9038f42cd /src
parent35976810405cedaf49151151d10c52e19636d684 (diff)
glsl: Add typed foreach_in_list_safe macro.
Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src')
-rw-r--r--src/glsl/list.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/glsl/list.h b/src/glsl/list.h
index 914ce962527..a4c64082122 100644
--- a/src/glsl/list.h
+++ b/src/glsl/list.h
@@ -584,6 +584,15 @@ inline void exec_node::insert_before(exec_list *before)
(__inst) = (__type *)(__inst)->prev)
/**
+ * This version is safe even if the current node is removed.
+ */
+#define foreach_in_list_safe(__type, __node, __list) \
+ for (__type *__node = (__type *)(__list)->head, \
+ *__next = (__type *)__node->next; \
+ __next != NULL; \
+ __node = __next, __next = (__type *)__next->next)
+
+/**
* Iterate through two lists at once. Stops at the end of the shorter list.
*
* This is safe against either current node being removed or replaced.