Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2017-06-06 12:22:13 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2017-06-06 12:22:13 +0300
commit28e44da8604bf856b8f82f5696edeac4010e3b4b (patch)
treeaec99446398d0a1571c6ff6f5b16f103bc134685 /source/blender/blenkernel
parent4e1257f2d86d71cd883803ea15a1bcb44aa661c7 (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/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/collection.c18
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)