From b17c0648ffe283e17678dd40cb859c3d2b232ecf Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sun, 24 May 2020 19:01:47 +0200 Subject: [PATCH] Make DataLibrary use unique_ptr. --- CInterface/Library/DataLibrary.cpp | 2 +- src/Battling/Library/BattleLibrary.cpp | 10 ++++---- src/Battling/Library/BattleLibrary.hpp | 12 +++++----- src/Library/DataLibrary.cpp | 26 +-------------------- src/Library/DataLibrary.hpp | 32 +++++++++++--------------- tests/BattleTests/TurnOrderTests.cpp | 8 +++---- 6 files changed, 30 insertions(+), 60 deletions(-) diff --git a/CInterface/Library/DataLibrary.cpp b/CInterface/Library/DataLibrary.cpp index c0513ed..755bede 100644 --- a/CInterface/Library/DataLibrary.cpp +++ b/CInterface/Library/DataLibrary.cpp @@ -11,7 +11,7 @@ export uint8_t CreatureLib_DataLibrary_Construct(const DataLibrary*& out, Librar export void CreatureLib_DataLibrary_Destruct(const DataLibrary* p) { delete p; } #define SIMPLE_GET_FUNC(type, name, returnType) \ - export returnType CreatureLib_##type##_##name(const type* p) { return p->name(); } + export returnType CreatureLib_##type##_##name(const type* p) { return p->name().operator->(); } SIMPLE_GET_FUNC(DataLibrary, GetSettings, const LibrarySettings*); SIMPLE_GET_FUNC(DataLibrary, GetSpeciesLibrary, const SpeciesLibrary*); diff --git a/src/Battling/Library/BattleLibrary.cpp b/src/Battling/Library/BattleLibrary.cpp index 99afe6c..a3cdc42 100644 --- a/src/Battling/Library/BattleLibrary.cpp +++ b/src/Battling/Library/BattleLibrary.cpp @@ -24,25 +24,25 @@ BattleLibrary::~BattleLibrary() { delete _miscLibrary; } -const CreatureLib::Library::LibrarySettings* BattleLibrary::GetSettings() const noexcept { +const std::unique_ptr& BattleLibrary::GetSettings() const noexcept { return _staticLib->GetSettings(); } const BattleStatCalculator* BattleLibrary::GetStatCalculator() const noexcept { return _statCalculator; } -const CreatureLib::Library::SpeciesLibrary* BattleLibrary::GetSpeciesLibrary() const noexcept { +const std::unique_ptr& BattleLibrary::GetSpeciesLibrary() const noexcept { return _staticLib->GetSpeciesLibrary(); } -const CreatureLib::Library::ItemLibrary* BattleLibrary::GetItemLibrary() const noexcept { +const std::unique_ptr& BattleLibrary::GetItemLibrary() const noexcept { return _staticLib->GetItemLibrary(); } -const CreatureLib::Library::AttackLibrary* BattleLibrary::GetAttackLibrary() const noexcept { +const std::unique_ptr& BattleLibrary::GetAttackLibrary() const noexcept { return _staticLib->GetAttackLibrary(); } -const CreatureLib::Library::TypeLibrary* BattleLibrary::GetTypeLibrary() const noexcept { +const std::unique_ptr& BattleLibrary::GetTypeLibrary() const noexcept { return _staticLib->GetTypeLibrary(); } diff --git a/src/Battling/Library/BattleLibrary.hpp b/src/Battling/Library/BattleLibrary.hpp index 9313269..10a229d 100644 --- a/src/Battling/Library/BattleLibrary.hpp +++ b/src/Battling/Library/BattleLibrary.hpp @@ -25,12 +25,12 @@ namespace CreatureLib::Battling { ~BattleLibrary(); inline const Library::DataLibrary* GetStaticLib() const noexcept { return _staticLib; } - [[nodiscard]] const Library::LibrarySettings* GetSettings() const noexcept; - [[nodiscard]] const Library::SpeciesLibrary* GetSpeciesLibrary() const noexcept; - [[nodiscard]] const Library::ItemLibrary* GetItemLibrary() const noexcept; - [[nodiscard]] const Library::AttackLibrary* GetAttackLibrary() const noexcept; - [[nodiscard]] const Library::TypeLibrary* GetTypeLibrary() const noexcept; - [[nodiscard]] const Library::GrowthRateLibrary* GetGrowthRateLibrary() const noexcept { + [[nodiscard]] const std::unique_ptr& GetSettings() const noexcept; + [[nodiscard]] const std::unique_ptr& GetSpeciesLibrary() const noexcept; + [[nodiscard]] const std::unique_ptr& GetItemLibrary() const noexcept; + [[nodiscard]] const std::unique_ptr& GetAttackLibrary() const noexcept; + [[nodiscard]] const std::unique_ptr& GetTypeLibrary() const noexcept; + [[nodiscard]] const std::unique_ptr& GetGrowthRateLibrary() const noexcept { return _staticLib->GetGrowthRates(); } diff --git a/src/Library/DataLibrary.cpp b/src/Library/DataLibrary.cpp index eefd277..a073878 100644 --- a/src/Library/DataLibrary.cpp +++ b/src/Library/DataLibrary.cpp @@ -13,28 +13,4 @@ CreatureLib::Library::DataLibrary::DataLibrary(LibrarySettings* settings, Creatu AssertNotNull(_items) AssertNotNull(_growthRates) AssertNotNull(_typeLibrary) -} - -const CreatureLib::Library::LibrarySettings* CreatureLib::Library::DataLibrary::GetSettings() const noexcept { - return _settings; -} - -const CreatureLib::Library::SpeciesLibrary* CreatureLib::Library::DataLibrary::GetSpeciesLibrary() const noexcept { - return _species; -} - -const CreatureLib::Library::AttackLibrary* CreatureLib::Library::DataLibrary::GetAttackLibrary() const noexcept { - return _attacks; -} - -const CreatureLib::Library::ItemLibrary* CreatureLib::Library::DataLibrary::GetItemLibrary() const noexcept { - return _items; -} - -const CreatureLib::Library::GrowthRateLibrary* CreatureLib::Library::DataLibrary::GetGrowthRates() const noexcept { - return _growthRates; -} - -const CreatureLib::Library::TypeLibrary* CreatureLib::Library::DataLibrary::GetTypeLibrary() const noexcept { - return _typeLibrary; -} +} \ No newline at end of file diff --git a/src/Library/DataLibrary.hpp b/src/Library/DataLibrary.hpp index 1a2dc2b..4fb7aa6 100644 --- a/src/Library/DataLibrary.hpp +++ b/src/Library/DataLibrary.hpp @@ -14,32 +14,26 @@ namespace CreatureLib::Library { */ class DataLibrary { private: - const LibrarySettings* _settings; - const SpeciesLibrary* _species; - const AttackLibrary* _attacks; - const ItemLibrary* _items; - const GrowthRateLibrary* _growthRates; - const TypeLibrary* _typeLibrary; + const std::unique_ptr _settings; + const std::unique_ptr _species; + const std::unique_ptr _attacks; + const std::unique_ptr _items; + const std::unique_ptr _growthRates; + const std::unique_ptr _typeLibrary; public: DataLibrary(LibrarySettings* settings, CreatureLib::Library::SpeciesLibrary* species, CreatureLib::Library::AttackLibrary* attacks, CreatureLib::Library::ItemLibrary* items, CreatureLib::Library::GrowthRateLibrary* growthRates, TypeLibrary* typeLibrary); - virtual ~DataLibrary() { - delete _species; - delete _attacks; - delete _items; - delete _growthRates; - delete _typeLibrary; - } + virtual ~DataLibrary() {} - [[nodiscard]] const LibrarySettings* GetSettings() const noexcept; - [[nodiscard]] const SpeciesLibrary* GetSpeciesLibrary() const noexcept; - [[nodiscard]] const AttackLibrary* GetAttackLibrary() const noexcept; - [[nodiscard]] const ItemLibrary* GetItemLibrary() const noexcept; - [[nodiscard]] const GrowthRateLibrary* GetGrowthRates() const noexcept; - [[nodiscard]] const TypeLibrary* GetTypeLibrary() const noexcept; + [[nodiscard]] const std::unique_ptr& GetSettings() const noexcept { return _settings; } + [[nodiscard]] const std::unique_ptr& GetSpeciesLibrary() const noexcept { return _species; } + [[nodiscard]] const std::unique_ptr& GetAttackLibrary() const noexcept { return _attacks; } + [[nodiscard]] const std::unique_ptr& GetItemLibrary() const noexcept { return _items; } + [[nodiscard]] const std::unique_ptr& GetGrowthRates() const noexcept { return _growthRates; } + [[nodiscard]] const std::unique_ptr& GetTypeLibrary() const noexcept { return _typeLibrary; } }; } diff --git a/tests/BattleTests/TurnOrderTests.cpp b/tests/BattleTests/TurnOrderTests.cpp index de12ba2..975319c 100644 --- a/tests/BattleTests/TurnOrderTests.cpp +++ b/tests/BattleTests/TurnOrderTests.cpp @@ -30,7 +30,7 @@ TEST_CASE("Turn ordering: Attack before pass", "[Battling]") { } TEST_CASE("Turn ordering: High priority goes before no priority", "[Battling]") { - auto l = TestLibrary::Get()->GetAttackLibrary(); + const auto& l = TestLibrary::Get()->GetAttackLibrary(); auto a1 = new LearnedAttack(l->Get("standard"_cnc.GetHash()), AttackLearnMethod::Unknown); auto a2 = new LearnedAttack(l->Get("highPriority"_cnc.GetHash()), AttackLearnMethod::Unknown); auto choice1 = new AttackTurnChoice(nullptr, a1, CreatureIndex(0, 0)); @@ -52,7 +52,7 @@ TEST_CASE("Turn ordering: High priority goes before no priority", "[Battling]") } TEST_CASE("Turn ordering: Higher priority goes before high priority", "[Battling]") { - auto l = TestLibrary::Get()->GetAttackLibrary(); + const auto& l = TestLibrary::Get()->GetAttackLibrary(); auto a1 = new LearnedAttack(l->Get("highPriority"_cnc.GetHash()), AttackLearnMethod::Unknown); auto a2 = new LearnedAttack(l->Get("higherPriority"_cnc.GetHash()), AttackLearnMethod::Unknown); auto choice1 = new AttackTurnChoice(nullptr, a1, CreatureIndex(0, 0)); @@ -74,7 +74,7 @@ TEST_CASE("Turn ordering: Higher priority goes before high priority", "[Battling } TEST_CASE("Turn ordering: High priority goes before low priority", "[Battling]") { - auto l = TestLibrary::Get()->GetAttackLibrary(); + const auto& l = TestLibrary::Get()->GetAttackLibrary(); auto a1 = new LearnedAttack(l->Get("lowPriority"_cnc.GetHash()), AttackLearnMethod::Unknown); auto a2 = new LearnedAttack(l->Get("higherPriority"_cnc.GetHash()), AttackLearnMethod::Unknown); auto choice1 = new AttackTurnChoice(nullptr, a1, CreatureIndex(0, 0)); @@ -96,7 +96,7 @@ TEST_CASE("Turn ordering: High priority goes before low priority", "[Battling]") } TEST_CASE("Turn ordering: No priority goes before low priority", "[Battling]") { - auto l = TestLibrary::Get()->GetAttackLibrary(); + const auto& l = TestLibrary::Get()->GetAttackLibrary(); auto a1 = new LearnedAttack(l->Get("lowPriority"_cnc.GetHash()), AttackLearnMethod::Unknown); auto a2 = new LearnedAttack(l->Get("standard"_cnc.GetHash()), AttackLearnMethod::Unknown); auto choice1 = new AttackTurnChoice(nullptr, a1, CreatureIndex(0, 0));