Skip to content
Snippets Groups Projects
Commit ffa8e757 authored by Hans Goudey's avatar Hans Goudey
Browse files

BLI Listbase: Add iterator macro that increments an index

parent 78d6c273
No related branches found
No related tags found
No related merge requests found
...@@ -238,6 +238,7 @@ ForEachMacros: ...@@ -238,6 +238,7 @@ ForEachMacros:
- LISTBASE_FOREACH_BACKWARD - LISTBASE_FOREACH_BACKWARD
- LISTBASE_FOREACH_MUTABLE - LISTBASE_FOREACH_MUTABLE
- LISTBASE_FOREACH_BACKWARD_MUTABLE - LISTBASE_FOREACH_BACKWARD_MUTABLE
- LISTBASE_FOREACH_INDEX
- MAN_ITER_AXES_BEGIN - MAN_ITER_AXES_BEGIN
- NODE_INSTANCE_HASH_ITER - NODE_INSTANCE_HASH_ITER
- NODE_SOCKET_TYPES_BEGIN - NODE_SOCKET_TYPES_BEGIN
......
...@@ -171,6 +171,15 @@ struct LinkData *BLI_genericNodeN(void *data); ...@@ -171,6 +171,15 @@ struct LinkData *BLI_genericNodeN(void *data);
#define LISTBASE_FOREACH(type, var, list) \ #define LISTBASE_FOREACH(type, var, list) \
for (type var = (type)((list)->first); var != NULL; var = (type)(((Link *)(var))->next)) for (type var = (type)((list)->first); var != NULL; var = (type)(((Link *)(var))->next))
/**
* A version of #LISTBASE_FOREACH that supports incrementing an index variable at every step.
* Including this in the macro helps prevent mistakes where "continue" mistakenly skips the
* incrementation.
*/
#define LISTBASE_FOREACH_INDEX(type, var, list, index_var) \
for (type var = (((void)(index_var = 0)), (type)((list)->first)); var != NULL; \
var = (type)(((Link *)(var))->next), index_var++)
#define LISTBASE_FOREACH_BACKWARD(type, var, list) \ #define LISTBASE_FOREACH_BACKWARD(type, var, list) \
for (type var = (type)((list)->last); var != NULL; var = (type)(((Link *)(var))->prev)) for (type var = (type)((list)->last); var != NULL; var = (type)(((Link *)(var))->prev))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment