[Bf-blender-cvs] [90d317f] depsgraph_cleanup: Depsgraph: Add some utility macro to avoid long typecasts

Sergey Sharybin noreply at git.blender.org
Thu May 26 18:04:07 CEST 2016


Commit: 90d317f161e3e73b5a30d90c74e6636b89bf7009
Author: Sergey Sharybin
Date:   Thu May 26 17:37:55 2016 +0200
Branches: depsgraph_cleanup
https://developer.blender.org/rB90d317f161e3e73b5a30d90c74e6636b89bf7009

Depsgraph: Add some utility macro to avoid long typecasts

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

M	source/blender/depsgraph/intern/builder/deg_builder.cc
M	source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
M	source/blender/depsgraph/intern/depsgraph.cc
M	source/blender/depsgraph/intern/depsgraph_debug.cc
M	source/blender/depsgraph/intern/depsgraph_tag.cc
M	source/blender/depsgraph/intern/eval/deg_eval_flush.cc
M	source/blender/depsgraph/intern/nodes/deg_node.cc
M	source/blender/depsgraph/intern/nodes/deg_node_component.cc
M	source/blender/depsgraph/util/deg_util_foreach.h

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder.cc b/source/blender/depsgraph/intern/builder/deg_builder.cc
index fddf0e4..4ed8352 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder.cc
@@ -108,9 +108,8 @@ void deg_graph_build_finalize(Depsgraph *graph)
 	}
 
 	/* Re-tag IDs for update if it was tagged before the relations update tag. */
-	GHashIterator gh_iter;
-	GHASH_ITER (gh_iter, graph->id_hash) {
-		IDDepsNode *id_node = reinterpret_cast<IDDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+	GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, graph->id_hash)
+	{
 		ID *id = id_node->id;
 		if (id->tag & LIB_TAG_ID_RECALC_ALL &&
 		    id->tag & LIB_TAG_DOIT)
@@ -119,6 +118,7 @@ void deg_graph_build_finalize(Depsgraph *graph)
 			id->tag &= ~LIB_TAG_DOIT;
 		}
 	}
+	GHASH_FOREACH_END();
 }
 
 }  // namespace DEG
diff --git a/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc b/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
index a9f2185..c49387b 100644
--- a/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
+++ b/source/blender/depsgraph/intern/debug/deg_debug_graphviz.cc
@@ -370,11 +370,11 @@ static void deg_debug_graphviz_node(const DebugContext &ctx,
 			}
 			else {
 				deg_debug_graphviz_node_cluster_begin(ctx, node);
-				GHashIterator gh_iter;
-				GHASH_ITER (gh_iter, id_node->components) {
-					const ComponentDepsNode *comp = reinterpret_cast<const ComponentDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+				GHASH_FOREACH_BEGIN(const ComponentDepsNode *, comp, id_node->components)
+				{
 					deg_debug_graphviz_node(ctx, comp);
 				}
+				GHASH_FOREACH_END();
 				deg_debug_graphviz_node_cluster_end(ctx);
 			}
 			break;
@@ -405,11 +405,11 @@ static void deg_debug_graphviz_node(const DebugContext &ctx,
 		{
 			ComponentDepsNode *comp_node = (ComponentDepsNode *)node;
 			if (BLI_ghash_size(comp_node->operations) > 0) {
-				GHashIterator gh_iter;
-				GHASH_ITER (gh_iter, comp_node->operations) {
-					const DepsNode *op_node = reinterpret_cast<const DepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+				GHASH_FOREACH_BEGIN(const DepsNode *, op_node, comp_node->operations)
+				{
 					deg_debug_graphviz_node(ctx, op_node);
 				}
+				GHASH_FOREACH_END();
 				deg_debug_graphviz_node_cluster_end(ctx);
 			}
 			else {
@@ -519,11 +519,11 @@ static void deg_debug_graphviz_graph_nodes(const DebugContext &ctx,
 	if (graph->root_node) {
 		deg_debug_graphviz_node(ctx, graph->root_node);
 	}
-	GHashIterator gh_iter;
-	GHASH_ITER (gh_iter, graph->id_hash) {
-		DepsNode *node = reinterpret_cast<DepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+	GHASH_FOREACH_BEGIN (DepsNode *, node, graph->id_hash)
+	{
 		deg_debug_graphviz_node(ctx, node);
 	}
+	GHASH_FOREACH_END();
 	TimeSourceDepsNode *time_source = graph->find_time_source(NULL);
 	if (time_source != NULL) {
 		deg_debug_graphviz_node(ctx, time_source);
@@ -533,19 +533,19 @@ static void deg_debug_graphviz_graph_nodes(const DebugContext &ctx,
 static void deg_debug_graphviz_graph_relations(const DebugContext &ctx,
                                                const Depsgraph *graph)
 {
-	GHashIterator gh_iter;
-	GHASH_ITER (gh_iter, graph->id_hash) {
-		IDDepsNode *id_node = reinterpret_cast<IDDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
-		GHashIterator gh_comp_iter;
-		GHASH_ITER (gh_comp_iter, id_node->components) {
-			ComponentDepsNode *comp_node = reinterpret_cast<ComponentDepsNode *>(BLI_ghashIterator_getValue(&gh_comp_iter));
-			GHashIterator gh_op_iter;
-			GHASH_ITER (gh_op_iter, comp_node->operations) {
-				OperationDepsNode *op_node = reinterpret_cast<OperationDepsNode *>(BLI_ghashIterator_getValue(&gh_op_iter));
+	GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, graph->id_hash)
+	{
+		GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, id_node->components)
+		{
+			GHASH_FOREACH_BEGIN(OperationDepsNode *, op_node, comp_node->operations)
+			{
 				deg_debug_graphviz_node_relations(ctx, op_node);
 			}
+			GHASH_FOREACH_END();
 		}
+		GHASH_FOREACH_END();
 	}
+	GHASH_FOREACH_END();
 
 	TimeSourceDepsNode *time_source = graph->find_time_source(NULL);
 	if (time_source != NULL) {
diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc
index 3739b08..8207ea6 100644
--- a/source/blender/depsgraph/intern/depsgraph.cc
+++ b/source/blender/depsgraph/intern/depsgraph.cc
@@ -309,11 +309,11 @@ void Depsgraph::remove_subgraph_node(SubgraphDepsNode *subgraph_node)
 
 void Depsgraph::clear_subgraph_nodes()
 {
-	GSetIterator gs_iter;
-	GSET_ITER (gs_iter, subgraphs) {
-		SubgraphDepsNode *subgraph_node = reinterpret_cast<SubgraphDepsNode *>(BLI_gsetIterator_getKey(&gs_iter));
+	GSET_FOREACH_BEGIN(SubgraphDepsNode *, subgraph_node, subgraphs)
+	{
 		OBJECT_GUARDED_DELETE(subgraph_node, SubgraphDepsNode);
 	}
+	GSET_FOREACH_END();
 	BLI_gset_clear(subgraphs, NULL);
 }
 
@@ -347,11 +347,11 @@ void Depsgraph::remove_id_node(const ID *id)
 
 void Depsgraph::clear_id_nodes()
 {
-	GHashIterator gh_iter;
-	GHASH_ITER (gh_iter, id_hash) {
-		IDDepsNode *id_node = reinterpret_cast<IDDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+	GHASH_FOREACH_BEGIN(IDDepsNode *, id_node, id_hash)
+	{
 		OBJECT_GUARDED_DELETE(id_node, IDDepsNode);
 	}
+	GHASH_FOREACH_END();
 	BLI_ghash_clear(id_hash, NULL, NULL);
 }
 
diff --git a/source/blender/depsgraph/intern/depsgraph_debug.cc b/source/blender/depsgraph/intern/depsgraph_debug.cc
index 1758b23..1be70ad 100644
--- a/source/blender/depsgraph/intern/depsgraph_debug.cc
+++ b/source/blender/depsgraph/intern/depsgraph_debug.cc
@@ -218,21 +218,21 @@ void DEG_stats_simple(const Depsgraph *graph, size_t *r_outer,
 		size_t tot_outer = 0;
 		size_t tot_rels = 0;
 
-		GHashIterator gh_iter;
-		GHASH_ITER (gh_iter, deg_graph->id_hash) {
-			DEG::IDDepsNode *id_node = reinterpret_cast<DEG::IDDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+		GHASH_FOREACH_BEGIN(DEG::IDDepsNode *, id_node, deg_graph->id_hash)
+		{
 			tot_outer++;
-			GHashIterator gh_comp_iter;
-			GHASH_ITER (gh_iter, id_node->components) {
-				DEG::ComponentDepsNode *comp_node = reinterpret_cast<DEG::ComponentDepsNode *>(BLI_ghashIterator_getValue(&gh_comp_iter));
+			GHASH_FOREACH_BEGIN(DEG::ComponentDepsNode *, comp_node, id_node->components)
+			{
 				tot_outer++;
-				GHashIterator gh_op_iter;
-				GHASH_ITER (gh_op_iter, comp_node->operations) {
-					DEG::OperationDepsNode *op_node = reinterpret_cast<DEG::OperationDepsNode *>(BLI_ghashIterator_getValue(&gh_op_iter));
+				GHASH_FOREACH_BEGIN(DEG::OperationDepsNode *, op_node, comp_node->operations)
+				{
 					tot_rels += op_node->inlinks.size();
 				}
+				GHASH_FOREACH_END();
 			}
+			GHASH_FOREACH_END();
 		}
+		GHASH_FOREACH_END();
 
 		DEG::TimeSourceDepsNode *time_source = deg_graph->find_time_source(NULL);
 		if (time_source != NULL) {
diff --git a/source/blender/depsgraph/intern/depsgraph_tag.cc b/source/blender/depsgraph/intern/depsgraph_tag.cc
index abdffec..ea5afaa 100644
--- a/source/blender/depsgraph/intern/depsgraph_tag.cc
+++ b/source/blender/depsgraph/intern/depsgraph_tag.cc
@@ -314,9 +314,8 @@ void DEG_graph_on_visible_update(Main *bmain, Scene *scene)
 		 * This is mainly needed on file load only, after that updates of invisible objects
 		 * will be stored in the pending list.
 		 */
-		GHashIterator gh_iter;
-		GHASH_ITER (gh_iter, graph->id_hash) {
-			DEG::IDDepsNode *id_node = reinterpret_cast<DEG::IDDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+		GHASH_FOREACH_BEGIN(DEG::IDDepsNode *, id_node, graph->id_hash)
+		{
 			ID *id = id_node->id;
 			if ((id->tag & LIB_TAG_ID_RECALC_ALL) != 0 ||
 			    (id_node->layers & scene->lay_updated) == 0)
@@ -342,6 +341,7 @@ void DEG_graph_on_visible_update(Main *bmain, Scene *scene)
 				}
 			}
 		}
+		GHASH_FOREACH_END();
 	}
 	scene->lay_updated |= graph->layers;
 }
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
index 726da76..7883847 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_flush.cc
@@ -119,9 +119,8 @@ void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
 	 * NOTE: Count how many nodes we need to handle - entry nodes may be
 	 *       component nodes which don't count for this purpose!
 	 */
-	GSetIterator gs_iter;
-	GSET_ITER (gs_iter, graph->entry_tags) {
-		OperationDepsNode *node = reinterpret_cast<OperationDepsNode *>(BLI_gsetIterator_getKey(&gs_iter));
+	GSET_FOREACH_BEGIN(OperationDepsNode *, node, graph->entry_tags)
+	{
 		IDDepsNode *id_node = node->owner->owner;
 		queue.push(node);
 		if (id_node->done == 0) {
@@ -130,6 +129,7 @@ void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
 		}
 		node->scheduled = true;
 	}
+	GSET_FOREACH_END();
 
 	while (!queue.empty()) {
 		OperationDepsNode *node = queue.front();
@@ -181,11 +181,11 @@ void deg_graph_flush_updates(Main *bmain, Depsgraph *graph)
 		 */
 		ComponentDepsNode *component = node->owner;
 		if ((component->flags & DEPSCOMP_FULLY_SCHEDULED) == 0) {
-			GHashIterator gh_iter;
-			GHASH_ITER (gh_iter, component->operations) {
-				OperationDepsNode *op = reinterpret_cast<OperationDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+			GHASH_FOREACH_BEGIN(OperationDepsNode *, op, component->operations)
+			{
 				op->flag |= DEPSOP_FLAG_NEEDS_UPDATE;
 			}
+			GHASH_FOREACH_END();
 			component->flags |= DEPSCOMP_FULLY_SCHEDULED;
 		}
 	}
diff --git a/source/blender/depsgraph/intern/nodes/deg_node.cc b/source/blender/depsgraph/intern/nodes/deg_node.cc
index 6f85578..5e6672d 100644
--- a/source/blender/depsgraph/intern/nodes/deg_node.cc
+++ b/source/blender/depsgraph/intern/nodes/deg_node.cc
@@ -228,19 +228,18 @@ void IDDepsNode::remove_component(eDepsNode_Type type, const string &name)
 
 void IDDepsNode::clear_components()
 {
-	GHashIterator gh_iter;
-	GHASH_ITER (gh_iter, components) {
-		ComponentDepsNode *comp_node = reinterpret_cast<ComponentDepsNode *>(BLI_ghashIterator_getValue(&gh_iter));
+	GHASH_FOREACH_BEGIN(ComponentDepsNode *, comp_node, components)

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list