25#define BLI_ITERATOR_INIT(iter) \
27 (iter)->skip = false; \
28 (iter)->valid = true; \
32#define ITER_BEGIN(callback_begin, callback_next, callback_end, _data_in, _type, _instance) \
35 IteratorCb callback_end_func = callback_end; \
36 BLI_Iterator iter_macro; \
37 BLI_ITERATOR_INIT(&iter_macro); \
38 for (callback_begin(&iter_macro, (_data_in)); iter_macro.valid; callback_next(&iter_macro)) { \
39 if (iter_macro.skip) { \
40 iter_macro.skip = false; \
43 _instance = (_type)iter_macro.current;
47 callback_end_func(&iter_macro); \
void(* IteratorCb)(BLI_Iterator *iter)
struct BLI_Iterator BLI_Iterator
void(* IteratorBeginCb)(BLI_Iterator *iter, void *data_in)