[Bf-blender-cvs] [0ca9b637c54] master: Refactor: More const-correctness in node builder

Sergey Sharybin noreply at git.blender.org
Wed Sep 21 16:48:57 CEST 2022


Commit: 0ca9b637c5404e043f4e91db834d9ca01669c2e8
Author: Sergey Sharybin
Date:   Fri Sep 16 09:55:52 2022 +0200
Branches: master
https://developer.blender.org/rB0ca9b637c5404e043f4e91db834d9ca01669c2e8

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.

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

M	source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
M	source/blender/depsgraph/intern/builder/deg_builder_nodes.h

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

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);



More information about the Bf-blender-cvs mailing list