diff options
Diffstat (limited to 'src/server/game/Maps/Map.h')
-rw-r--r-- | src/server/game/Maps/Map.h | 36 |
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> { |