diff options
Diffstat (limited to 'source/blender/blenlib/BLI_listbase.h')
-rw-r--r-- | source/blender/blenlib/BLI_listbase.h | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_listbase.h b/source/blender/blenlib/BLI_listbase.h index c235a72e7e4..b8b62dd3451 100644 --- a/source/blender/blenlib/BLI_listbase.h +++ b/source/blender/blenlib/BLI_listbase.h @@ -171,12 +171,21 @@ 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)) +#define LISTBASE_FOREACH_BACKWARD(type, var, list) \ + for (type var = (type)((list)->last); var != NULL; var = (type)(((Link *)(var))->prev)) + /** A version of #LISTBASE_FOREACH that supports removing the item we're looping over. */ #define LISTBASE_FOREACH_MUTABLE(type, var, list) \ for (type var = (type)((list)->first), *var##_iter_next; \ ((var != NULL) ? ((void)(var##_iter_next = (type)(((Link *)(var))->next)), 1) : 0); \ var = var##_iter_next) +/** A version of #LISTBASE_FOREACH_BACKWARD that supports removing the item we're looping over. */ +#define LISTBASE_FOREACH_BACKWARD_MUTABLE(type, var, list) \ + for (type var = (type)((list)->last), *var##_iter_prev; \ + ((var != NULL) ? ((void)(var##_iter_prev = (type)(((Link *)(var))->prev)), 1) : 0); \ + var = var##_iter_prev) + #ifdef __cplusplus } #endif |