void LocalizationMgr::Shutdown() { if(m_disabled) return; #define SAFE_FREE_PTR(x) if(deletedPointers.find((x)) == deletedPointers.end()) { deletedPointers.insert((x)); free((x)); } set<void*> deletedPointers; uint32 maxid=0; uint32 i,j; vector<pair<uint32,uint32> >::iterator xtr = m_languages.begin(); for(; xtr != m_languages.end(); ++xtr) if(xtr->second>maxid) maxid = xtr->second; maxid++; Log.Notice("LocalizationMgr", "Beginning pointer cleanup of %u section(s)...", maxid); uint32 t = getMSTime(); for(i = 0; i < maxid; i++) { for(HM_NAMESPACE::hash_map<uint32, LocalizedQuest>::iterator itr = m_Quests[i].begin(); itr != m_Quests[i].end(); itr++) { SAFE_FREE_PTR(itr->second.Title); SAFE_FREE_PTR(itr->second.Details); SAFE_FREE_PTR(itr->second.Objectives); SAFE_FREE_PTR(itr->second.CompletionText); SAFE_FREE_PTR(itr->second.IncompleteText); SAFE_FREE_PTR(itr->second.EndText); SAFE_FREE_PTR(itr->second.ObjectiveText[0]); SAFE_FREE_PTR(itr->second.ObjectiveText[1]); SAFE_FREE_PTR(itr->second.ObjectiveText[2]); SAFE_FREE_PTR(itr->second.ObjectiveText[3]); } for(HM_NAMESPACE::hash_map<uint32, LocalizedItem>::iterator itr = m_Items[i].begin(); itr != m_Items[i].end(); itr++) { SAFE_FREE_PTR(itr->second.Name); SAFE_FREE_PTR(itr->second.Description); } for(HM_NAMESPACE::hash_map<uint32, LocalizedNpcText>::iterator itr = m_NpcTexts[i].begin(); itr != m_NpcTexts[i].end(); itr++) { for(j = 0; j < 8; ++j) { SAFE_FREE_PTR(itr->second.Texts[j][0]); SAFE_FREE_PTR(itr->second.Texts[j][1]); } } for(HM_NAMESPACE::hash_map<uint32, LocalizedCreatureName>::iterator itr = m_CreatureNames[i].begin(); itr != m_CreatureNames[i].end(); itr++) { SAFE_FREE_PTR(itr->second.Name); SAFE_FREE_PTR(itr->second.SubName); } for(HM_NAMESPACE::hash_map<uint32, LocalizedGameObjectName>::iterator itr = m_GameObjectNames[i].begin(); itr != m_GameObjectNames[i].end(); itr++) { SAFE_FREE_PTR(itr->second.Name); } for(HM_NAMESPACE::hash_map<uint32, LocalizedItemPage>::iterator itr = m_ItemPages[i].begin(); itr != m_ItemPages[i].end(); itr++) { SAFE_FREE_PTR(itr->second.Text); } } deletedPointers.clear(); delete [] m_ItemPages; delete [] m_CreatureNames; delete [] m_GameObjectNames; delete [] m_Items; delete [] m_NpcTexts; delete [] m_Quests; m_languages.clear(); Log.Notice("LocalizationMgr", "Pointer cleanup completed in %.4f seconds.", float(float(getMSTime()-t) / 1000.0f)); #undef SAFE_FREE_PTR }
void LocalizationMgr::Shutdown() { if (m_disabled) return; #define SAFE_FREE_PTR(x) if (deletedPointers.find((x)) == deletedPointers.end()) { deletedPointers.insert((x)); free((x)); } std::set<void*> deletedPointers; uint32 maxid = 0; uint32 i, j; std::vector<std::pair<uint32, uint32> >::iterator xtr = m_languages.begin(); for (; xtr != m_languages.end(); ++xtr) if (xtr->second > maxid) maxid = xtr->second; maxid++; Log.Notice("LocalizationMgr", "Beginning pointer cleanup..."); uint32 t = getMSTime(); for (i = 0; i < maxid; ++i) { for (std::unordered_map<uint32, LocalizedQuest>::iterator itr = m_Quests[i].begin(); itr != m_Quests[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Title); SAFE_FREE_PTR(itr->second.Details); SAFE_FREE_PTR(itr->second.Objectives); SAFE_FREE_PTR(itr->second.CompletionText); SAFE_FREE_PTR(itr->second.IncompleteText); SAFE_FREE_PTR(itr->second.EndText); SAFE_FREE_PTR(itr->second.ObjectiveText[0]); SAFE_FREE_PTR(itr->second.ObjectiveText[1]); SAFE_FREE_PTR(itr->second.ObjectiveText[2]); SAFE_FREE_PTR(itr->second.ObjectiveText[3]); } for (std::unordered_map<uint32, LocalizedItem>::iterator itr = m_Items[i].begin(); itr != m_Items[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Name); SAFE_FREE_PTR(itr->second.Description); } for (std::unordered_map<uint32, LocalizedNpcText>::iterator itr = m_NpcTexts[i].begin(); itr != m_NpcTexts[i].end(); ++itr) { for (j = 0; j < 8; ++j) { SAFE_FREE_PTR(itr->second.Texts[j][0]); SAFE_FREE_PTR(itr->second.Texts[j][1]); } } for (std::unordered_map<uint32, LocalizedCreatureName>::iterator itr = m_CreatureNames[i].begin(); itr != m_CreatureNames[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Name); SAFE_FREE_PTR(itr->second.SubName); } for (std::unordered_map<uint32, LocalizedGameObjectName>::iterator itr = m_GameObjectNames[i].begin(); itr != m_GameObjectNames[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Name); } for (std::unordered_map<uint32, LocalizedItemPage>::iterator itr = m_ItemPages[i].begin(); itr != m_ItemPages[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Text); } for (std::unordered_map<uint32, LocalizedCreatureText>::iterator itr = m_CreatureText[i].begin(); itr != m_CreatureText[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Text); } for (std::unordered_map<uint32, LocalizedGossipMenuOption>::iterator itr = m_GossipMenuOption[i].begin(); itr != m_GossipMenuOption[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Text); } for (std::unordered_map<uint32, LocalizedWorldStringTable>::iterator itr = m_WorldStrings[i].begin(); itr != m_WorldStrings[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Text); } for (std::unordered_map<uint32, LocalizedWorldBroadCast>::iterator itr = m_WorldBroadCast[i].begin(); itr != m_WorldBroadCast[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Text); } for (std::unordered_map<uint32, LocalizedWorldMapInfo>::iterator itr = m_WorldMapInfo[i].begin(); itr != m_WorldMapInfo[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.Text); } for (std::unordered_map<uint32, LocalizedMonstersay>::iterator itr = m_MonsterSay[i].begin(); itr != m_MonsterSay[i].end(); ++itr) { SAFE_FREE_PTR(itr->second.monstername); SAFE_FREE_PTR(itr->second.text0); SAFE_FREE_PTR(itr->second.text1); SAFE_FREE_PTR(itr->second.text2); SAFE_FREE_PTR(itr->second.text3); SAFE_FREE_PTR(itr->second.text4); } } deletedPointers.clear(); delete[] m_ItemPages; delete[] m_CreatureNames; delete[] m_GameObjectNames; delete[] m_Items; delete[] m_NpcTexts; delete[] m_Quests; delete[] m_CreatureText; delete[] m_GossipMenuOption; delete[] m_WorldStrings; delete[] m_WorldBroadCast; delete[] m_WorldMapInfo; delete[] m_MonsterSay; m_languages.clear(); Log.Notice("LocalizationMgr", "Pointer cleanup completed in %.4f seconds.", (getMSTime() - t) / 1000.0f); #undef SAFE_FREE_PTR }