summaryrefslogtreecommitdiff
path: root/src/core/managed/Manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/managed/Manager.cpp')
-rw-r--r--src/core/managed/Manager.cpp27
1 files changed, 25 insertions, 2 deletions
diff --git a/src/core/managed/Manager.cpp b/src/core/managed/Manager.cpp
index 823dc88..d92bbb5 100644
--- a/src/core/managed/Manager.cpp
+++ b/src/core/managed/Manager.cpp
@@ -154,7 +154,9 @@ void Manager::manage(Managed *o)
#ifdef MANAGER_DEBUG_PRINT
std::cout << "manage " << o << std::endl;
#endif
- objects.emplace(std::make_pair(o, ObjectDescriptor{}));
+ objects.emplace(o, ObjectDescriptor{nextUid});
+ uids.emplace(nextUid, o);
+ nextUid++;
}
void Manager::addRef(Managed *tar, Managed *src)
@@ -257,7 +259,8 @@ void Manager::deleteObject(Managed *o, ObjectDescriptor *descr)
deleteRef(descr->refOut.begin()->first, o, true);
}
- // Remove the data store and the event store entry
+ // Remove the uid, data and event store entry
+ uids.erase(descr->uid);
store.erase(o);
events.erase(o);
@@ -370,6 +373,26 @@ void Manager::sweep()
}
}
+/* Class Managed: Unique IDs */
+
+ManagedUid Manager::getUid(Managed *o)
+{
+ const auto it = objects.find(o);
+ if (it != objects.end()) {
+ return it->second.uid;
+ }
+ return 0;
+}
+
+Managed *Manager::getManaged(ManagedUid uid)
+{
+ const auto it = uids.find(uid);
+ if (it != uids.end()) {
+ return it->second;
+ }
+ return nullptr;
+}
+
/* Class Manager: Attached data */
void Manager::storeData(Managed *ref, const std::string &key, Managed *data)