From 16f06e9dc9f9fe5fa05a3ad60bd29641c5ab4de7 Mon Sep 17 00:00:00 2001 From: Dalai Felinto Date: Mon, 30 Oct 2017 19:34:46 -0200 Subject: Introduce "skip" in BLI_Iterator struct This helps iterators prevent recursion. --- source/blender/blenlib/BLI_iterator.h | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'source/blender/blenlib/BLI_iterator.h') diff --git a/source/blender/blenlib/BLI_iterator.h b/source/blender/blenlib/BLI_iterator.h index a2ec21d89b3..39d5cc12d87 100644 --- a/source/blender/blenlib/BLI_iterator.h +++ b/source/blender/blenlib/BLI_iterator.h @@ -30,6 +30,7 @@ typedef struct BLI_Iterator { void *current; /* current pointer we iterate over */ void *data; /* stored data required for this iterator */ + bool skip; bool valid; } BLI_Iterator; @@ -40,12 +41,18 @@ typedef void (*IteratorBeginCb)(BLI_Iterator *iter, void *data_in); { \ _type _instance; \ IteratorCb callback_end_func = callback_end; \ - BLI_Iterator iter_macro; \ + BLI_Iterator iter_macro = { \ + .skip = false, \ + }; \ for (callback_begin(&iter_macro, (_data_in)); \ iter_macro.valid; \ callback_next(&iter_macro)) \ - { \ - _instance = (_type ) iter_macro.current; + { \ + if (iter_macro.skip) { \ + iter_macro.skip = false; \ + continue; \ + } \ + _instance = (_type ) iter_macro.current; #define ITER_END \ } \ -- cgit v1.2.3