[Bf-blender-cvs] [352afcd0b31] functions: use array instead of map

Jacques Lucke noreply at git.blender.org
Tue Nov 26 17:31:51 CET 2019


Commit: 352afcd0b31d70d814701926e0967e6394236085
Author: Jacques Lucke
Date:   Tue Nov 26 16:14:34 2019 +0100
Branches: functions
https://developer.blender.org/rB352afcd0b31d70d814701926e0967e6394236085

use array instead of map

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

M	source/blender/blenkernel/BKE_inlined_node_tree.h
M	source/blender/blenkernel/intern/inlined_node_tree.cc

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

diff --git a/source/blender/blenkernel/BKE_inlined_node_tree.h b/source/blender/blenkernel/BKE_inlined_node_tree.h
index 0cb242fda91..5f77af3fd52 100644
--- a/source/blender/blenkernel/BKE_inlined_node_tree.h
+++ b/source/blender/blenkernel/BKE_inlined_node_tree.h
@@ -10,6 +10,7 @@ namespace BKE {
 
 using BLI::Map;
 using BLI::MultiMap;
+using BLI::MutableArrayRef;
 
 class XNode;
 class XParentNode;
@@ -22,6 +23,7 @@ class InlinedNodeTree;
 class XSocket : BLI::NonCopyable, BLI::NonMovable {
  protected:
   XNode *m_node;
+  bool m_is_input;
 
   /* Input and output sockets share the same id-space. */
   uint m_id;
@@ -31,6 +33,11 @@ class XSocket : BLI::NonCopyable, BLI::NonMovable {
  public:
   const XNode &node() const;
   uint id() const;
+
+  bool is_input() const;
+  bool is_output() const;
+  const XInputSocket &as_input() const;
+  const XOutputSocket &as_output() const;
 };
 
 class XInputSocket : public XSocket {
@@ -149,8 +156,7 @@ class InlinedNodeTree : BLI::NonCopyable, BLI::NonMovable {
                                                  XParentNode *parent);
   XNode &create_node(const VNode &vnode,
                      XParentNode *parent,
-                     Map<const VInputSocket *, XInputSocket *> &inputs_map,
-                     Map<const VOutputSocket *, XOutputSocket *> &outputs_map);
+                     MutableArrayRef<XSocket *> sockets_map);
 };
 
 /* Inline functions
@@ -216,6 +222,28 @@ inline uint XSocket::id() const
   return m_id;
 }
 
+inline bool XSocket::is_input() const
+{
+  return m_is_input;
+}
+
+inline bool XSocket::is_output() const
+{
+  return !m_is_input;
+}
+
+inline const XInputSocket &XSocket::as_input() const
+{
+  BLI_assert(this->is_input());
+  return *(const XInputSocket *)this;
+}
+
+inline const XOutputSocket &XSocket::as_output() const
+{
+  BLI_assert(this->is_output());
+  return *(const XOutputSocket *)this;
+}
+
 inline const VInputSocket &XInputSocket::vsocket() const
 {
   return *m_vsocket;
diff --git a/source/blender/blenkernel/intern/inlined_node_tree.cc b/source/blender/blenkernel/intern/inlined_node_tree.cc
index 28d982e956b..1df721dfb1f 100644
--- a/source/blender/blenkernel/intern/inlined_node_tree.cc
+++ b/source/blender/blenkernel/intern/inlined_node_tree.cc
@@ -269,21 +269,20 @@ void InlinedNodeTree::insert_linked_nodes_for_vtree_in_id_order(const VirtualNod
                                                                 Vector<XNode *> &all_nodes,
                                                                 XParentNode *parent)
 {
-  Map<const VInputSocket *, XInputSocket *> inputs_map;
-  Map<const VOutputSocket *, XOutputSocket *> outputs_map;
+  BLI::TemporaryArray<XSocket *> sockets_map(vtree.socket_count());
 
   /* Insert nodes of group. */
   for (const VNode *vnode : vtree.nodes()) {
-    XNode &node = this->create_node(*vnode, parent, inputs_map, outputs_map);
+    XNode &node = this->create_node(*vnode, parent, sockets_map);
     all_nodes.append(&node);
   }
 
   /* Insert links of group. */
   for (const VNode *vnode : vtree.nodes()) {
     for (const VInputSocket *to_vsocket : vnode->inputs()) {
-      XInputSocket *to_socket = inputs_map.lookup(to_vsocket);
+      XInputSocket *to_socket = (XInputSocket *)sockets_map[to_vsocket->id()];
       for (const VOutputSocket *from_vsocket : to_vsocket->linked_sockets()) {
-        XOutputSocket *from_socket = outputs_map.lookup(from_vsocket);
+        XOutputSocket *from_socket = (XOutputSocket *)sockets_map[from_vsocket->id()];
         to_socket->m_linked_sockets.append(from_socket);
         from_socket->m_linked_sockets.append(to_socket);
       }
@@ -293,8 +292,7 @@ void InlinedNodeTree::insert_linked_nodes_for_vtree_in_id_order(const VirtualNod
 
 XNode &InlinedNodeTree::create_node(const VNode &vnode,
                                     XParentNode *parent,
-                                    Map<const VInputSocket *, XInputSocket *> &inputs_map,
-                                    Map<const VOutputSocket *, XOutputSocket *> &outputs_map)
+                                    MutableArrayRef<XSocket *> sockets_map)
 {
   XNode &new_node = *m_allocator.construct<XNode>().release();
   new_node.m_vnode = &vnode;
@@ -306,9 +304,10 @@ XNode &InlinedNodeTree::create_node(const VNode &vnode,
     new_socket.m_vsocket = vsocket;
     new_socket.m_node = &new_node;
     new_socket.m_id = UINT32_MAX;
+    new_socket.m_is_input = true;
 
     new_node.m_inputs.append_and_get_index(&new_socket);
-    inputs_map.add_new(vsocket, &new_socket);
+    sockets_map[vsocket->id()] = &new_socket;
   }
 
   for (const VOutputSocket *vsocket : vnode.outputs()) {
@@ -316,9 +315,10 @@ XNode &InlinedNodeTree::create_node(const VNode &vnode,
     new_socket.m_vsocket = vsocket;
     new_socket.m_node = &new_node;
     new_socket.m_id = UINT32_MAX;
+    new_socket.m_is_input = false;
 
     new_node.m_outputs.append_and_get_index(&new_socket);
-    outputs_map.add_new(vsocket, &new_socket);
+    sockets_map[vsocket->id()] = &new_socket;
   }
 
   return new_node;



More information about the Bf-blender-cvs mailing list