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
}
Exemple #2
0
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
}