From 17b82a186f1cc2f7ea2ba3e6b4544ba5a38af1a0 Mon Sep 17 00:00:00 2001 From: Zach H Date: Thu, 26 Dec 2024 19:52:18 -0500 Subject: [PATCH] Add QSet for faster lookups in CardDatabase (#5332) --- cockatrice/src/game/cards/card_database_model.cpp | 12 ++++++++---- cockatrice/src/game/cards/card_database_model.h | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/cockatrice/src/game/cards/card_database_model.cpp b/cockatrice/src/game/cards/card_database_model.cpp index a14a9d494..47f79eff5 100644 --- a/cockatrice/src/game/cards/card_database_model.cpp +++ b/cockatrice/src/game/cards/card_database_model.cpp @@ -110,15 +110,17 @@ bool CardDatabaseModel::checkCardHasAtLeastOneEnabledSet(CardInfoPtr card) void CardDatabaseModel::cardDatabaseEnabledSetsChanged() { // remove all the cards no more present in at least one enabled set - foreach (CardInfoPtr card, cardList) { - if (!checkCardHasAtLeastOneEnabledSet(card)) + for (const CardInfoPtr &card : cardList) { + if (!checkCardHasAtLeastOneEnabledSet(card)) { cardRemoved(card); + } } // re-check all the card currently not shown, maybe their part of a newly-enabled set - foreach (CardInfoPtr card, db->getCardList()) { - if (!cardList.contains(card)) + for (const CardInfoPtr &card : db->getCardList()) { + if (!cardListSet.contains(card)) { cardAdded(card); + } } } @@ -128,6 +130,7 @@ void CardDatabaseModel::cardAdded(CardInfoPtr card) // add the card if it's present in at least one enabled set beginInsertRows(QModelIndex(), cardList.size(), cardList.size()); cardList.append(card); + cardListSet.insert(card); connect(card.data(), SIGNAL(cardInfoChanged(CardInfoPtr)), this, SLOT(cardInfoChanged(CardInfoPtr))); endInsertRows(); } @@ -142,6 +145,7 @@ void CardDatabaseModel::cardRemoved(CardInfoPtr card) beginRemoveRows(QModelIndex(), row, row); disconnect(card.data(), nullptr, this, nullptr); + cardListSet.remove(card); card.clear(); cardList.removeAt(row); endRemoveRows(); diff --git a/cockatrice/src/game/cards/card_database_model.h b/cockatrice/src/game/cards/card_database_model.h index 403713c98..1720b4b9a 100644 --- a/cockatrice/src/game/cards/card_database_model.h +++ b/cockatrice/src/game/cards/card_database_model.h @@ -46,6 +46,7 @@ public: private: QList cardList; + QSet cardListSet; // Supports faster lookups in cardDatabaseEnabledSetsChanged() CardDatabase *db; bool showOnlyCardsFromEnabledSets;