diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp index 14da1eb28..a294601fb 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.cpp @@ -21,6 +21,8 @@ uint qHash(const QRegularExpression &key, uint seed) noexcept } #endif +static const QString CURRENT_SIDEBOARD_PLAN_KEY = ""; + bool DeckList::Metadata::isEmpty() const { return name.isEmpty() && comments.isEmpty() && bannerCard.isEmpty() && tags.isEmpty(); @@ -37,36 +39,23 @@ DeckList::DeckList(const QString &nativeString) DeckList::DeckList(const Metadata &metadata, const DecklistNodeTree &tree, - const QMap &sideboardPlans) + const QMap &sideboardPlans) : metadata(metadata), sideboardPlans(sideboardPlans), tree(tree) { } -DeckList::~DeckList() +QList DeckList::getCurrentSideboardPlan() const { - QMapIterator i(sideboardPlans); - while (i.hasNext()) - delete i.next().value(); -} + if (!sideboardPlans.contains(CURRENT_SIDEBOARD_PLAN_KEY)) { + return {}; + } -QList DeckList::getCurrentSideboardPlan() -{ - SideboardPlan *current = sideboardPlans.value(QString(), 0); - if (!current) - return QList(); - else - return current->getMoveList(); + return sideboardPlans.value(CURRENT_SIDEBOARD_PLAN_KEY).getMoveList(); } void DeckList::setCurrentSideboardPlan(const QList &plan) { - SideboardPlan *current = sideboardPlans.value(QString(), 0); - if (!current) { - current = new SideboardPlan; - sideboardPlans.insert(QString(), current); - } - - current->setMoveList(plan); + sideboardPlans[CURRENT_SIDEBOARD_PLAN_KEY].setMoveList(plan); } bool DeckList::readElement(QXmlStreamReader *xml) @@ -95,11 +84,9 @@ bool DeckList::readElement(QXmlStreamReader *xml) } else if (childName == "zone") { tree.readZoneElement(xml); } else if (childName == "sideboard_plan") { - SideboardPlan *newSideboardPlan = new SideboardPlan; - if (newSideboardPlan->readElement(xml)) { - sideboardPlans.insert(newSideboardPlan->getName(), newSideboardPlan); - } else { - delete newSideboardPlan; + SideboardPlan newSideboardPlan; + if (newSideboardPlan.readElement(xml)) { + sideboardPlans.insert(newSideboardPlan.getName(), newSideboardPlan); } } } else if (xml->isEndElement() && (childName == "cockatrice_deck")) { @@ -138,9 +125,8 @@ void DeckList::write(QXmlStreamWriter *xml) const tree.write(xml); // Write sideboard plans - QMapIterator i(sideboardPlans); - while (i.hasNext()) { - i.next().value()->write(xml); + for (auto &sideboardPlan : sideboardPlans.values()) { + sideboardPlan.write(xml); } xml->writeEndElement(); // Close "cockatrice_deck" diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h index ffbfebcf3..d0ca55342 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/deck_list.h @@ -78,9 +78,9 @@ public: }; private: - Metadata metadata; ///< Deck metadata that is stored in the deck file - QMap sideboardPlans; ///< Named sideboard plans. - DecklistNodeTree tree; ///< The deck tree (zones + cards). + Metadata metadata; ///< Deck metadata that is stored in the deck file + QMap sideboardPlans; ///< Named sideboard plans. + DecklistNodeTree tree; ///< The deck tree (zones + cards). /** * @brief Cached deck hash, recalculated lazily. @@ -132,8 +132,7 @@ public: /// @brief Construct from components DeckList(const Metadata &metadata, const DecklistNodeTree &tree, - const QMap &sideboardPlans = {}); - virtual ~DeckList(); + const QMap &sideboardPlans = {}); /** * @brief Gets a pointer to the underlying node tree. @@ -186,9 +185,9 @@ public: /// @name Sideboard plans ///@{ - QList getCurrentSideboardPlan(); + QList getCurrentSideboardPlan() const; void setCurrentSideboardPlan(const QList &plan); - const QMap &getSideboardPlans() const + const QMap &getSideboardPlans() const { return sideboardPlans; } diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp index a78f8adb3..d991ec98e 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp +++ b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.cpp @@ -44,7 +44,7 @@ bool SideboardPlan::readElement(QXmlStreamReader *xml) return false; } -void SideboardPlan::write(QXmlStreamWriter *xml) +void SideboardPlan::write(QXmlStreamWriter *xml) const { xml->writeStartElement("sideboard_plan"); xml->writeTextElement("name", name); diff --git a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h index 2ca7845b9..524217c2d 100644 --- a/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h +++ b/libcockatrice_deck_list/libcockatrice/deck_list/sideboard_plan.h @@ -36,8 +36,7 @@ public: * @param _name The plan name. * @param _moveList Initial list of card move instructions. */ - explicit SideboardPlan(const QString &_name = QString(), - const QList &_moveList = QList()); + explicit SideboardPlan(const QString &_name = "", const QList &_moveList = {}); /** * @brief Read a SideboardPlan from an XML stream. @@ -50,7 +49,7 @@ public: * @brief Write this SideboardPlan to XML. * @param xml Stream to append the serialized element to. */ - void write(QXmlStreamWriter *xml); + void write(QXmlStreamWriter *xml) const; /// @return The plan name. [[nodiscard]] QString getName() const