[Bf-blender-cvs] [218fcf4473b] functions: replace another map with a vector

Jacques Lucke noreply at git.blender.org
Thu Aug 1 18:22:58 CEST 2019


Commit: 218fcf4473bcbba4c48ecc062be197763484bfd9
Author: Jacques Lucke
Date:   Thu Aug 1 10:28:30 2019 +0200
Branches: functions
https://developer.blender.org/rB218fcf4473bcbba4c48ecc062be197763484bfd9

replace another map with a vector

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

M	source/blender/functions/core/data_flow_graph_builder.hpp
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/core/data_flow_graph_builder.hpp b/source/blender/functions/core/data_flow_graph_builder.hpp
index 2c0eda027aa..04168faff25 100644
--- a/source/blender/functions/core/data_flow_graph_builder.hpp
+++ b/source/blender/functions/core/data_flow_graph_builder.hpp
@@ -31,6 +31,16 @@ class DFGB_Socket {
   {
   }
 
+  static DFGB_Socket None()
+  {
+    return DFGB_Socket(nullptr, false, (uint)-1);
+  }
+
+  bool is_none()
+  {
+    return m_index == (uint)-1;
+  }
+
   inline DFGB_Node *node() const;
   inline bool is_input() const;
   inline bool is_output() const;
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 e31a89779a8..0f7ed485ddb 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
@@ -29,6 +29,7 @@ namespace DataFlowNodes {
 
 VTreeDataGraphBuilder::VTreeDataGraphBuilder(VirtualNodeTree &vtree)
     : m_vtree(vtree),
+      m_socket_map(vtree.socket_count(), DFGB_Socket::None()),
       m_type_by_idname(get_type_by_idname_map()),
       m_type_by_data_type(get_type_by_data_type_map()),
       m_data_type_by_idname(get_data_type_by_idname_map())
@@ -37,14 +38,16 @@ VTreeDataGraphBuilder::VTreeDataGraphBuilder(VirtualNodeTree &vtree)
 
 static Vector<DFGraphSocket> build_mapping_for_original_sockets(
     VirtualNodeTree &vtree,
-    Map<VirtualSocket *, DFGB_Socket> &socket_map,
+    Vector<DFGB_Socket> &socket_map,
     DataFlowGraph::ToBuilderMapping &builder_mapping)
 {
   Vector<DFGraphSocket> original_socket_mapping(vtree.socket_count(), DFGraphSocket::None());
-  for (auto item : socket_map.items()) {
-    VirtualSocket *vsocket = item.key;
-    DFGraphSocket socket = builder_mapping.map_socket(item.value);
-    original_socket_mapping[vsocket->id()] = socket;
+  for (uint vsocket_id = 0; vsocket_id < socket_map.size(); vsocket_id++) {
+    DFGB_Socket socket = socket_map[vsocket_id];
+    if (socket.is_none()) {
+      continue;
+    }
+    original_socket_mapping[vsocket_id] = builder_mapping.map_socket(socket);
   }
   return original_socket_mapping;
 }
@@ -131,7 +134,7 @@ void VTreeDataGraphBuilder::map_socket(DFGB_Socket socket, VirtualSocket *vsocke
 {
   BLI_assert(this->is_data_socket(vsocket) ? socket.type() == this->query_socket_type(vsocket) :
                                              true);
-  m_socket_map.add(vsocket, socket);
+  m_socket_map[vsocket->id()] = socket;
 }
 
 void VTreeDataGraphBuilder::map_sockets(DFGB_Node *node, VirtualNode *vnode)
@@ -187,8 +190,8 @@ void VTreeDataGraphBuilder::map_output(DFGB_Socket socket, VirtualNode *vnode, u
 
 DFGB_Socket VTreeDataGraphBuilder::lookup_socket(VirtualSocket *vsocket)
 {
-  BLI_assert(m_socket_map.contains(vsocket));
-  return m_socket_map.lookup(vsocket);
+  BLI_assert(!m_socket_map[vsocket->id()].is_none());
+  return m_socket_map[vsocket->id()];
 }
 
 bool VTreeDataGraphBuilder::check_if_sockets_are_mapped(VirtualNode *vnode,
@@ -197,7 +200,7 @@ bool VTreeDataGraphBuilder::check_if_sockets_are_mapped(VirtualNode *vnode,
   int index = 0;
   for (VirtualSocket *vsocket : vsockets) {
     if (this->is_data_socket(vsocket)) {
-      if (!m_socket_map.contains(vsocket)) {
+      if (m_socket_map[vsocket->id()].is_none()) {
         std::cout << "Data DFGB_Socket not mapped: " << std::endl;
         std::cout << "    Tree: " << vnode->btree_id()->name << std::endl;
         std::cout << "    DFGB_Node: " << vnode->name() << std::endl;
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 b315baaa898..6ba1d5913a4 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
@@ -20,7 +20,7 @@ class VTreeDataGraphBuilder {
  private:
   VirtualNodeTree &m_vtree;
   DataFlowGraphBuilder m_graph_builder;
-  Map<VirtualSocket *, DFGB_Socket> m_socket_map;
+  Vector<DFGB_Socket> m_socket_map;
   StringMap<SharedType> &m_type_by_idname;
   StringMap<SharedType> &m_type_by_data_type;
   StringMap<std::string> &m_data_type_by_idname;
@@ -30,7 +30,7 @@ class VTreeDataGraphBuilder {
 
   VTreeDataGraph build();
 
-  Map<VirtualSocket *, DFGB_Socket> &socket_map()
+  Vector<DFGB_Socket> &socket_map()
   {
     return m_socket_map;
   }



More information about the Bf-blender-cvs mailing list