[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