Depsgraph: use native BLI data structures in registry

Reviewers: sergey

Differential Revision: https://developer.blender.org/D7559
This commit is contained in:
Jacques Lucke 2020-04-29 11:37:19 +02:00
parent 657188c1a2
commit 157f836493
3 changed files with 14 additions and 25 deletions

View File

@ -29,46 +29,33 @@
namespace DEG {
typedef set<Depsgraph *> DepsgraphStorage;
typedef map<Main *, DepsgraphStorage> MainDepsgraphMap;
static MainDepsgraphMap g_graph_registry;
static Map<Main *, VectorSet<Depsgraph *>> g_graph_registry;
void register_graph(Depsgraph *depsgraph)
{
Main *bmain = depsgraph->bmain;
MainDepsgraphMap::iterator it = g_graph_registry.find(bmain);
if (it == g_graph_registry.end()) {
it = g_graph_registry.insert(make_pair(bmain, DepsgraphStorage())).first;
}
DepsgraphStorage &storage = it->second;
storage.insert(depsgraph);
g_graph_registry.lookup_or_add_default(bmain).add_new(depsgraph);
}
void unregister_graph(Depsgraph *depsgraph)
{
Main *bmain = depsgraph->bmain;
MainDepsgraphMap::iterator it = g_graph_registry.find(bmain);
BLI_assert(it != g_graph_registry.end());
// Remove dependency graph from storage.
DepsgraphStorage &storage = it->second;
storage.erase(depsgraph);
VectorSet<Depsgraph *> &graphs = g_graph_registry.lookup(bmain);
graphs.remove(depsgraph);
// If this was the last depsgraph associated with the main, remove the main entry as well.
if (storage.empty()) {
g_graph_registry.erase(bmain);
if (graphs.is_empty()) {
g_graph_registry.remove(bmain);
}
}
const set<Depsgraph *> &get_all_registered_graphs(Main *bmain)
ArrayRef<Depsgraph *> get_all_registered_graphs(Main *bmain)
{
MainDepsgraphMap::iterator it = g_graph_registry.find(bmain);
if (it == g_graph_registry.end()) {
static DepsgraphStorage empty_storage;
return empty_storage;
VectorSet<Depsgraph *> *graphs = g_graph_registry.lookup_ptr(bmain);
if (graphs != nullptr) {
return *graphs;
}
return it->second;
return {};
}
} // namespace DEG

View File

@ -33,6 +33,6 @@ struct Depsgraph;
void register_graph(Depsgraph *depsgraph);
void unregister_graph(Depsgraph *depsgraph);
const set<Depsgraph *> &get_all_registered_graphs(Main *bmain);
ArrayRef<Depsgraph *> get_all_registered_graphs(Main *bmain);
} // namespace DEG

View File

@ -44,6 +44,7 @@
#include "BLI_set.hh"
#include "BLI_string_ref.hh"
#include "BLI_vector.hh"
#include "BLI_vector_set.hh"
struct Depsgraph;
@ -58,6 +59,7 @@ using BLI::Set;
using BLI::StringRef;
using BLI::StringRefNull;
using BLI::Vector;
using BLI::VectorSet;
using std::deque;
using std::map;
using std::pair;