[Bf-blender-cvs] [4063e6c0587] functions: extract actual build step from builder

Jacques Lucke noreply at git.blender.org
Sat Jan 4 16:38:40 CET 2020


Commit: 4063e6c058750950f7ef9b7580ea417cc3bae613
Author: Jacques Lucke
Date:   Fri Jan 3 14:30:47 2020 +0100
Branches: functions
https://developer.blender.org/rB4063e6c058750950f7ef9b7580ea417cc3bae613

extract actual build step from builder

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

M	source/blender/functions/intern/node_tree_multi_function_network/builder.cc
M	source/blender/functions/intern/node_tree_multi_function_network/builder.h
M	source/blender/functions/intern/node_tree_multi_function_network/generate.cc

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

diff --git a/source/blender/functions/intern/node_tree_multi_function_network/builder.cc b/source/blender/functions/intern/node_tree_multi_function_network/builder.cc
index ce3cf074446..dddb4f0379c 100644
--- a/source/blender/functions/intern/node_tree_multi_function_network/builder.cc
+++ b/source/blender/functions/intern/node_tree_multi_function_network/builder.cc
@@ -10,26 +10,27 @@ FunctionTreeMFNetworkBuilder::FunctionTreeMFNetworkBuilder(
     const VTreeMultiFunctionMappings &function_tree_mappings,
     ResourceCollector &resources,
     IndexToRefMultiMap<MFBuilderSocket> &sockets_by_fsocket_id,
-    IndexToRefMap<MFBuilderOutputSocket> &socket_by_group_input_id)
+    IndexToRefMap<MFBuilderOutputSocket> &socket_by_group_input_id,
+    MFNetworkBuilder &builder)
     : m_function_tree(function_tree),
       m_preprocessed_function_tree_data(preprocessed_function_tree_data),
       m_function_tree_mappings(function_tree_mappings),
       m_resources(resources),
       m_sockets_by_fsocket_id(sockets_by_fsocket_id),
       m_socket_by_group_input_id(socket_by_group_input_id),
-      m_builder(BLI::make_unique<MFNetworkBuilder>())
+      m_builder(builder)
 {
 }
 
 MFBuilderFunctionNode &FunctionTreeMFNetworkBuilder::add_function(const MultiFunction &function)
 {
-  return m_builder->add_function(function);
+  return m_builder.add_function(function);
 }
 
 MFBuilderFunctionNode &FunctionTreeMFNetworkBuilder::add_function(const MultiFunction &function,
                                                                   const FNode &fnode)
 {
-  MFBuilderFunctionNode &node = m_builder->add_function(function);
+  MFBuilderFunctionNode &node = m_builder.add_function(function);
   this->map_data_sockets(fnode, node);
   return node;
 }
@@ -56,7 +57,7 @@ MFBuilderDummyNode &FunctionTreeMFNetworkBuilder::add_dummy(const FNode &fnode)
     }
   }
 
-  MFBuilderDummyNode &node = m_builder->add_dummy(
+  MFBuilderDummyNode &node = m_builder.add_dummy(
       fnode.name(), input_types, output_types, input_names, output_names);
   this->map_data_sockets(fnode, node);
   return node;
@@ -202,41 +203,4 @@ const MultiFunction &FNodeMFNetworkBuilder::get_vectorized_function(
   }
 }
 
-std::unique_ptr<FunctionTreeMFNetwork> FunctionTreeMFNetworkBuilder::build()
-{
-  // m_builder->to_dot__clipboard();
-
-  Vector<std::pair<uint, uint>> m_dummy_mappings;
-  for (uint fsocket_id : IndexRange(m_function_tree.socket_count())) {
-    ArrayRef<MFBuilderSocket *> mapped_sockets = m_sockets_by_fsocket_id.lookup(fsocket_id);
-    if (mapped_sockets.size() == 1) {
-      MFBuilderSocket &socket = *mapped_sockets[0];
-      if (socket.node().is_dummy()) {
-        m_dummy_mappings.append({fsocket_id, socket.id()});
-      }
-    }
-  }
-
-  auto network = BLI::make_unique<MFNetwork>(std::move(m_builder));
-
-  IndexToRefMap<const MFSocket> dummy_socket_by_fsocket_id(m_function_tree.socket_count());
-  IndexToRefMap<const FSocket> fsocket_by_dummy_socket_id(network->socket_ids().size());
-
-  for (auto pair : m_dummy_mappings) {
-    const FSocket &fsocket = m_function_tree.socket_by_id(pair.first);
-    const MFSocket &socket = network->socket_by_id(pair.second);
-
-    dummy_socket_by_fsocket_id.add_new(pair.first, socket);
-    fsocket_by_dummy_socket_id.add_new(pair.second, fsocket);
-  }
-
-  InlinedTreeMFSocketMap socket_map(m_function_tree,
-                                    *network,
-                                    std::move(dummy_socket_by_fsocket_id),
-                                    std::move(fsocket_by_dummy_socket_id));
-
-  return BLI::make_unique<FunctionTreeMFNetwork>(
-      m_function_tree, std::move(network), std::move(socket_map));
-}
-
 }  // namespace FN
diff --git a/source/blender/functions/intern/node_tree_multi_function_network/builder.h b/source/blender/functions/intern/node_tree_multi_function_network/builder.h
index 03d0345311c..24c85f51503 100644
--- a/source/blender/functions/intern/node_tree_multi_function_network/builder.h
+++ b/source/blender/functions/intern/node_tree_multi_function_network/builder.h
@@ -68,7 +68,7 @@ class FunctionTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
   IndexToRefMultiMap<MFBuilderSocket> &m_sockets_by_fsocket_id;
   IndexToRefMap<MFBuilderOutputSocket> &m_socket_by_group_input_id;
 
-  std::unique_ptr<MFNetworkBuilder> m_builder;
+  MFNetworkBuilder &m_builder;
 
  public:
   FunctionTreeMFNetworkBuilder(const FunctionNodeTree &function_tree,
@@ -76,7 +76,8 @@ class FunctionTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
                                const VTreeMultiFunctionMappings &function_tree_mappings,
                                ResourceCollector &resources,
                                IndexToRefMultiMap<MFBuilderSocket> &sockets_by_fsocket_id,
-                               IndexToRefMap<MFBuilderOutputSocket> &socket_by_group_input_id);
+                               IndexToRefMap<MFBuilderOutputSocket> &socket_by_group_input_id,
+                               MFNetworkBuilder &builder);
 
   const FunctionNodeTree &function_tree() const
   {
@@ -105,12 +106,12 @@ class FunctionTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
                                 ArrayRef<StringRef> input_names,
                                 ArrayRef<StringRef> output_names)
   {
-    return m_builder->add_dummy(name, input_types, output_types, input_names, output_names);
+    return m_builder.add_dummy(name, input_types, output_types, input_names, output_names);
   }
 
   void add_link(MFBuilderOutputSocket &from, MFBuilderInputSocket &to)
   {
-    m_builder->add_link(from, to);
+    m_builder.add_link(from, to);
   }
 
   template<typename T, typename... Args> T &construct(const char *name, Args &&... args)
@@ -218,8 +219,6 @@ class FunctionTreeMFNetworkBuilder : BLI::NonCopyable, BLI::NonMovable {
 
   const CPPType &cpp_type_from_property(const FNode &fnode, StringRefNull prop_name) const;
   MFDataType data_type_from_property(const FNode &fnode, StringRefNull prop_name) const;
-
-  std::unique_ptr<FunctionTreeMFNetwork> build();
 };
 
 class VSocketMFNetworkBuilder {
diff --git a/source/blender/functions/intern/node_tree_multi_function_network/generate.cc b/source/blender/functions/intern/node_tree_multi_function_network/generate.cc
index dfb1b1e96c0..6137cc92a5a 100644
--- a/source/blender/functions/intern/node_tree_multi_function_network/generate.cc
+++ b/source/blender/functions/intern/node_tree_multi_function_network/generate.cc
@@ -130,6 +130,46 @@ static bool insert_unlinked_inputs(FunctionTreeMFNetworkBuilder &builder,
   return true;
 }
 
+static std::unique_ptr<FunctionTreeMFNetwork> build(
+    const FunctionNodeTree &function_tree,
+    std::unique_ptr<MFNetworkBuilder> network_builder,
+    const IndexToRefMultiMap<MFBuilderSocket> &sockets_by_fsocket_id)
+{
+  // m_builder.to_dot__clipboard();
+
+  Vector<std::pair<uint, uint>> m_dummy_mappings;
+  for (uint fsocket_id : IndexRange(function_tree.socket_count())) {
+    ArrayRef<MFBuilderSocket *> mapped_sockets = sockets_by_fsocket_id.lookup(fsocket_id);
+    if (mapped_sockets.size() == 1) {
+      MFBuilderSocket &socket = *mapped_sockets[0];
+      if (socket.node().is_dummy()) {
+        m_dummy_mappings.append({fsocket_id, socket.id()});
+      }
+    }
+  }
+
+  auto network = BLI::make_unique<MFNetwork>(std::move(network_builder));
+
+  IndexToRefMap<const MFSocket> dummy_socket_by_fsocket_id(function_tree.socket_count());
+  IndexToRefMap<const FSocket> fsocket_by_dummy_socket_id(network->socket_ids().size());
+
+  for (auto pair : m_dummy_mappings) {
+    const FSocket &fsocket = function_tree.socket_by_id(pair.first);
+    const MFSocket &socket = network->socket_by_id(pair.second);
+
+    dummy_socket_by_fsocket_id.add_new(pair.first, socket);
+    fsocket_by_dummy_socket_id.add_new(pair.second, fsocket);
+  }
+
+  InlinedTreeMFSocketMap socket_map(function_tree,
+                                    *network,
+                                    std::move(dummy_socket_by_fsocket_id),
+                                    std::move(fsocket_by_dummy_socket_id));
+
+  return BLI::make_unique<FunctionTreeMFNetwork>(
+      function_tree, std::move(network), std::move(socket_map));
+}
+
 std::unique_ptr<FunctionTreeMFNetwork> generate_node_tree_multi_function_network(
     const FunctionNodeTree &function_tree, ResourceCollector &resources)
 {
@@ -138,13 +178,15 @@ std::unique_ptr<FunctionTreeMFNetwork> generate_node_tree_multi_function_network
   IndexToRefMultiMap<MFBuilderSocket> sockets_by_fsocket_id(function_tree.all_sockets().size());
   IndexToRefMap<MFBuilderOutputSocket> socket_by_group_input_id(
       function_tree.all_group_inputs().size());
+  auto network_builder = BLI::make_unique<MFNetworkBuilder>();
 
   FunctionTreeMFNetworkBuilder builder(function_tree,
                                        preprocessed_data,
                                        mappings,
                                        resources,
                                        sockets_by_fsocket_id,
-                                       socket_by_group_input_id);
+                                       socket_by_group_input_id,
+                                       *network_builder);
   if (!insert_nodes(builder, mappings)) {
     BLI_assert(false);
   }
@@ -155,7 +197,8 @@ std::unique_ptr<FunctionTreeMFNetwork> generate_node_tree_multi_function_network
     BLI_assert(false);
   }
 
-  auto function_tree_network = builder.build();
+  auto function_tree_network = build(
+      function_tree, std::move(network_builder), sockets_by_fsocket_id);
   return function_tree_network;
 }



More information about the Bf-blender-cvs mailing list