diff options
author | Shauren <shauren.trinity@gmail.com> | 2024-03-13 18:51:29 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2024-03-13 18:51:29 +0100 |
commit | 4779fa5048642b57a0f69de7ab56b9d563c1cbc4 (patch) | |
tree | 9bd8f8daccb5d3e7f8e98c3556db8f3c9b204460 /src/server/game/Battlegrounds/BattlegroundMgr.cpp | |
parent | 18200e1b88596dbead10d0b8ecbd10557db43323 (diff) |
Core/Misc: Use our new unique_trackable_ptr for various classes exposed to scripts (not actually used anywhere currently)
Diffstat (limited to 'src/server/game/Battlegrounds/BattlegroundMgr.cpp')
-rw-r--r-- | src/server/game/Battlegrounds/BattlegroundMgr.cpp | 37 |
1 files changed, 11 insertions, 26 deletions
diff --git a/src/server/game/Battlegrounds/BattlegroundMgr.cpp b/src/server/game/Battlegrounds/BattlegroundMgr.cpp index b07012c59db..37311c718f2 100644 --- a/src/server/game/Battlegrounds/BattlegroundMgr.cpp +++ b/src/server/game/Battlegrounds/BattlegroundMgr.cpp @@ -84,22 +84,7 @@ BattlegroundMgr::~BattlegroundMgr() void BattlegroundMgr::DeleteAllBattlegrounds() { - for (BattlegroundDataContainer::iterator itr1 = bgDataStore.begin(); itr1 != bgDataStore.end(); ++itr1) - { - BattlegroundData& data = itr1->second; - - while (!data.m_Battlegrounds.empty()) - delete data.m_Battlegrounds.begin()->second; - - data.m_Battlegrounds.clear(); - } - bgDataStore.clear(); - - for (auto itr = m_BGFreeSlotQueue.begin(); itr != m_BGFreeSlotQueue.end(); ++itr) - while (!itr->second.empty()) - delete itr->second.front(); - m_BGFreeSlotQueue.clear(); } @@ -122,18 +107,19 @@ void BattlegroundMgr::Update(uint32 diff) for (BattlegroundContainer::iterator itr = itrDelete; itr != bgs.end();) { itrDelete = itr++; - Battleground* bg = itrDelete->second; + Battleground* bg = itrDelete->second.get(); bg->Update(m_UpdateTimer); if (bg->ToBeDeleted()) { - itrDelete->second = nullptr; - bgs.erase(itrDelete); BattlegroundClientIdsContainer& clients = itr1->second.m_ClientBattlegroundIds[bg->GetBracketId()]; if (!clients.empty()) clients.erase(bg->GetClientInstanceID()); - delete bg; + // move out unique_ptr to delete after erasing + Trinity::unique_trackable_ptr<Battleground> bgPtr = std::move(itrDelete->second); + + bgs.erase(itrDelete); } } } @@ -270,7 +256,7 @@ Battleground* BattlegroundMgr::GetBattleground(uint32 instanceId, BattlegroundTy BattlegroundContainer const& bgs = it->second.m_Battlegrounds; BattlegroundContainer::const_iterator itr = bgs.find(instanceId); if (itr != bgs.end()) - return itr->second; + return itr->second.get(); } return nullptr; @@ -745,10 +731,9 @@ void BattlegroundMgr::RemoveFromBGFreeSlotQueue(uint32 mapId, uint32 instanceId) void BattlegroundMgr::AddBattleground(Battleground* bg) { if (bg) - bgDataStore[bg->GetTypeID()].m_Battlegrounds[bg->GetInstanceID()] = bg; -} - -void BattlegroundMgr::RemoveBattleground(BattlegroundTypeId bgTypeId, uint32 instanceId) -{ - bgDataStore[bgTypeId].m_Battlegrounds.erase(instanceId); + { + Trinity::unique_trackable_ptr<Battleground>& ptr = bgDataStore[bg->GetTypeID()].m_Battlegrounds[bg->GetInstanceID()]; + ptr.reset(bg); + bg->SetWeakPtr(ptr); + } } |