diff --git a/cockatrice/src/client/tapped_out_interface.cpp b/cockatrice/src/client/tapped_out_interface.cpp index d6a47b018..4fd103c8c 100644 --- a/cockatrice/src/client/tapped_out_interface.cpp +++ b/cockatrice/src/client/tapped_out_interface.cpp @@ -92,16 +92,9 @@ void TappedOutInterface::analyzeDeck(DeckList *deck) manager->post(request, data); } -struct CopyMainOrSide +void TappedOutInterface::copyDeckSplitMainAndSide(DeckList &source, DeckList &mainboard, DeckList &sideboard) { - CardDatabase &cardDatabase; - DeckList &mainboard, &sideboard; - - CopyMainOrSide(CardDatabase &_cardDatabase, DeckList &_mainboard, DeckList &_sideboard) - : cardDatabase(_cardDatabase), mainboard(_mainboard), sideboard(_sideboard){}; - - void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const - { + auto copyMainOrSide = [this, &mainboard, &sideboard](const auto node, const auto card) { CardInfoPtr dbCard = cardDatabase.getCard(card->getName()); if (!dbCard || dbCard->getIsToken()) return; @@ -112,11 +105,7 @@ struct CopyMainOrSide else addedCard = mainboard.addCard(card->getName(), node->getName()); addedCard->setNumber(card->getNumber()); - } -}; + }; -void TappedOutInterface::copyDeckSplitMainAndSide(DeckList &source, DeckList &mainboard, DeckList &sideboard) -{ - CopyMainOrSide copyMainOrSide(cardDatabase, mainboard, sideboard); source.forEachCard(copyMainOrSide); } diff --git a/cockatrice/src/deck/deck_loader.cpp b/cockatrice/src/deck/deck_loader.cpp index 1c7136bf5..dc1deee2d 100644 --- a/cockatrice/src/deck/deck_loader.cpp +++ b/cockatrice/src/deck/deck_loader.cpp @@ -316,17 +316,12 @@ QString DeckLoader::exportDeckToDecklist(DecklistWebsite website) return deckString; } -// This struct is here to support the forEachCard function call, defined in decklist. -// It requires a function to be called for each card, and it will set the providerId. -struct SetProviderId +/** + * Sets the providerId on each card in the decklist based on its set name and collector number. + */ +void DeckLoader::resolveSetNameAndNumberToProviderID() { - // Main operator for struct, allowing the foreachcard to work. - SetProviderId() - { - } - - void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const - { + auto setProviderId = [](const auto node, const auto card) { Q_UNUSED(node); // Retrieve the providerId based on setName and collectorNumber QString providerId = @@ -336,50 +331,23 @@ struct SetProviderId // Set the providerId on the card card->setCardProviderId(providerId); - } -}; + }; -/** - * This function iterates through each card in the decklist and sets the providerId - * on each card based on its set name and collector number. - */ -void DeckLoader::resolveSetNameAndNumberToProviderID() -{ - // Set up the struct to call. - SetProviderId setProviderId; - - // Call the forEachCard method for each card in the deck forEachCard(setProviderId); } -// This struct is here to support the forEachCard function call, defined in decklist. -// It requires a function to be called for each card, and it will set the providerId. -struct ClearSetNameAndNumber -{ - // Main operator for struct, allowing the foreachcard to work. - ClearSetNameAndNumber() - { - } - - void operator()(const InnerDecklistNode *node, DecklistCardNode *card) const - { - Q_UNUSED(node); - // Set the providerId on the card - card->setCardSetShortName(nullptr); - card->setCardCollectorNumber(nullptr); - } -}; - /** - * This function iterates through each card in the decklist and sets the providerId - * on each card based on its set name and collector number. + * Clears the set name and numbers on each card in the decklist. */ void DeckLoader::clearSetNamesAndNumbers() { - // Set up the struct to call. - ClearSetNameAndNumber clearSetNameAndNumber; + auto clearSetNameAndNumber = [](const auto node, auto card) { + Q_UNUSED(node) + // Set the providerId on the card + card->setCardSetShortName(nullptr); + card->setCardCollectorNumber(nullptr); + }; - // Call the forEachCard method for each card in the deck forEachCard(clearSetNameAndNumber); } diff --git a/cockatrice/src/deck/deck_stats_interface.cpp b/cockatrice/src/deck/deck_stats_interface.cpp index dc2ab14df..7cfd69d40 100644 --- a/cockatrice/src/deck/deck_stats_interface.cpp +++ b/cockatrice/src/deck/deck_stats_interface.cpp @@ -67,26 +67,15 @@ void DeckStatsInterface::analyzeDeck(DeckList *deck) manager->post(request, data); } -struct CopyIfNotAToken +void DeckStatsInterface::copyDeckWithoutTokens(DeckList &source, DeckList &destination) { - CardDatabase &cardDatabase; - DeckList &destination; - - CopyIfNotAToken(CardDatabase &_cardDatabase, DeckList &_destination) - : cardDatabase(_cardDatabase), destination(_destination){}; - - void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) const - { + auto copyIfNotAToken = [this, &destination](const auto node, const auto card) { CardInfoPtr dbCard = cardDatabase.getCard(card->getName()); if (dbCard && !dbCard->getIsToken()) { DecklistCardNode *addedCard = destination.addCard(card->getName(), node->getName()); addedCard->setNumber(card->getNumber()); } - } -}; + }; -void DeckStatsInterface::copyDeckWithoutTokens(DeckList &source, DeckList &destination) -{ - CopyIfNotAToken copyIfNotAToken(cardDatabase, destination); source.forEachCard(copyIfNotAToken); } diff --git a/common/decklist.cpp b/common/decklist.cpp index 0f9ad7b62..973fbd38e 100644 --- a/common/decklist.cpp +++ b/common/decklist.cpp @@ -762,20 +762,9 @@ bool DeckList::loadFromFile_Plain(QIODevice *device) return loadFromStream_Plain(in, false); } -struct WriteToStream +bool DeckList::saveToStream_Plain(QTextStream &stream, bool prefixSideboardCards, bool slashTappedOutSplitCards) { - QTextStream &stream; - bool prefixSideboardCards; - bool slashTappedOutSplitCards; - - WriteToStream(QTextStream &_stream, bool _prefixSideboardCards, bool _slashTappedOutSplitCards) - : stream(_stream), prefixSideboardCards(_prefixSideboardCards), - slashTappedOutSplitCards(_slashTappedOutSplitCards) - { - } - - void operator()(const InnerDecklistNode *node, const DecklistCardNode *card) - { + auto writeToStream = [&stream, prefixSideboardCards, slashTappedOutSplitCards](const auto node, const auto card) { if (prefixSideboardCards && node->getName() == DECK_ZONE_SIDE) { stream << "SB: "; } @@ -784,12 +773,8 @@ struct WriteToStream } else { stream << QString("%1 %2\n").arg(card->getNumber()).arg(card->getName().replace("//", "/")); } - } -}; + }; -bool DeckList::saveToStream_Plain(QTextStream &out, bool prefixSideboardCards, bool slashTappedOutSplitCards) -{ - WriteToStream writeToStream(out, prefixSideboardCards, slashTappedOutSplitCards); forEachCard(writeToStream); return true; }