fixed a memory leak. Not sure how it got introduced but the destructor for DeckManager now does the heavy lifting for memory cleanup and not the static method EndInstance().

reorganized DeckMetaData method LoadDeck so that it appears underneath the constructor.
This commit is contained in:
techdragon.nguyen@gmail.com
2011-04-21 06:35:44 +00:00
parent cc55042477
commit 29eea1d39c
2 changed files with 49 additions and 49 deletions

View File

@@ -164,33 +164,7 @@ bool DeckManager::instanceFlag = false;
void DeckManager::EndInstance()
{
if (mInstance)
{
map<string, StatsWrapper *>::iterator it;
vector<DeckMetaData *>::iterator metaDataIter;
for (it = mInstance->aiDeckStatsMap.begin(); it != mInstance->aiDeckStatsMap.end(); it++){
SAFE_DELETE(it->second);
}
for (it = mInstance->playerDeckStatsMap.begin(); it != mInstance->playerDeckStatsMap.end(); it++){
SAFE_DELETE(it->second);
}
for( metaDataIter = mInstance->aiDeckOrderList.begin(); metaDataIter != mInstance->aiDeckOrderList.end(); ++metaDataIter)
{
SAFE_DELETE( *metaDataIter );
}
for( metaDataIter = mInstance->playerDeckOrderList.begin(); metaDataIter != mInstance->playerDeckOrderList.end(); ++metaDataIter)
{
SAFE_DELETE( *metaDataIter );
}
mInstance->aiDeckOrderList.clear();
mInstance->playerDeckOrderList.clear();
mInstance->aiDeckStatsMap.clear();
mInstance->playerDeckStatsMap.clear();
SAFE_DELETE( mInstance );
}
SAFE_DELETE(mInstance);
}
DeckManager* DeckManager::GetInstance()
@@ -215,4 +189,28 @@ int DeckManager::getDifficultyRating(Player *statsPlayer, Player *player)
DeckManager::~DeckManager()
{
instanceFlag = false;
map<string, StatsWrapper *>::iterator it;
vector<DeckMetaData *>::iterator metaDataIter;
for (it = mInstance->aiDeckStatsMap.begin(); it != mInstance->aiDeckStatsMap.end(); it++){
SAFE_DELETE(it->second);
}
for (it = mInstance->playerDeckStatsMap.begin(); it != mInstance->playerDeckStatsMap.end(); it++){
SAFE_DELETE(it->second);
}
for( metaDataIter = mInstance->aiDeckOrderList.begin(); metaDataIter != mInstance->aiDeckOrderList.end(); ++metaDataIter)
{
SAFE_DELETE( *metaDataIter );
}
for( metaDataIter = mInstance->playerDeckOrderList.begin(); metaDataIter != mInstance->playerDeckOrderList.end(); ++metaDataIter)
{
SAFE_DELETE( *metaDataIter );
}
aiDeckOrderList.clear();
playerDeckOrderList.clear();
aiDeckStatsMap.clear();
playerDeckStatsMap.clear();
}

View File

@@ -21,6 +21,30 @@ DeckMetaData::DeckMetaData(const string& filename, bool isAI)
LoadDeck();
}
void DeckMetaData::LoadDeck()
{
if (!mDeckLoaded)
{
MTGDeck deck(mFilename.c_str(), NULL, 1);
mName = trim(deck.meta_name);
mDescription = trim(deck.meta_desc);
mDeckId = atoi((mFilename.substr(mFilename.find("deck") + 4, mFilename.find(".txt"))).c_str());
mDeckLoaded = true;
if (!mIsAI)
mAvatarFilename = "avatar.jpg";
else
{
ostringstream avatarFilename;
avatarFilename << "avatar" << getAvatarId() << ".jpg";
mAvatarFilename = avatarFilename.str();
}
}
}
void DeckMetaData::LoadStats()
{
if (!mStatsLoaded)
@@ -73,28 +97,6 @@ int DeckMetaData::getAvatarId()
return mDeckId % 100;
}
void DeckMetaData::LoadDeck()
{
if (!mDeckLoaded)
{
MTGDeck deck(mFilename.c_str(), NULL, 1);
mName = trim(deck.meta_name);
mDescription = trim(deck.meta_desc);
mDeckId = atoi((mFilename.substr(mFilename.find("deck") + 4, mFilename.find(".txt"))).c_str());
mDeckLoaded = true;
if (!mIsAI)
mAvatarFilename = "avatar.jpg";
else
{
ostringstream avatarFilename;
avatarFilename << "avatar" << getAvatarId() << ".jpg";
mAvatarFilename = avatarFilename.str();
}
}
}
//Accessors
string DeckMetaData::getFilename()