13 void addOrUpdateID(SB_ID oldID, SB_ID newID,
DatabaseObject*
object)
15 assert(
object !=
nullptr &&
"Object was nullptr");
17 if (newID == SB_INVALID_ID)
19 newID = createNewID();
20 object->m_objectID = newID;
23 assert(newID != 0 &&
"New ID cannot be 0!");
25 if (
auto iter = m_idToPointerMap.find(oldID); iter != m_idToPointerMap.end())
27 assert(iter->second.get() ==
object &&
"Provided object does not match the one in the database");
29 m_idToPointerMap.erase(iter);
32 m_idToPointerMap[newID].reset(
object);
35 void addOrUpdateName(std::string_view oldName, std::string_view newName,
DatabaseObject*
object)
37 assert(
object !=
nullptr &&
"Object was nullptr");
41 if (
auto iter = m_nameToIdMap.find(oldName.data()); iter != m_nameToIdMap.end())
43 m_nameToIdMap.erase(iter);
49 m_nameToIdMap.emplace(newName, object->getDatabaseID());
57 if (m_idToPointerMap.contains(
id))
59 m_idToPointerMap.erase(
id);
66 assert(
object !=
nullptr &&
"Object was nullptr");
70 m_nameToIdMap.erase(object->getDatabaseName().data());
71 m_idToPointerMap.erase(object->getDatabaseID());
81 assert(
object !=
nullptr);
83 std::shared_ptr<DatabaseObject> result;
85 m_nameToIdMap.erase(object->getDatabaseName().data());
86 m_idToPointerMap[
object->getDatabaseID()].swap(result);
87 m_idToPointerMap.erase(object->getDatabaseID());
96 if (
auto iter = m_idToPointerMap.find(
id); iter != m_idToPointerMap.end())
98 result = iter->second.get();
104 DatabaseObject* tryFind(std::string_view name)
const
106 DatabaseObject* result =
nullptr;
108 if (
auto iter = m_nameToIdMap.find(name.data()); iter != m_nameToIdMap.end())
110 result = tryFind(iter->second);
116 std::weak_ptr<DatabaseObject> tryFindWeak(SB_ID
id)
const
118 std::weak_ptr<DatabaseObject> result;
120 if (
auto iter = m_idToPointerMap.find(
id); iter != m_idToPointerMap.end())
122 result = iter->second;
128 std::weak_ptr<DatabaseObject> tryFindWeak(std::string_view name)
const
130 std::weak_ptr<DatabaseObject> result;
132 if (
auto iter = m_nameToIdMap.find(name.data()); iter != m_nameToIdMap.end())
134 result = tryFindWeak(iter->second);
140 std::vector<std::weak_ptr<DatabaseObject>> getAll()
const
142 std::vector<std::weak_ptr<DatabaseObject>> result;
143 result.reserve(m_idToPointerMap.size());
145 for (
auto& i : m_idToPointerMap)
147 result.push_back(i.second);
153 void clear() noexcept
155 m_idToPointerMap.clear();
156 m_nameToIdMap.clear();
160 static SB_ID createNewID();
163 std::unordered_map<SB_ID, std::shared_ptr<DatabaseObject>> m_idToPointerMap;
164 std::unordered_map<std::string, SB_ID> m_nameToIdMap;