[Bf-blender-cvs] [d02ad52b2de] master: Depsgraph: Make node an owner of its name

Sergey Sharybin noreply at git.blender.org
Mon Feb 18 16:29:25 CET 2019


Commit: d02ad52b2de250fa371f664f1f2d08329e0b5a20
Author: Sergey Sharybin
Date:   Mon Feb 18 16:24:51 2019 +0100
Branches: master
https://developer.blender.org/rBd02ad52b2de250fa371f664f1f2d08329e0b5a20

Depsgraph: Make node an owner of its name

The initial idea of using char pointer was to save some
memory since the dependency graph was kind of the one
with the main database.

Nowadays dependency graph should be separatable from the
main database and being self-sustainable.

Other issue which was caused by this pointer is the
re-tagging of operations during relations update: it is
possible to have node which as tagged for update but had
the owner of the name removed (i.e. driver or bone was
removed).

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

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h
M	source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
M	source/blender/depsgraph/intern/node/deg_node.h
M	source/blender/depsgraph/intern/node/deg_node_component.cc

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

diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index bcefe14e084..524462793fc 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -377,7 +377,8 @@ void DepsgraphNodeBuilder::end_build()
 		if (comp_node == NULL) {
 			continue;
 		}
-		OperationNode *op_node = comp_node->find_operation(entry_tag.opcode, entry_tag.name, entry_tag.name_tag);
+		OperationNode *op_node = comp_node->find_operation(
+		        entry_tag.opcode, entry_tag.name.c_str(), entry_tag.name_tag);
 		if (op_node == NULL) {
 			continue;
 		}
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
index 602eee1e403..3b55131d7e2 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h
@@ -238,7 +238,7 @@ protected:
 		ID *id_orig;
 		NodeType component_type;
 		OperationCode opcode;
-		const char *name;
+		string name;
 		int name_tag;
 	};
 	vector<SavedEntryTag> saved_entry_tags_;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
index f385bff0242..613e8f86baf 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
@@ -155,7 +155,7 @@ bool DepsgraphRelationBuilder::is_same_bone_dependency(const KeyFrom& key_from,
 		return false;
 	}
 	/* ... BUT, we also need to check if it's same bone.  */
-	if (!STREQ(op_from->owner->name, op_to->owner->name)) {
+	if (op_from->owner->name != op_to->owner->name) {
 		return false;
 	}
 	return true;
diff --git a/source/blender/depsgraph/intern/node/deg_node.h b/source/blender/depsgraph/intern/node/deg_node.h
index 64b38be3190..0677b0edc15 100644
--- a/source/blender/depsgraph/intern/node/deg_node.h
+++ b/source/blender/depsgraph/intern/node/deg_node.h
@@ -155,7 +155,7 @@ struct Node {
 	 * have relationships between these nodes. */
 	typedef vector<Relation *> Relations;
 
-	const char *name;     /* Identifier - mainly for debugging purposes. */
+	string name;     /* Identifier - mainly for debugging purposes. */
 	NodeType type;  /* Structural type of node. */
 	Relations inlinks;    /* Nodes which this one depends on. */
 	Relations outlinks;   /* Nodes which depend on this one. */
diff --git a/source/blender/depsgraph/intern/node/deg_node_component.cc b/source/blender/depsgraph/intern/node/deg_node_component.cc
index 4d16ff7095c..06ede835a27 100644
--- a/source/blender/depsgraph/intern/node/deg_node_component.cc
+++ b/source/blender/depsgraph/intern/node/deg_node_component.cc
@@ -164,7 +164,7 @@ OperationNode *ComponentNode::find_operation(OperationIDKey key) const
 		for (OperationNode *op_node : operations) {
 			if (op_node->opcode == key.opcode &&
 			    op_node->name_tag == key.name_tag &&
-			    STREQ(op_node->name, key.name))
+			    STREQ(op_node->name.c_str(), key.name))
 			{
 				node = op_node;
 				break;



More information about the Bf-blender-cvs mailing list