diff options
author | Sergey Sharybin <sergey@blender.org> | 2022-09-16 10:55:52 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey@blender.org> | 2022-09-21 17:48:48 +0300 |
commit | 0ca9b637c5404e043f4e91db834d9ca01669c2e8 (patch) | |
tree | 62a517cee5041d5aa511ad1eb05beaf406655b33 | |
parent | f948ffaa9f6676839e5ec3c3da3570f9bb0cb33e (diff) |
Refactor: More const-correctness in node builder
Make it so find type of methods receive const pointers and do not
modify graph topology.
The latter was violated in the find_operation() which could have
created an empty component. This is not intended behavior.
No functional changes is expected.
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes.cc | 22 | ||||
-rw-r--r-- | source/blender/depsgraph/intern/builder/deg_builder_nodes.h | 12 |
2 files changed, 26 insertions, 8 deletions
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc index 80be781da48..db89a60f81e 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc @@ -208,7 +208,7 @@ IDNode *DepsgraphNodeBuilder::add_id_node(ID *id) return id_node; } -IDNode *DepsgraphNodeBuilder::find_id_node(ID *id) +IDNode *DepsgraphNodeBuilder::find_id_node(const ID *id) { return graph_->find_id_node(id); } @@ -228,6 +228,17 @@ ComponentNode *DepsgraphNodeBuilder::add_component_node(ID *id, return comp_node; } +ComponentNode *DepsgraphNodeBuilder::find_component_node(const ID *id, + const NodeType comp_type, + const char *comp_name) +{ + IDNode *id_node = find_id_node(id); + if (id_node == nullptr) { + return nullptr; + } + return id_node->find_component(comp_type, comp_name); +} + OperationNode *DepsgraphNodeBuilder::add_operation_node(ComponentNode *comp_node, OperationCode opcode, const DepsEvalOperationCb &op, @@ -311,19 +322,22 @@ bool DepsgraphNodeBuilder::has_operation_node(ID *id, return find_operation_node(id, comp_type, comp_name, opcode, name, name_tag) != nullptr; } -OperationNode *DepsgraphNodeBuilder::find_operation_node(ID *id, +OperationNode *DepsgraphNodeBuilder::find_operation_node(const ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const char *name, int name_tag) { - ComponentNode *comp_node = add_component_node(id, comp_type, comp_name); + ComponentNode *comp_node = find_component_node(id, comp_type, comp_name); + if (comp_node == nullptr) { + return nullptr; + } return comp_node->find_operation(opcode, name, name_tag); } OperationNode *DepsgraphNodeBuilder::find_operation_node( - ID *id, NodeType comp_type, OperationCode opcode, const char *name, int name_tag) + const ID *id, NodeType comp_type, OperationCode opcode, const char *name, int name_tag) { return find_operation_node(id, comp_type, "", opcode, name, name_tag); } diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h index d5ac601ebff..a749409b3ab 100644 --- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.h +++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.h @@ -92,10 +92,11 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder { int foreach_id_cow_detect_need_for_update_callback(ID *id_cow_self, ID *id_pointer); IDNode *add_id_node(ID *id); - IDNode *find_id_node(ID *id); + IDNode *find_id_node(const ID *id); TimeSourceNode *add_time_source(); ComponentNode *add_component_node(ID *id, NodeType comp_type, const char *comp_name = ""); + ComponentNode *find_component_node(const ID *id, NodeType comp_type, const char *comp_name = ""); OperationNode *add_operation_node(ComponentNode *comp_node, OperationCode opcode, @@ -137,15 +138,18 @@ class DepsgraphNodeBuilder : public DepsgraphBuilder { const char *name = "", int name_tag = -1); - OperationNode *find_operation_node(ID *id, + OperationNode *find_operation_node(const ID *id, NodeType comp_type, const char *comp_name, OperationCode opcode, const char *name = "", int name_tag = -1); - OperationNode *find_operation_node( - ID *id, NodeType comp_type, OperationCode opcode, const char *name = "", int name_tag = -1); + OperationNode *find_operation_node(const ID *id, + NodeType comp_type, + OperationCode opcode, + const char *name = "", + int name_tag = -1); virtual void build_id(ID *id); |