37 #define BLI_ITERATOR_INIT(iter) \
39 (iter)->skip = false; \
40 (iter)->valid = true; \
44 #define ITER_BEGIN(callback_begin, callback_next, callback_end, _data_in, _type, _instance) \
47 IteratorCb callback_end_func = callback_end; \
48 BLI_Iterator iter_macro; \
49 BLI_ITERATOR_INIT(&iter_macro); \
50 for (callback_begin(&iter_macro, (_data_in)); iter_macro.valid; callback_next(&iter_macro)) { \
51 if (iter_macro.skip) { \
52 iter_macro.skip = false; \
55 _instance = (_type)iter_macro.current;
59 callback_end_func(&iter_macro); \
void(* IteratorCb)(BLI_Iterator *iter)
struct BLI_Iterator BLI_Iterator
void(* IteratorBeginCb)(BLI_Iterator *iter, void *data_in)