[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