[Bf-blender-cvs] [7ffa8492977] functions: start removing graph inserters
Jacques Lucke
noreply at git.blender.org
Wed Jul 31 18:45:17 CEST 2019
Commit: 7ffa849297732285b3edfe039f65a6e165529e60
Author: Jacques Lucke
Date: Wed Jul 31 17:43:46 2019 +0200
Branches: functions
https://developer.blender.org/rB7ffa849297732285b3edfe039f65a6e165529e60
start removing graph inserters
===================================================================
M source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
M source/blender/functions/frontends/data_flow_nodes/inserters.cpp
M source/blender/functions/frontends/data_flow_nodes/inserters.hpp
M source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
M source/blender/functions/frontends/data_flow_nodes/registry.hpp
===================================================================
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 0c6801a706d..f7c091bbb19 100644
--- a/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/graph_generation.cpp
@@ -30,10 +30,15 @@ static void insert_placeholder_node(VTreeDataGraphBuilder &builder, VirtualNode
builder.map_data_sockets(node, vnode);
}
-static bool insert_functions_for_bnodes(VTreeDataGraphBuilder &builder, GraphInserters &inserters)
+static bool insert_functions_for_bnodes(VTreeDataGraphBuilder &builder)
{
+ auto inserters = get_node_inserters_map();
+
for (VirtualNode *vnode : builder.vtree().nodes()) {
- if (inserters.insert_node(builder, vnode)) {
+ NodeInserter *inserter = inserters.lookup_ptr(vnode->idname());
+ if (inserter) {
+ (*inserter)(builder, vnode);
+ BLI_assert(builder.verify_data_sockets_mapped(vnode));
continue;
}
@@ -109,7 +114,7 @@ ValueOrError<VTreeDataGraph> generate_graph(VirtualNodeTree &vtree)
VTreeDataGraphBuilder builder(vtree);
GraphInserters &inserters = get_standard_inserters();
- if (!insert_functions_for_bnodes(builder, inserters)) {
+ if (!insert_functions_for_bnodes(builder)) {
return BLI_ERROR_CREATE("error inserting functions for nodes");
}
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
index 85b25d4a343..9ad18d9c397 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.cpp
@@ -17,11 +17,18 @@ using TypePair = std::pair<SharedType, SharedType>;
static void initialize_standard_inserters(GraphInserters &inserters)
{
- register_node_inserters(inserters);
initialize_socket_inserters(inserters);
register_conversion_inserters(inserters);
}
+BLI_LAZY_INIT(StringMap<NodeInserter>, get_node_inserters_map)
+{
+ StringMap<NodeInserter> map;
+ NodeInserterRegistry registry(map);
+ register_node_inserters(registry);
+ return map;
+}
+
BLI_LAZY_INIT(GraphInserters, get_standard_inserters)
{
GraphInserters inserters;
@@ -35,21 +42,6 @@ GraphInserters::GraphInserters()
{
}
-void GraphInserters::reg_node_inserter(std::string idname, NodeInserter inserter)
-{
- m_node_inserters.add_new(idname, inserter);
-}
-
-void GraphInserters::reg_node_function(std::string idname, FunctionGetter getter)
-{
- auto inserter = [getter](VTreeDataGraphBuilder &builder, VirtualNode *vnode) {
- SharedFunction fn = getter();
- DFGB_Node *node = builder.insert_function(fn, vnode);
- builder.map_sockets(node, vnode);
- };
- this->reg_node_inserter(idname, inserter);
-}
-
void GraphInserters::reg_socket_loader(std::string idname, SocketLoader loader)
{
m_socket_loaders.add_new(idname, loader);
@@ -78,18 +70,6 @@ void GraphInserters::reg_conversion_function(StringRef from_type,
this->reg_conversion_inserter(from_type, to_type, inserter);
}
-bool GraphInserters::insert_node(VTreeDataGraphBuilder &builder, VirtualNode *vnode)
-{
- NodeInserter *inserter = m_node_inserters.lookup_ptr(vnode->bnode()->idname);
- if (inserter == nullptr) {
- return false;
- }
- (*inserter)(builder, vnode);
-
- BLI_assert(builder.verify_data_sockets_mapped(vnode));
- return true;
-}
-
class SocketLoaderBody : public TupleCallBody {
private:
Vector<bNodeTree *> m_btrees;
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
index 2419317667d..72cfcb6ca56 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters.hpp
@@ -22,9 +22,34 @@ typedef std::function<void(VTreeDataGraphBuilder &builder, DFGB_Socket from, DFG
typedef std::function<SharedFunction()> FunctionGetter;
+StringMap<NodeInserter> &get_node_inserters_map();
+
+class NodeInserterRegistry {
+ private:
+ StringMap<NodeInserter> &m_map;
+
+ public:
+ NodeInserterRegistry(StringMap<NodeInserter> &map) : m_map(map)
+ {
+ }
+
+ void inserter(StringRef idname, NodeInserter inserter)
+ {
+ m_map.add_new(idname, inserter);
+ }
+ void function(StringRef idname, FunctionGetter getter)
+ {
+ auto inserter = [getter](VTreeDataGraphBuilder &builder, VirtualNode *vnode) {
+ SharedFunction fn = getter();
+ DFGB_Node *node = builder.insert_function(fn, vnode);
+ builder.map_sockets(node, vnode);
+ };
+ this->inserter(idname, inserter);
+ }
+};
+
class GraphInserters {
private:
- StringMap<NodeInserter> m_node_inserters;
StringMap<SocketLoader> m_socket_loaders;
Map<std::pair<SharedType, SharedType>, ConversionInserter> m_conversion_inserters;
StringMap<SharedType> *m_type_by_data_type;
@@ -33,9 +58,6 @@ class GraphInserters {
public:
GraphInserters();
- void reg_node_inserter(std::string idname, NodeInserter inserter);
- void reg_node_function(std::string idname, FunctionGetter getter);
-
void reg_socket_loader(std::string idname, SocketLoader loader);
void reg_conversion_inserter(StringRef from_type,
@@ -44,8 +66,6 @@ class GraphInserters {
void reg_conversion_function(StringRef from_type, StringRef to_type, FunctionGetter getter);
- bool insert_node(VTreeDataGraphBuilder &builder, VirtualNode *vnode);
-
void insert_sockets(VTreeDataGraphBuilder &builder,
ArrayRef<VirtualSocket *> vsockets,
ArrayRef<DFGB_Socket> r_new_origins);
diff --git a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
index ac1e289b091..b909ab2717b 100644
--- a/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/inserters/nodes.cpp
@@ -306,28 +306,28 @@ static void INSERT_compare(VTreeDataGraphBuilder &builder, VirtualNode *vnode)
builder.insert_matching_function(fn, vnode);
}
-void register_node_inserters(GraphInserters &inserters)
+void register_node_inserters(NodeInserterRegistry ®istry)
{
- inserters.reg_node_function("fn_VectorDistanceNode", Functions::GET_FN_vector_distance);
- inserters.reg_node_function("fn_RandomNumberNode", Functions::GET_FN_random_number);
- inserters.reg_node_function("fn_MapRangeNode", Functions::GET_FN_map_range);
- inserters.reg_node_function("fn_FloatRangeNode", Functions::GET_FN_float_range);
- inserters.reg_node_function("fn_ObjectMeshNode", Functions::GET_FN_object_mesh_vertices);
-
- inserters.reg_node_inserter("fn_SeparateVectorNode", INSERT_separate_vector);
- inserters.reg_node_inserter("fn_CombineVectorNode", INSERT_combine_vector);
- inserters.reg_node_inserter("fn_ObjectTransformsNode", INSERT_object_transforms);
- inserters.reg_node_inserter("fn_FloatMathNode", INSERT_float_math);
- inserters.reg_node_inserter("fn_VectorMathNode", INSERT_vector_math);
- inserters.reg_node_inserter("fn_ClampNode", INSERT_clamp);
- inserters.reg_node_inserter("fn_GetListElementNode", INSERT_get_list_element);
- inserters.reg_node_inserter("fn_PackListNode", INSERT_pack_list);
- inserters.reg_node_inserter("fn_CallNode", INSERT_call);
- inserters.reg_node_inserter("fn_SwitchNode", INSERT_switch);
- inserters.reg_node_inserter("fn_ListLengthNode", INSERT_list_length);
- inserters.reg_node_inserter("fn_CompareNode", INSERT_compare);
- inserters.reg_node_inserter("fn_SeparateColorNode", INSERT_separate_color);
- inserters.reg_node_inserter("fn_CombineColorNode", INSERT_combine_color);
+ registry.function("fn_VectorDistanceNode", Functions::GET_FN_vector_distance);
+ registry.function("fn_RandomNumberNode", Functions::GET_FN_random_number);
+ registry.function("fn_MapRangeNode", Functions::GET_FN_map_range);
+ registry.function("fn_FloatRangeNode", Functions::GET_FN_float_range);
+ registry.function("fn_ObjectMeshNode", Functions::GET_FN_object_mesh_vertices);
+
+ registry.inserter("fn_SeparateVectorNode", INSERT_separate_vector);
+ registry.inserter("fn_CombineVectorNode", INSERT_combine_vector);
+ registry.inserter("fn_ObjectTransformsNode", INSERT_object_transforms);
+ registry.inserter("fn_FloatMathNode", INSERT_float_math);
+ registry.inserter("fn_VectorMathNode", INSERT_vector_math);
+ registry.inserter("fn_ClampNode", INSERT_clamp);
+ registry.inserter("fn_GetListElementNode", INSERT_get_list_element);
+ registry.inserter("fn_PackListNode", INSERT_pack_list);
+ registry.inserter("fn_CallNode", INSERT_call);
+ registry.inserter("fn_SwitchNode", INSERT_switch);
+ registry.inserter("fn_ListLengthNode", INSERT_list_length);
+ registry.inserter("fn_CompareNode", INSERT_compare);
+ registry.inserter("fn_SeparateColorNode", INSERT_separate_color);
+ registry.inserter("fn_CombineColorNode", INSERT_combine_color);
}
} // namespace DataFlowNodes
diff --git a/source/blender/functions/frontends/data_flow_nodes/registry.hpp b/source/blender/functions/frontends/data_flow_nodes/registry.hpp
index 9c64b9bce71..9a6b799fa2f 100644
--- a/source/blender/functions/frontends/data_flow_nodes/registry.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/registry.hpp
@@ -6,7 +6,7 @@ namespace FN {
namespace DataFlowNodes {
void initialize_socket_inserters(GraphInserters &inserters);
-void register_node_inserters(GraphInserters &inserters);
+void register_node_inserters(NodeInserterRegistry ®istry);
void register_conversion_inserters(GraphInserters &inserters);
} // namespace DataFlowNodes
More information about the Bf-blender-cvs
mailing list