Sanitize use of BLI_iterator

We now initialize iter.valid as true as part of the main iterator (and manually
when using via Python). And we don't even bother setting iter->current to NULL
if it's invalid. Let's stick to using iter->valid only.
This commit is contained in:
Dalai Felinto 2017-11-07 14:06:55 -02:00
parent fc789803ca
commit 1b18e15802
Notes: blender-bot 2023-02-14 06:25:22 +01:00
Referenced by issue #53269, Dupli-verts/dupli-faces not working.
5 changed files with 9 additions and 15 deletions

View File

@ -535,7 +535,6 @@ void BKE_scene_collections_iterator_begin(BLI_Iterator *iter, void *data_in)
data->cur = 0;
iter->current = data->array[data->cur];
iter->valid = true;
}
void BKE_scene_collections_iterator_next(struct BLI_Iterator *iter)
@ -585,10 +584,10 @@ void BKE_scene_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
BKE_scene_collections_iterator_begin(&data->scene_collection_iter, scene);
SceneCollection *sc = data->scene_collection_iter.current;
iter->current = sc->objects.first ? ((LinkData *)sc->objects.first)->data : NULL;
iter->valid = true;
if (iter->current == NULL) {
if (sc->objects.first != NULL) {
iter->current = ((LinkData *)sc->objects.first)->data;
}
else {
BKE_scene_objects_iterator_next(iter);
}
}

View File

@ -1674,7 +1674,6 @@ static void object_bases_iterator_begin(BLI_Iterator *iter, void *data_in, const
return;
}
iter->valid = true;
iter->data = base;
if ((base->flag & flag) == 0) {
@ -1698,7 +1697,6 @@ static void object_bases_iterator_next(BLI_Iterator *iter, const int flag)
base = base->next;
}
iter->current = NULL;
iter->valid = false;
}
@ -1800,7 +1798,6 @@ void BKE_renderable_objects_iterator_begin(BLI_Iterator *iter, void *data_in)
data->iter.set = NULL;
iter->valid = true;
iter->data = data_in;
BKE_renderable_objects_iterator_next(iter);
}
@ -1855,7 +1852,6 @@ void BKE_renderable_objects_iterator_next(BLI_Iterator *iter)
return;
}
iter->current = NULL;
iter->valid = false;
}

View File

@ -43,12 +43,11 @@ typedef void (*IteratorBeginCb)(BLI_Iterator *iter, void *data_in);
IteratorCb callback_end_func = callback_end; \
BLI_Iterator iter_macro; \
iter_macro.skip = false; \
iter_macro.valid = false; \
iter_macro.valid = true; \
for (callback_begin(&iter_macro, (_data_in)); \
iter_macro.valid; \
callback_next(&iter_macro)) \
{ \
BLI_assert(iter_macro.valid); \
if (iter_macro.skip) { \
iter_macro.skip = false; \
continue; \

View File

@ -259,7 +259,6 @@ void DEG_objects_iterator_begin(BLI_Iterator *iter, DEGObjectsIteratorData *data
Depsgraph *graph = data->graph;
iter->data = data;
iter->valid = true;
DEG_evaluation_context_init(&data->eval_ctx, DAG_EVAL_RENDER);
@ -275,7 +274,7 @@ void DEG_objects_iterator_begin(BLI_Iterator *iter, DEGObjectsIteratorData *data
DEG::IDDepsNode *id_node = (DEG::IDDepsNode *) BLI_ghashIterator_getValue(&data->gh_iter);
deg_objects_iterator_step(iter, id_node);
if (iter->valid && iter->skip) {
if (iter->skip) {
DEG_objects_iterator_next(iter);
}
}
@ -299,7 +298,6 @@ void DEG_objects_iterator_next(BLI_Iterator *iter)
BLI_ghashIterator_step(&data->gh_iter);
if (BLI_ghashIterator_done(&data->gh_iter)) {
iter->current = NULL;
iter->valid = false;
return;
}
@ -307,7 +305,7 @@ void DEG_objects_iterator_next(BLI_Iterator *iter)
DEG::IDDepsNode *id_node = (DEG::IDDepsNode *) BLI_ghashIterator_getValue(&data->gh_iter);
deg_objects_iterator_step(iter, id_node);
} while (iter->valid && iter->skip);
} while (iter->skip);
}
void DEG_objects_iterator_end(BLI_Iterator *iter)

View File

@ -154,6 +154,7 @@ static void rna_Depsgraph_objects_begin(CollectionPropertyIterator *iter, Pointe
data->graph = (Depsgraph *)ptr->data;
data->flag = DEG_OBJECT_ITER_FLAG_SET;
((BLI_Iterator *)iter->internal.custom)->valid = true;
DEG_objects_iterator_begin(iter->internal.custom, data);
iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
}
@ -190,6 +191,7 @@ static void rna_Depsgraph_duplis_begin(CollectionPropertyIterator *iter, Pointer
data->graph = (Depsgraph *)ptr->data;
data->flag = DEG_OBJECT_ITER_FLAG_ALL;
((BLI_Iterator *)iter->internal.custom)->valid = true;
DEG_objects_iterator_begin(iter->internal.custom, data);
iter->valid = ((BLI_Iterator *)iter->internal.custom)->valid;
}