Depsgraph: use native BLI data structures in registry
Reviewers: sergey Differential Revision: https://developer.blender.org/D7559
This commit is contained in:
parent
657188c1a2
commit
157f836493
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue