diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-06-06 12:22:13 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2017-06-06 12:22:13 +0300 |
commit | 28e44da8604bf856b8f82f5696edeac4010e3b4b (patch) | |
tree | aec99446398d0a1571c6ff6f5b16f103bc134685 /source | |
parent | 4e1257f2d86d71cd883803ea15a1bcb44aa661c7 (diff) |
Scene object iterator: Replace recursion with loop
This way we are not afraid of recursion being too deep.
That could have happened when having two collections which
are sharing same list of 1000s of objects.
Diffstat (limited to 'source')
-rw-r--r-- | source/blender/blenkernel/intern/collection.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/source/blender/blenkernel/intern/collection.c b/source/blender/blenkernel/intern/collection.c index 7d265b8fd02..f0ae3d8be1c 100644 --- a/source/blender/blenkernel/intern/collection.c +++ b/source/blender/blenkernel/intern/collection.c @@ -584,18 +584,14 @@ void BKE_scene_objects_iterator_begin(BLI_Iterator *iter, void *data_in) */ static LinkData *object_base_unique(GSet *gs, LinkData *link) { - if (link == NULL) { - return NULL; - } - - Object *ob = link->data; - if (!BLI_gset_haskey(gs, ob)) { - BLI_gset_add(gs, ob); - return link; - } - else { - return object_base_unique(gs, link->next); + for (; link != NULL; link = link->next) { + Object *ob = link->data; + if (!BLI_gset_haskey(gs, ob)) { + BLI_gset_add(gs, ob); + return link; + } } + return NULL; } void BKE_scene_objects_iterator_next(BLI_Iterator *iter) |