Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJacques Lucke <jacques@blender.org>2020-06-30 14:35:38 +0300
committerJacques Lucke <jacques@blender.org>2020-06-30 14:35:45 +0300
commit84901f2edaf1b00e242ca5d5c24c452ca9c5b922 (patch)
treeeb48ecaf2140d4b8e86f6c2d4166e698b8d8063b /source/blender/blenkernel/BKE_node_tree_ref.hh
parenta6775efb4f26531c299b805915f5865b06fad75b (diff)
Nodes: store nodes by bNodeType instead of idname
This is more efficient in most cases.
Diffstat (limited to 'source/blender/blenkernel/BKE_node_tree_ref.hh')
-rw-r--r--source/blender/blenkernel/BKE_node_tree_ref.hh15
1 files changed, 11 insertions, 4 deletions
diff --git a/source/blender/blenkernel/BKE_node_tree_ref.hh b/source/blender/blenkernel/BKE_node_tree_ref.hh
index 718a93b0089..557eb44e5df 100644
--- a/source/blender/blenkernel/BKE_node_tree_ref.hh
+++ b/source/blender/blenkernel/BKE_node_tree_ref.hh
@@ -163,14 +163,15 @@ class NodeTreeRef : NonCopyable, NonMovable {
Vector<SocketRef *> m_sockets_by_id;
Vector<InputSocketRef *> m_input_sockets;
Vector<OutputSocketRef *> m_output_sockets;
- Map<std::string, Vector<NodeRef *>> m_nodes_by_idname;
+ Map<const bNodeType *, Vector<NodeRef *>> m_nodes_by_type;
public:
NodeTreeRef(bNodeTree *btree);
~NodeTreeRef();
Span<const NodeRef *> nodes() const;
- Span<const NodeRef *> nodes_with_idname(StringRef idname) const;
+ Span<const NodeRef *> nodes_by_type(StringRefNull idname) const;
+ Span<const NodeRef *> nodes_by_type(const bNodeType *nodetype) const;
Span<const SocketRef *> sockets() const;
Span<const InputSocketRef *> input_sockets() const;
@@ -403,9 +404,15 @@ inline Span<const NodeRef *> NodeTreeRef::nodes() const
return m_nodes_by_id.as_span();
}
-inline Span<const NodeRef *> NodeTreeRef::nodes_with_idname(StringRef idname) const
+inline Span<const NodeRef *> NodeTreeRef::nodes_by_type(StringRefNull idname) const
{
- const Vector<NodeRef *> *nodes = m_nodes_by_idname.lookup_ptr(idname);
+ const bNodeType *nodetype = nodeTypeFind(idname.data());
+ return this->nodes_by_type(nodetype);
+}
+
+inline Span<const NodeRef *> NodeTreeRef::nodes_by_type(const bNodeType *nodetype) const
+{
+ const Vector<NodeRef *> *nodes = m_nodes_by_type.lookup_ptr(nodetype);
if (nodes == nullptr) {
return {};
}