From 69f6a89c0d554ddae885e066420308931042828b Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 31 May 2020 19:04:40 +0200 Subject: [PATCH] Make CreatureParty use smart pointers. --- CInterface/Battling/CreatureParty.cpp | 2 +- src/Battling/Models/BattleParty.hpp | 2 +- src/Battling/Models/CreatureParty.hpp | 16 ++++++---------- 3 files changed, 8 insertions(+), 12 deletions(-) diff --git a/CInterface/Battling/CreatureParty.cpp b/CInterface/Battling/CreatureParty.cpp index 4a0f258..624421f 100644 --- a/CInterface/Battling/CreatureParty.cpp +++ b/CInterface/Battling/CreatureParty.cpp @@ -10,7 +10,7 @@ export CreatureParty* CreatureLib_CreatureParty_ConstructFromArray(Creature* cre export void CreatureLib_CreatureParty_Destruct(const CreatureParty* p) { delete p; } export uint8_t CreatureLib_CreatureParty_GetAtIndex(Creature*& out, const CreatureParty* p, size_t index) { - Try(out = p->GetAtIndex(index);) + Try(out = p->GetAtIndex(index).operator->();) } export uint8_t CreatureLib_CreatureParty_Switch(CreatureParty* p, size_t a, size_t b) { Try(p->Switch(a, b);) } diff --git a/src/Battling/Models/BattleParty.hpp b/src/Battling/Models/BattleParty.hpp index 3ca0591..8b84e62 100644 --- a/src/Battling/Models/BattleParty.hpp +++ b/src/Battling/Models/BattleParty.hpp @@ -33,7 +33,7 @@ namespace CreatureLib::Battling { } inline bool HasCreaturesNotInField() const { - auto p = _party->GetParty(); + auto& p = _party->GetParty(); for (const auto& creature : p) { if (creature == nullptr) continue; diff --git a/src/Battling/Models/CreatureParty.hpp b/src/Battling/Models/CreatureParty.hpp index 8eae008..a70b9cf 100644 --- a/src/Battling/Models/CreatureParty.hpp +++ b/src/Battling/Models/CreatureParty.hpp @@ -6,20 +6,16 @@ namespace CreatureLib::Battling { class CreatureParty { - ArbUt::List _party; + ArbUt::UniquePtrList _party; public: CreatureParty(size_t size) noexcept : _party(size) {} - CreatureParty(ArbUt::List party) noexcept : _party(party) {} + CreatureParty(ArbUt::List party) noexcept : _party(party.GetStdList()) {} CreatureParty(std::initializer_list party) noexcept : _party(party) {} - virtual ~CreatureParty() noexcept { - for (auto c : _party) { - delete c; - } - } + virtual ~CreatureParty() = default; - Creature* GetAtIndex(size_t index) const noexcept { return _party[index]; } + ArbUt::BorrowedPtr GetAtIndex(size_t index) const noexcept { return _party[index]; } void Switch(size_t a, size_t b) noexcept { auto ca = _party[a]; @@ -38,8 +34,8 @@ namespace CreatureLib::Battling { return false; } - ArbUt::List& GetParty() noexcept { return _party; } - const ArbUt::List& GetParty() const noexcept { return _party; } + ArbUt::UniquePtrList& GetParty() noexcept { return _party; } + const ArbUt::UniquePtrList& GetParty() const noexcept { return _party; } size_t GetLength() const noexcept { return _party.Count(); } };