[Bf-blender-cvs] [187844f712b] functions: use StringMultiMap in more places
Jacques Lucke
noreply at git.blender.org
Thu Jan 2 16:38:33 CET 2020
Commit: 187844f712b332f2f13d22014f9e093bddabb01d
Author: Jacques Lucke
Date: Thu Jan 2 16:37:17 2020 +0100
Branches: functions
https://developer.blender.org/rB187844f712b332f2f13d22014f9e093bddabb01d
use StringMultiMap in more places
===================================================================
M source/blender/blenkernel/BKE_virtual_node_tree.h
M source/blender/blenkernel/intern/virtual_node_tree.cc
M source/blender/blenlib/BLI_string_multi_map.h
M source/blender/functions/FN_node_tree.h
M source/blender/functions/intern/node_tree.cc
M source/blender/simulations/bparticles/node_frontend.cpp
===================================================================
diff --git a/source/blender/blenkernel/BKE_virtual_node_tree.h b/source/blender/blenkernel/BKE_virtual_node_tree.h
index dc83649d0ea..51c826b963b 100644
--- a/source/blender/blenkernel/BKE_virtual_node_tree.h
+++ b/source/blender/blenkernel/BKE_virtual_node_tree.h
@@ -7,6 +7,7 @@
#include "BLI_string_ref.h"
#include "BLI_string_map.h"
#include "BLI_resource_collector.h"
+#include "BLI_string_multi_map.h"
#include "DNA_node_types.h"
@@ -18,6 +19,7 @@ using BLI::Array;
using BLI::ArrayRef;
using BLI::ResourceCollector;
using BLI::StringMap;
+using BLI::StringMultiMap;
using BLI::StringRef;
using BLI::StringRefNull;
using BLI::Vector;
@@ -125,7 +127,7 @@ class VirtualNodeTree : BLI::NonCopyable, BLI::NonMovable {
Vector<VSocket *> m_sockets_by_id;
Vector<VInputSocket *> m_input_sockets;
Vector<VOutputSocket *> m_output_sockets;
- StringMap<Vector<VNode *>> m_nodes_by_idname;
+ StringMultiMap<VNode *> m_nodes_by_idname;
public:
VirtualNodeTree(bNodeTree *btree);
@@ -329,13 +331,7 @@ inline ArrayRef<const VNode *> VirtualNodeTree::nodes() const
inline ArrayRef<const VNode *> VirtualNodeTree::nodes_with_idname(StringRef idname) const
{
- auto *nodes = m_nodes_by_idname.lookup_ptr(idname);
- if (nodes == nullptr) {
- return {};
- }
- else {
- return ArrayRef<VNode *>(*nodes).cast<const VNode *>();
- }
+ return m_nodes_by_idname.lookup_default(idname);
}
inline uint VirtualNodeTree::socket_count() const
diff --git a/source/blender/blenkernel/intern/virtual_node_tree.cc b/source/blender/blenkernel/intern/virtual_node_tree.cc
index ca23753465d..03a1780d599 100644
--- a/source/blender/blenkernel/intern/virtual_node_tree.cc
+++ b/source/blender/blenkernel/intern/virtual_node_tree.cc
@@ -82,12 +82,7 @@ VirtualNodeTree::VirtualNodeTree(bNodeTree *btree) : m_btree(btree)
}
for (VNode *vnode : vtree.m_nodes_by_id) {
- if (vtree.m_nodes_by_idname.contains(vnode->idname())) {
- vtree.m_nodes_by_idname.lookup(vnode->idname()).append(vnode);
- }
- else {
- vtree.m_nodes_by_idname.add_new(vnode->idname(), {vnode});
- }
+ vtree.m_nodes_by_idname.add(vnode->idname(), vnode);
}
}
diff --git a/source/blender/blenlib/BLI_string_multi_map.h b/source/blender/blenlib/BLI_string_multi_map.h
index 94f414d14ab..4eed3b00978 100644
--- a/source/blender/blenlib/BLI_string_multi_map.h
+++ b/source/blender/blenlib/BLI_string_multi_map.h
@@ -59,7 +59,7 @@ template<typename ValueT> class StringMultiMap {
}
ArrayRef<ValueT> lookup_default(StringRef key,
- ArrayRef<ValueT> default_array = ArrayRef<ValueT>())
+ ArrayRef<ValueT> default_array = ArrayRef<ValueT>()) const
{
const Vector<ValueT> *values = m_map.lookup_ptr(key);
if (values == nullptr) {
diff --git a/source/blender/functions/FN_node_tree.h b/source/blender/functions/FN_node_tree.h
index e5bdef2b476..6f60b4da577 100644
--- a/source/blender/functions/FN_node_tree.h
+++ b/source/blender/functions/FN_node_tree.h
@@ -18,6 +18,7 @@ using BLI::Map;
using BLI::MultiMap;
using BLI::MutableArrayRef;
using BLI::StringMap;
+using BLI::StringMultiMap;
using BLI::StringRef;
using BLI::StringRefNull;
using BLI::Vector;
@@ -164,7 +165,7 @@ class FunctionNodeTree : BLI::NonCopyable, BLI::NonMovable {
Vector<FInputSocket *> m_input_sockets;
Vector<FOutputSocket *> m_output_sockets;
- StringMap<Vector<FNode *>> m_nodes_by_idname;
+ StringMultiMap<FNode *> m_nodes_by_idname;
public:
FunctionNodeTree(bNodeTree *btree, BTreeVTreeMap &vtrees);
@@ -445,13 +446,7 @@ inline ArrayRef<const FGroupInput *> FunctionNodeTree::all_group_inputs() const
inline ArrayRef<const FNode *> FunctionNodeTree::nodes_with_idname(StringRef idname) const
{
- auto *nodes = m_nodes_by_idname.lookup_ptr(idname);
- if (nodes == nullptr) {
- return {};
- }
- else {
- return nodes->as_ref();
- }
+ return m_nodes_by_idname.lookup_default(idname);
}
} // namespace FN
diff --git a/source/blender/functions/intern/node_tree.cc b/source/blender/functions/intern/node_tree.cc
index 115d881ba33..c8e34bd14b6 100644
--- a/source/blender/functions/intern/node_tree.cc
+++ b/source/blender/functions/intern/node_tree.cc
@@ -348,12 +348,7 @@ BLI_NOINLINE void FunctionNodeTree::store_tree_in_this_and_init_ids(
FNode *fnode = m_node_by_id[node_index];
fnode->m_id = node_index;
- if (m_nodes_by_idname.contains(fnode->idname())) {
- m_nodes_by_idname.lookup(fnode->idname()).append(fnode);
- }
- else {
- m_nodes_by_idname.add_new(fnode->idname(), {fnode});
- }
+ m_nodes_by_idname.add(fnode->idname(), fnode);
for (FInputSocket *fsocket : fnode->m_inputs) {
fsocket->m_id = m_sockets_by_id.append_and_get_index(fsocket);
diff --git a/source/blender/simulations/bparticles/node_frontend.cpp b/source/blender/simulations/bparticles/node_frontend.cpp
index 97a12ff393b..abe17a74db0 100644
--- a/source/blender/simulations/bparticles/node_frontend.cpp
+++ b/source/blender/simulations/bparticles/node_frontend.cpp
@@ -35,6 +35,7 @@ using BLI::ResourceCollector;
using BLI::rgba_f;
using BLI::ScopedVector;
using BLI::Set;
+using BLI::StringMultiMap;
using FN::AttributesInfoBuilder;
using FN::CPPType;
using FN::FGroupInput;
@@ -61,9 +62,9 @@ StringMap<ActionParserCallback> &get_action_parsers();
class InfluencesCollector {
public:
Vector<Emitter *> m_emitters;
- MultiMap<std::string, Force *> m_forces;
- MultiMap<std::string, Event *> m_events;
- MultiMap<std::string, OffsetHandler *> m_offset_handlers;
+ StringMultiMap<Force *> m_forces;
+ StringMultiMap<Event *> m_events;
+ StringMultiMap<OffsetHandler *> m_offset_handlers;
StringMap<AttributesInfoBuilder *> m_attributes;
};
More information about the Bf-blender-cvs
mailing list