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.
This commit is contained in:
Sergey Sharybin
2022-09-16 09:55:52 +02:00
parent f948ffaa9f
commit 0ca9b637c5
2 changed files with 26 additions and 8 deletions

View File

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

View File

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