diff options
-rw-r--r-- | .clang-format | 1 | ||||
-rw-r--r-- | source/blender/blenlib/BLI_listbase.h | 9 |
2 files changed, 10 insertions, 0 deletions
diff --git a/.clang-format b/.clang-format index cb5cdab496f..4db1b664fdb 100644 --- a/.clang-format +++ b/.clang-format @@ -238,6 +238,7 @@ ForEachMacros: - LISTBASE_FOREACH_BACKWARD - LISTBASE_FOREACH_MUTABLE - LISTBASE_FOREACH_BACKWARD_MUTABLE + - LISTBASE_FOREACH_INDEX - MAN_ITER_AXES_BEGIN - NODE_INSTANCE_HASH_ITER - NODE_SOCKET_TYPES_BEGIN diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h index fa7cf7a1847..aff80a2bd86 100644 --- a/source/blender/blenlib/BLI_listbase.h +++ b/source/blender/blenlib/BLI_listbase.h @@ -171,6 +171,15 @@ struct LinkData *BLI_genericNodeN(void *data); #define LISTBASE_FOREACH(type, var, list) \ 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) \ for (type var = (type)((list)->last); var != NULL; var = (type)(((Link *)(var))->prev)) |