[Bf-blender-cvs] [e7ff5b14708] functions: don't use output parameter when building data flow graph

Jacques Lucke noreply at git.blender.org
Thu Jul 4 16:46:11 CEST 2019


Commit: e7ff5b14708cc5875728333afc437e62f1ecb430
Author: Jacques Lucke
Date:   Thu Jul 4 15:02:10 2019 +0200
Branches: functions
https://developer.blender.org/rBe7ff5b14708cc5875728333afc437e62f1ecb430

don't use output parameter when building data flow graph

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

M	source/blender/functions/core/data_flow_graph.cpp
M	source/blender/functions/core/data_flow_graph.hpp
M	source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp

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

diff --git a/source/blender/functions/core/data_flow_graph.cpp b/source/blender/functions/core/data_flow_graph.cpp
index 939f08469dc..de282559f5d 100644
--- a/source/blender/functions/core/data_flow_graph.cpp
+++ b/source/blender/functions/core/data_flow_graph.cpp
@@ -2,10 +2,13 @@
 
 namespace FN {
 
-SharedDataFlowGraph DataFlowGraph::FromBuilder(DataFlowGraphBuilder &builder,
-                                               DataFlowGraph::ToBuilderMapping &r_mapping)
+DataFlowGraph::BuildResult DataFlowGraph::FromBuilder(DataFlowGraphBuilder &builder)
 {
-  auto graph = SharedDataFlowGraph::New();
+  BuildResult result = {SharedDataFlowGraph::New(), {}};
+
+  SharedDataFlowGraph &graph = result.graph;
+  ToBuilderMapping &mapping = result.mapping;
+
   auto dfgb_nodes = builder.nodes();
 
   graph->m_nodes.reserve(dfgb_nodes.size());
@@ -18,15 +21,15 @@ SharedDataFlowGraph DataFlowGraph::FromBuilder(DataFlowGraphBuilder &builder,
                                  dfgb_node->source(),
                                  graph->m_inputs.size(),
                                  graph->m_outputs.size()));
-    r_mapping.node_indices.add_new(dfgb_node, node_id);
+    mapping.node_indices.add_new(dfgb_node, node_id);
 
     for (DFGB_Socket dfgb_input : dfgb_node->inputs()) {
-      r_mapping.input_socket_indices.add_new(dfgb_input, graph->m_inputs.size());
+      mapping.input_socket_indices.add_new(dfgb_input, graph->m_inputs.size());
       graph->m_inputs.append(InputSocket(node_id, dummy));
     }
     for (DFGB_Socket output : dfgb_node->outputs()) {
       auto targets = output.targets();
-      r_mapping.output_socket_indices.add_new(output, graph->m_outputs.size());
+      mapping.output_socket_indices.add_new(output, graph->m_outputs.size());
       graph->m_outputs.append(OutputSocket(node_id, graph->m_targets.size(), targets.size()));
       for (uint i = 0; i < targets.size(); i++) {
         graph->m_targets.append(dummy);
@@ -36,19 +39,19 @@ SharedDataFlowGraph DataFlowGraph::FromBuilder(DataFlowGraphBuilder &builder,
 
   for (DFGB_Node *dfgb_node : dfgb_nodes) {
     for (DFGB_Socket dfgb_input : dfgb_node->inputs()) {
-      uint input_id = r_mapping.input_socket_indices.lookup(dfgb_input);
+      uint input_id = mapping.input_socket_indices.lookup(dfgb_input);
       Optional<DFGB_Socket> dfgb_origin = dfgb_input.origin();
       BLI_assert(dfgb_origin.has_value());
-      uint origin_id = r_mapping.output_socket_indices.lookup(dfgb_origin.value());
+      uint origin_id = mapping.output_socket_indices.lookup(dfgb_origin.value());
       graph->m_inputs[input_id].origin = origin_id;
     }
     for (DFGB_Socket dfgb_output : dfgb_node->outputs()) {
-      uint output_id = r_mapping.output_socket_indices.lookup(dfgb_output);
+      uint output_id = mapping.output_socket_indices.lookup(dfgb_output);
       uint start = graph->m_outputs[output_id].targets_start;
       auto dfgb_targets = dfgb_output.targets();
       for (uint i = 0; i < dfgb_targets.size(); i++) {
         DFGB_Socket dfgb_target = dfgb_targets[i];
-        uint target_id = r_mapping.input_socket_indices.lookup(dfgb_target);
+        uint target_id = mapping.input_socket_indices.lookup(dfgb_target);
         graph->m_targets[start + i] = target_id;
       }
     }
@@ -56,7 +59,7 @@ SharedDataFlowGraph DataFlowGraph::FromBuilder(DataFlowGraphBuilder &builder,
 
   graph->m_source_info_pool = std::move(builder.m_source_info_pool);
 
-  return graph;
+  return result;
 }
 
 DataFlowGraph::~DataFlowGraph()
diff --git a/source/blender/functions/core/data_flow_graph.hpp b/source/blender/functions/core/data_flow_graph.hpp
index 9bba5d16a8e..9942315aeb1 100644
--- a/source/blender/functions/core/data_flow_graph.hpp
+++ b/source/blender/functions/core/data_flow_graph.hpp
@@ -205,8 +205,12 @@ class DataFlowGraph : public RefCountedBase {
     }
   };
 
-  static SharedDataFlowGraph FromBuilder(DataFlowGraphBuilder &builder,
-                                         ToBuilderMapping &r_mapping);
+  struct BuildResult {
+    SharedDataFlowGraph graph;
+    ToBuilderMapping mapping;
+  };
+
+  static BuildResult FromBuilder(DataFlowGraphBuilder &builder);
 
   Range<uint> node_ids() const
   {
diff --git a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
index 92d785f5b92..e03b58d42fe 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -88,8 +88,8 @@ static FunctionGraph finalize_function_graph(DataFlowGraphBuilder &builder,
                                              DFGB_SocketVector input_sockets,
                                              DFGB_SocketVector output_sockets)
 {
-  DataFlowGraph::ToBuilderMapping builder_mapping;
-  auto compact_graph = DataFlowGraph::FromBuilder(builder, builder_mapping);
+  auto build_result = DataFlowGraph::FromBuilder(builder);
+  auto &builder_mapping = build_result.mapping;
 
   DFGraphSocketSetVector inputs, outputs;
 
@@ -100,7 +100,7 @@ static FunctionGraph finalize_function_graph(DataFlowGraphBuilder &builder,
     outputs.add(builder_mapping.map_socket(socket));
   }
 
-  return FunctionGraph(compact_graph, inputs, outputs);
+  return FunctionGraph(build_result.graph, inputs, outputs);
 }
 
 static void find_interface_sockets(BTreeGraphBuilder &builder,



More information about the Bf-blender-cvs mailing list