[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