[Bf-blender-cvs] [faeb98b48eb] functions: compute type of every socket only once

Jacques Lucke noreply at git.blender.org
Thu Aug 1 18:23:28 CEST 2019


Commit: faeb98b48eb94e51a9a17a8652d6fe24a8e90f6d
Author: Jacques Lucke
Date:   Thu Aug 1 15:36:37 2019 +0200
Branches: functions
https://developer.blender.org/rBfaeb98b48eb94e51a9a17a8652d6fe24a8e90f6d

compute type of every socket only once

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

M	source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
M	source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp

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

diff --git a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
index 62cf96094f0..056378bc900 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.cpp
@@ -34,6 +34,20 @@ VTreeDataGraphBuilder::VTreeDataGraphBuilder(VirtualNodeTree &vtree)
       m_type_by_data_type(get_type_by_data_type_map()),
       m_data_type_by_idname(get_data_type_by_idname_map())
 {
+  this->initialize_type_by_vsocket_map();
+}
+
+BLI_NOINLINE void VTreeDataGraphBuilder::initialize_type_by_vsocket_map()
+{
+  m_type_by_vsocket = Vector<SharedType>(m_vtree.socket_count(), SharedType());
+  for (VirtualNode *vnode : m_vtree.nodes()) {
+    for (VirtualSocket *vsocket : vnode->inputs()) {
+      m_type_by_vsocket[vsocket->id()] = m_type_by_idname.lookup_default(vsocket->idname(), {});
+    }
+    for (VirtualSocket *vsocket : vnode->outputs()) {
+      m_type_by_vsocket[vsocket->id()] = m_type_by_idname.lookup_default(vsocket->idname(), {});
+    }
+  }
 }
 
 VTreeDataGraph VTreeDataGraphBuilder::build()
@@ -240,7 +254,7 @@ VirtualNodeTree &VTreeDataGraphBuilder::vtree() const
 
 bool VTreeDataGraphBuilder::is_data_socket(VirtualSocket *vsocket) const
 {
-  return m_type_by_idname.contains(vsocket->bsocket()->idname);
+  return m_type_by_vsocket[vsocket->id()].ptr() != nullptr;
 }
 
 SharedType &VTreeDataGraphBuilder::type_by_name(StringRef data_type) const
@@ -250,12 +264,8 @@ SharedType &VTreeDataGraphBuilder::type_by_name(StringRef data_type) const
 
 SharedType &VTreeDataGraphBuilder::query_socket_type(VirtualSocket *vsocket) const
 {
-  return m_type_by_idname.lookup_ref(vsocket->bsocket()->idname);
-}
-
-StringRef VTreeDataGraphBuilder::query_socket_data_type(VirtualSocket *vsocket) const
-{
-  return m_data_type_by_idname.lookup_ref(vsocket->bsocket()->idname);
+  BLI_assert(this->is_data_socket(vsocket));
+  return m_type_by_vsocket[vsocket->id()];
 }
 
 SharedType &VTreeDataGraphBuilder::query_type_property(VirtualNode *vnode,
diff --git a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
index 2a148b7573b..7a03131f8ca 100644
--- a/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
+++ b/source/blender/functions/frontends/data_flow_nodes/vtree_data_graph_builder.hpp
@@ -21,6 +21,7 @@ class VTreeDataGraphBuilder {
   VirtualNodeTree &m_vtree;
   DataGraphBuilder m_graph_builder;
   Vector<BuilderSocket *> m_socket_map;
+  Vector<SharedType> m_type_by_vsocket;
   StringMap<SharedType> &m_type_by_idname;
   StringMap<SharedType> &m_type_by_data_type;
   StringMap<std::string> &m_data_type_by_idname;
@@ -62,7 +63,6 @@ class VTreeDataGraphBuilder {
 
   /* Query Socket Information */
   bool is_data_socket(VirtualSocket *vsocket) const;
-  StringRef query_socket_data_type(VirtualSocket *vsocket) const;
   SharedType &query_socket_type(VirtualSocket *vsocket) const;
 
   /* Query Node Information */
@@ -73,6 +73,7 @@ class VTreeDataGraphBuilder {
   SharedType &type_from_rna(PointerRNA &rna, StringRefNull prop_name) const;
 
  private:
+  void initialize_type_by_vsocket_map();
   bool check_if_sockets_are_mapped(VirtualNode *vnode, ArrayRef<VirtualSocket *> vsockets) const;
 };



More information about the Bf-blender-cvs mailing list