exec_list: Add foreach_list_typed and foreach_list_typed_const
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 11 May 2010 00:40:41 +0000 (17:40 -0700)
committerIan Romanick <ian.d.romanick@intel.com>
Tue, 11 May 2010 00:40:41 +0000 (17:40 -0700)
These variations are parameterized by the type of the nodes in the
list.  This enables skipping the explicit usage of exec_node_data in
the loop body.

list.h

diff --git a/list.h b/list.h
index 3bfdf55..615be05 100644 (file)
--- a/list.h
+++ b/list.h
@@ -347,4 +347,16 @@ struct exec_list {
        ; (__node)->next != NULL                        \
        ; (__node) = (__node)->next)
 
+#define foreach_list_typed(__type, __node, __field, __list)            \
+   for (__type * __node =                                              \
+          exec_node_data(__type, (__list)->head, __field);             \
+       (__node)->__field.next != NULL;                                 \
+       (__node) = exec_node_data(__type, (__node)->__field.next, __field))
+
+#define foreach_list_typed_const(__type, __node, __field, __list)      \
+   for (const __type * __node =                                                \
+          exec_node_data(__type, (__list)->head, __field);             \
+       (__node)->__field.next != NULL;                                 \
+       (__node) = exec_node_data(__type, (__node)->__field.next, __field))
+
 #endif /* LIST_CONTAINER_H */