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>2019-02-18 18:24:51 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2019-02-18 18:24:51 +0300
commitd02ad52b2de250fa371f664f1f2d08329e0b5a20 (patch)
treed6ca23e8f739d8128c50a8040612ede912bcdd42 /source/blender/depsgraph
parentc3ceefb6715bc17fd3a6a0f409eb27d50695681b (diff)
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).
Diffstat (limited to 'source/blender/depsgraph')
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc3
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.h2
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h2
-rw-r--r--source/blender/depsgraph/intern/node/deg_node.h2
-rw-r--r--source/blender/depsgraph/intern/node/deg_node_component.cc2
5 files changed, 6 insertions, 5 deletions
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;