diff --git a/projects/mtg/src/DeckManager.cpp b/projects/mtg/src/DeckManager.cpp index 3188100cb..6d507de7a 100644 --- a/projects/mtg/src/DeckManager.cpp +++ b/projects/mtg/src/DeckManager.cpp @@ -24,30 +24,35 @@ vector * DeckManager::getAIDeckOrderList() return &aiDeckOrderList; } -DeckMetaData * DeckManager::getDeckMetaDataById( int deckId, bool isAI ) +/* +** Predicate helper for getDeckMetadataByID() +*/ +struct DeckIDMatch { - - DeckMetaData* currentDeck = NULL; - vector::iterator currentPos, end; - if ( isAI ) + DeckIDMatch(int id) : mID(id) { - currentPos = aiDeckOrderList.begin(); - end = aiDeckOrderList.end(); - } - else - { - currentPos = playerDeckOrderList.begin(); - end = playerDeckOrderList.end(); } - - for (; currentPos != end; ++currentPos) + bool operator() (DeckMetaData* inPtr) { - currentDeck = *currentPos; - if (currentDeck->getDeckId() == deckId ) - return currentDeck; + return inPtr->getDeckId() == mID; } - return NULL; + + int mID; +}; + +DeckMetaData* DeckManager::getDeckMetaDataById( int deckId, bool isAI ) +{ + DeckMetaData* deck = NULL; + std::vector& deckList = isAI ? aiDeckOrderList : playerDeckOrderList; + + std::vector::iterator pos = find_if(deckList.begin(), deckList.end(), DeckIDMatch(deckId)); + if (pos != deckList.end()) + { + deck = *pos; + } + + return deck; } StatsWrapper * DeckManager::getExtendedStatsForDeckId( int deckId, MTGAllCards *collection, bool isAI ) @@ -59,24 +64,22 @@ StatsWrapper * DeckManager::getExtendedStatsForDeckId( int deckId, MTGAllCards * StatsWrapper * DeckManager::getExtendedDeckStats( DeckMetaData *selectedDeck, MTGAllCards *collection, bool isAI ) { - StatsWrapper * stats = NULL; - map *statsMap = NULL; + StatsWrapper* stats = NULL; string deckName = selectedDeck->getFilename(); int deckId = selectedDeck->getDeckId(); - if (isAI) - statsMap = &aiDeckStatsMap; - else - statsMap = &playerDeckStatsMap; - - if (statsMap->empty() || (statsMap->find(deckName) == statsMap->end())) + map* statsMap = isAI ? &aiDeckStatsMap : &playerDeckStatsMap; + if (statsMap->find(deckName) == statsMap->end()) { stats = NEW StatsWrapper(deckId); stats->updateStats( deckName, collection); - statsMap->insert( make_pair( deckName, stats)); + statsMap->insert( make_pair(deckName, stats)); + } + else + { + stats = statsMap->find(deckName)->second; } - stats = statsMap->find(deckName) ->second; return stats; } diff --git a/projects/mtg/src/GameStateDeckViewer.cpp b/projects/mtg/src/GameStateDeckViewer.cpp index 5a8c6c816..53645a0dc 100644 --- a/projects/mtg/src/GameStateDeckViewer.cpp +++ b/projects/mtg/src/GameStateDeckViewer.cpp @@ -71,7 +71,6 @@ GameStateDeckViewer::~GameStateDeckViewer() SAFE_DELETE(myCollection->parent); SAFE_DELETE(myCollection); } - SAFE_DELETE(stw); SAFE_DELETE(filterMenu); } diff --git a/projects/mtg/src/SimplePopup.cpp b/projects/mtg/src/SimplePopup.cpp index 00fe4b962..6003b629b 100644 --- a/projects/mtg/src/SimplePopup.cpp +++ b/projects/mtg/src/SimplePopup.cpp @@ -78,8 +78,7 @@ void SimplePopup::Update(DeckMetaData* selectedDeck) mDeckInformation = selectedDeck; // get the information from the cache, if it doesn't exist create an entry - DeckManager *deckManager = DeckManager::GetInstance(); - mStatsWrapper = deckManager->getExtendedDeckStats( mDeckInformation, mCollection, (mDeckInformation->getFilename().find("baka") != string::npos) ); + mStatsWrapper = DeckManager::GetInstance()->getExtendedDeckStats( mDeckInformation, mCollection, (mDeckInformation->getFilename().find("baka") != string::npos) ); }