[Bf-blender-cvs] [28e44da8604] blender2.8: Scene object iterator: Replace recursion with loop

Sergey Sharybin noreply at git.blender.org
Tue Jun 6 11:23:12 CEST 2017


Commit: 28e44da8604bf856b8f82f5696edeac4010e3b4b
Author: Sergey Sharybin
Date:   Tue Jun 6 11:22:13 2017 +0200
Branches: blender2.8
https://developer.blender.org/rB28e44da8604bf856b8f82f5696edeac4010e3b4b

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.

===================================================================

M	source/blender/blenkernel/intern/collection.c

===================================================================

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)




More information about the Bf-blender-cvs mailing list