feat(Core/Misc): implement ObjectGuid class (port from TC) (#4885)

This commit is contained in:
UltraNix
2021-04-25 22:18:03 +02:00
committed by GitHub
parent 91081f4ad8
commit f4c226423d
568 changed files with 10655 additions and 11019 deletions

View File

@@ -12,6 +12,8 @@
#include "Map.h"
#include "MapUpdater.h"
#include "Object.h"
#include "MapInstanced.h"
#include <mutex>
class Transport;
@@ -120,6 +122,12 @@ public:
MapUpdater* GetMapUpdater() { return &m_updater; }
template<typename Worker>
void DoForAllMaps(Worker&& worker);
template<typename Worker>
void DoForAllMapsWithMapId(uint32 mapId, Worker&& worker);
private:
typedef std::unordered_map<uint32, Map*> MapMapType;
typedef std::vector<bool> InstanceIds;
@@ -140,6 +148,45 @@ private:
MapUpdater m_updater;
};
template<typename Worker>
void MapManager::DoForAllMaps(Worker&& worker)
{
std::lock_guard<std::mutex> guard(Lock);
for (auto& mapPair : i_maps)
{
Map* map = mapPair.second;
if (MapInstanced* mapInstanced = map->ToMapInstanced())
{
MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps();
for (auto& instancePair : instances)
worker(instancePair.second);
}
else
worker(map);
}
}
template<typename Worker>
inline void MapManager::DoForAllMapsWithMapId(uint32 mapId, Worker&& worker)
{
std::lock_guard<std::mutex> guard(Lock);
auto itr = i_maps.find(mapId);
if (itr != i_maps.end())
{
Map* map = itr->second;
if (MapInstanced* mapInstanced = map->ToMapInstanced())
{
MapInstanced::InstancedMaps& instances = mapInstanced->GetInstancedMaps();
for (auto& p : instances)
worker(p.second);
}
else
worker(map);
}
}
#define sMapMgr MapManager::instance()
#endif