[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 &registry)
 {
-  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 &registry);
 void register_conversion_inserters(GraphInserters &inserters);
 
 }  // namespace DataFlowNodes



More information about the Bf-blender-cvs mailing list