aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Maps/Map.h
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-01-05 20:22:34 +0100
committerShauren <shauren.trinity@gmail.com>2025-01-05 20:22:34 +0100
commit401502ea3c5ceca0c6253910035b2949e13746cc (patch)
tree08171ad987c9afe14719f5cb4c384546389878f8 /src/server/game/Maps/Map.h
parent04433910424540e42a2270156e7c9a8722c09913 (diff)
Core/Grids: Modernize TypeContainer with variadic template
Diffstat (limited to 'src/server/game/Maps/Map.h')
-rw-r--r--src/server/game/Maps/Map.h36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 50ab8cf9120..b48ca28146e 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -183,8 +183,40 @@ inline bool CompareRespawnInfo::operator()(RespawnInfo const* a, RespawnInfo con
return a->type < b->type;
}
-extern template class TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid>;
-typedef TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid> MapStoredObjectTypesContainer;
+template <typename ObjectType>
+struct MapStoredObjectsUnorderedMap
+{
+ using Container = std::unordered_map<ObjectGuid, ObjectType*>;
+ using KeyType = ObjectGuid;
+ using ValueType = ObjectType*;
+
+ static bool Insert(Container& container, ValueType object)
+ {
+ auto [itr, isNew] = container.try_emplace(object->GetGUID(), object);
+ ASSERT(isNew || itr->second == object, "Object with certain key already in but objects are different!");
+ return true;
+ }
+
+ static bool Remove(Container& container, ValueType object)
+ {
+ container.erase(object->GetGUID());
+ return true;
+ }
+
+ static std::size_t Size(Container const& container)
+ {
+ return container.size();
+ }
+
+ static ValueType Find(Container const& container, KeyType const& key)
+ {
+ auto itr = container.find(key);
+ return itr != container.end() ? itr->second : nullptr;
+ }
+};
+
+extern template struct TypeListContainer<MapStoredObjectsUnorderedMap, Creature, GameObject, DynamicObject, Pet, Corpse, AreaTrigger, SceneObject, Conversation>;
+typedef TypeListContainer<MapStoredObjectsUnorderedMap, Creature, GameObject, DynamicObject, Pet, Corpse, AreaTrigger, SceneObject, Conversation> MapStoredObjectTypesContainer;
class TC_GAME_API Map : public GridRefManager<NGridType>
{