Use Arbutils exception Macros, instead of own ones.
continuous-integration/drone/push Build is passing Details

Signed-off-by: Deukhoofd <Deukhoofd@gmail.com>
This commit is contained in:
Deukhoofd 2020-08-17 12:18:01 +02:00
parent 9d5316edff
commit 98dacbccde
Signed by: Deukhoofd
GPG Key ID: F63E044490819F6F
20 changed files with 44 additions and 60 deletions

View File

@ -29,7 +29,7 @@ namespace CreatureLib::Battling {
EventHook() : _offset(0), _capacity(2048) { EventHook() : _offset(0), _capacity(2048) {
auto ptr = malloc(_capacity); auto ptr = malloc(_capacity);
if (ptr == nullptr) { if (ptr == nullptr) {
THROW_CREATURE("Out of memory."); THROW("Out of memory.");
} }
_memory = static_cast<uint8_t*>(ptr); _memory = static_cast<uint8_t*>(ptr);
} }
@ -49,7 +49,7 @@ namespace CreatureLib::Battling {
_capacity += stepSize; _capacity += stepSize;
auto newPtr = realloc(_memory, _capacity); auto newPtr = realloc(_memory, _capacity);
if (newPtr == nullptr) { if (newPtr == nullptr) {
THROW_CREATURE("Out of memory."); THROW("Out of memory.");
} }
_memory = static_cast<uint8_t*>(newPtr); _memory = static_cast<uint8_t*>(newPtr);
} }

View File

@ -105,8 +105,8 @@ namespace CreatureLib::Battling {
return {battle->GetCreature(index)}; return {battle->GetCreature(index)};
}; };
} }
THROW_CREATURE("Unknown attack target kind: '" << CreatureLib::Library::AttackTargetHelper::ToString(target) THROW("Unknown attack target kind: '" << CreatureLib::Library::AttackTargetHelper::ToString(target)
<< "'."); << "'.");
} }
}; };
} }

View File

@ -203,7 +203,7 @@ void TurnHandler::HandleAttackForTarget(ExecutingAttack* attack, const ArbUt::Bo
} catch (const ArbUt::Exception& e) { } catch (const ArbUt::Exception& e) {
throw e; throw e;
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Exception during status attack effect handling: " << e.what() << "."); THROW("Exception during status attack effect handling: " << e.what() << ".");
} }
} }
} else { } else {
@ -235,8 +235,7 @@ void TurnHandler::HandleAttackForTarget(ExecutingAttack* attack, const ArbUt::Bo
} catch (const ArbUt::Exception& e) { } catch (const ArbUt::Exception& e) {
throw e; throw e;
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Exception during offensive attack secondary effect handling: " << e.what() THROW("Exception during offensive attack secondary effect handling: " << e.what() << ".");
<< ".");
} }
} }
} }

View File

@ -22,7 +22,7 @@ namespace CreatureLib::Battling {
HistoryHolder() : _offset(0), _capacity(2048) { HistoryHolder() : _offset(0), _capacity(2048) {
auto ptr = malloc(_capacity); auto ptr = malloc(_capacity);
if (ptr == nullptr) { if (ptr == nullptr) {
THROW_CREATURE("Out of memory."); THROW("Out of memory.");
} }
_memory = static_cast<uint8_t*>(ptr); _memory = static_cast<uint8_t*>(ptr);
} }
@ -40,7 +40,7 @@ namespace CreatureLib::Battling {
_capacity += stepSize; _capacity += stepSize;
auto newPtr = realloc(_memory, _capacity); auto newPtr = realloc(_memory, _capacity);
if (newPtr == nullptr) { if (newPtr == nullptr) {
THROW_CREATURE("Out of memory."); THROW("Out of memory.");
} }
_memory = static_cast<uint8_t*>(newPtr); _memory = static_cast<uint8_t*>(newPtr);
} }

View File

@ -43,7 +43,7 @@ void Battle::CheckChoicesSetAndRun() {
} catch (const ArbUt::Exception& e) { } catch (const ArbUt::Exception& e) {
throw e; throw e;
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Exception during choices set validation: '" << e.what() << "'.") THROW("Exception during choices set validation: '" << e.what() << "'.")
} }
auto choices = std::vector<std::shared_ptr<BaseTurnChoice>>(_numberOfSides * _creaturesPerSide); auto choices = std::vector<std::shared_ptr<BaseTurnChoice>>(_numberOfSides * _creaturesPerSide);
@ -69,13 +69,13 @@ void Battle::CheckChoicesSetAndRun() {
side->ResetChoices(); side->ResetChoices();
} }
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Exception during turn initialization: '" << e.what() << "'.") THROW("Exception during turn initialization: '" << e.what() << "'.")
} }
_currentTurn++; _currentTurn++;
try { try {
TurnOrdering::OrderChoices(choices, _random.GetRNG()); TurnOrdering::OrderChoices(choices, _random.GetRNG());
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Exception during turn ordering: '" << e.what() << "'.") THROW("Exception during turn ordering: '" << e.what() << "'.")
} }
this->_currentTurnQueue = std::make_unique<ChoiceQueue>(choices); this->_currentTurnQueue = std::make_unique<ChoiceQueue>(choices);
TriggerEventListener<TurnStartEvent>(); TriggerEventListener<TurnStartEvent>();
@ -84,7 +84,7 @@ void Battle::CheckChoicesSetAndRun() {
} catch (const ArbUt::Exception& e) { } catch (const ArbUt::Exception& e) {
throw e; throw e;
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Error during running a turn: '" << e.what() << "'."); THROW("Error during running a turn: '" << e.what() << "'.");
} }
if (this->_currentTurnQueue->HasCompletedQueue) { if (this->_currentTurnQueue->HasCompletedQueue) {
this->_currentTurnQueue = nullptr; this->_currentTurnQueue = nullptr;
@ -160,7 +160,7 @@ void Battle::AddVolatileScript(const ArbUt::StringView& key) {
} }
script = _library->LoadScript(ScriptCategory::Battle, key); script = _library->LoadScript(ScriptCategory::Battle, key);
if (script == nullptr) { if (script == nullptr) {
THROW_CREATURE("Invalid volatile script requested for battle: '" << key.c_str() << "'."); THROW("Invalid volatile script requested for battle: '" << key.c_str() << "'.");
} }
return _volatile.Add(script.GetRaw()); return _volatile.Add(script.GetRaw());
} }

View File

@ -18,7 +18,7 @@ bool BattleSide::AllPossibleSlotsFilled() const {
} }
} }
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Exception during AllPossibleSlotsFilled check: '" << e.what() << "'."); THROW("Exception during AllPossibleSlotsFilled check: '" << e.what() << "'.");
} }
return true; return true;
} }
@ -42,9 +42,9 @@ void BattleSide::SetChoice(BaseTurnChoice* choice) {
} }
} }
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Error during setting choice: '" << e.what() << "'."); THROW("Error during setting choice: '" << e.what() << "'.");
} }
THROW_CREATURE("User not found"); THROW("User not found");
} }
void BattleSide::SetCreature(ArbUt::BorrowedPtr<Creature> creature, uint8_t index) { void BattleSide::SetCreature(ArbUt::BorrowedPtr<Creature> creature, uint8_t index) {

View File

@ -59,7 +59,7 @@ namespace CreatureLib::Battling {
if (_creatures[i] == c) if (_creatures[i] == c)
return i; return i;
} }
THROW_CREATURE("Unable to find creature on field."); THROW("Unable to find creature on field.");
} }
void MarkSlotAsUnfillable(const ArbUt::BorrowedPtr<Creature>& creature) noexcept { void MarkSlotAsUnfillable(const ArbUt::BorrowedPtr<Creature>& creature) noexcept {

View File

@ -23,7 +23,7 @@ CreateCreature CreateCreature::WithGender(Library::Gender gender) {
CreateCreature CreateCreature::WithAttack(const ArbUt::StringView& attackName, AttackLearnMethod learnMethod) { CreateCreature CreateCreature::WithAttack(const ArbUt::StringView& attackName, AttackLearnMethod learnMethod) {
if (_attacks.Count() >= _library->GetSettings()->GetMaximalAttacks()) { if (_attacks.Count() >= _library->GetSettings()->GetMaximalAttacks()) {
THROW_CREATURE("You have already set the maximum amount of allowed moves."); THROW("You have already set the maximum amount of allowed moves.");
} }
auto attackData = _library->GetAttackLibrary()->Get(attackName.GetHash()); auto attackData = _library->GetAttackLibrary()->Get(attackName.GetHash());
@ -52,7 +52,7 @@ Creature* CreateCreature::Create() {
ArbUt::BorrowedPtr<const Library::Item> heldItem; ArbUt::BorrowedPtr<const Library::Item> heldItem;
if (!this->_heldItem.IsEmpty()) { if (!this->_heldItem.IsEmpty()) {
if (!_library->GetItemLibrary()->TryGet(this->_heldItem.GetHash(), heldItem)) { if (!_library->GetItemLibrary()->TryGet(this->_heldItem.GetHash(), heldItem)) {
THROW_CREATURE("Invalid held item '" << this->_heldItem.c_str() << "'."); THROW("Invalid held item '" << this->_heldItem.c_str() << "'.");
} }
} }
auto experience = _library->GetGrowthRateLibrary()->CalculateExperience(species->GetGrowthRate(), _level); auto experience = _library->GetGrowthRateLibrary()->CalculateExperience(species->GetGrowthRate(), _level);

View File

@ -274,14 +274,14 @@ namespace CreatureLib::Battling {
void Creature::SetHeldItem(const ArbUt::BasicStringView& itemName) { void Creature::SetHeldItem(const ArbUt::BasicStringView& itemName) {
ArbUt::BorrowedPtr<const Library::Item> item; ArbUt::BorrowedPtr<const Library::Item> item;
if (!_library->GetItemLibrary()->TryGet(itemName.GetHash(), item)) { if (!_library->GetItemLibrary()->TryGet(itemName.GetHash(), item)) {
THROW_CREATURE("Item not found '" << itemName.c_str() << "'."); THROW("Item not found '" << itemName.c_str() << "'.");
} }
_heldItem = item; _heldItem = item;
} }
void Creature::SetHeldItem(uint32_t itemNameHash) { void Creature::SetHeldItem(uint32_t itemNameHash) {
ArbUt::BorrowedPtr<const Library::Item> item; ArbUt::BorrowedPtr<const Library::Item> item;
if (!_library->GetItemLibrary()->TryGet(itemNameHash, item)) { if (!_library->GetItemLibrary()->TryGet(itemNameHash, item)) {
THROW_CREATURE("Item not found."); THROW("Item not found.");
} }
_heldItem = item; _heldItem = item;
} }
@ -294,7 +294,7 @@ namespace CreatureLib::Battling {
} }
script = this->_library->LoadScript(ScriptCategory::Creature, name); script = this->_library->LoadScript(ScriptCategory::Creature, name);
if (script == nullptr) { if (script == nullptr) {
THROW_CREATURE("Invalid volatile script requested for creature: '" << name.c_str() << "'."); THROW("Invalid volatile script requested for creature: '" << name.c_str() << "'.");
} }
_volatile.Add(script.GetRaw()); _volatile.Add(script.GetRaw());
} }
@ -313,7 +313,7 @@ namespace CreatureLib::Battling {
if (_attacks.Count() < _library->GetStaticLib()->GetSettings()->GetMaximalAttacks()) { if (_attacks.Count() < _library->GetStaticLib()->GetSettings()->GetMaximalAttacks()) {
_attacks.Append(attack); _attacks.Append(attack);
} }
THROW_CREATURE("Can't add attack. The creature already has the maximum amount of attacks."); THROW("Can't add attack. The creature already has the maximum amount of attacks.");
} }
uint8_t Creature::GetAvailableAttackSlot() const noexcept { uint8_t Creature::GetAvailableAttackSlot() const noexcept {
for (uint8_t i = 0; i < (uint8_t)_attacks.Count(); i++) { for (uint8_t i = 0; i < (uint8_t)_attacks.Count(); i++) {
@ -331,8 +331,7 @@ namespace CreatureLib::Battling {
if (_attacks.Count() < _library->GetStaticLib()->GetSettings()->GetMaximalAttacks()) { if (_attacks.Count() < _library->GetStaticLib()->GetSettings()->GetMaximalAttacks()) {
_attacks.Append(attack); _attacks.Append(attack);
} }
THROW_CREATURE("Can't replace attack at index " << index << ". Number of attacks is " << _attacks.Count() THROW("Can't replace attack at index " << index << ". Number of attacks is " << _attacks.Count() << ".");
<< ".");
} }
_attacks.Set(index, attack); _attacks.Set(index, attack);
} }

View File

@ -65,7 +65,7 @@ namespace CreatureLib::Battling {
return _hits[i * _numberHits + hit]; return _hits[i * _numberHits + hit];
} }
} }
THROW_CREATURE("Invalid target requested."); THROW("Invalid target requested.");
} }
HitData* GetTargetIteratorBegin(ArbUt::BorrowedPtr<Creature> creature) { HitData* GetTargetIteratorBegin(ArbUt::BorrowedPtr<Creature> creature) {
@ -74,7 +74,7 @@ namespace CreatureLib::Battling {
return &_hits[i * _numberHits]; return &_hits[i * _numberHits];
} }
} }
THROW_CREATURE("Invalid target requested."); THROW("Invalid target requested.");
} }
bool IsCreatureTarget(ArbUt::BorrowedPtr<Creature> creature) noexcept { bool IsCreatureTarget(ArbUt::BorrowedPtr<Creature> creature) noexcept {

View File

@ -9,12 +9,12 @@
try { \ try { \
next->hookName(__VA_ARGS__); \ next->hookName(__VA_ARGS__); \
} catch (const std::exception& e) { \ } catch (const std::exception& e) { \
THROW_CREATURE("Exception running script hook '" #hookName "': " << e.what()) \ THROW("Exception running script hook '" #hookName "': " << e.what()) \
} \ } \
} \ } \
} catch (const ArbUt::Exception& e) { \ } catch (const ArbUt::Exception& e) { \
throw e; \ throw e; \
} catch (const std::exception& e) { \ } catch (const std::exception& e) { \
THROW_CREATURE("Exception setting up script hook '" #hookName "': " << e.what()) \ THROW("Exception setting up script hook '" #hookName "': " << e.what()) \
} \ } \
} }

View File

@ -27,7 +27,7 @@ namespace CreatureLib::Library {
inline bool HasAttacksForLevel(uint8_t level) const noexcept { return _learnedByLevel.Has(level); } inline bool HasAttacksForLevel(uint8_t level) const noexcept { return _learnedByLevel.Has(level); }
inline const ArbUt::List<ArbUt::BorrowedPtr<const AttackData>>& GetAttacksForLevel(uint8_t level) const { inline const ArbUt::List<ArbUt::BorrowedPtr<const AttackData>>& GetAttacksForLevel(uint8_t level) const {
if (!_learnedByLevel.Has(level)) { if (!_learnedByLevel.Has(level)) {
THROW_CREATURE("No attacks found for level " << (uint32_t)level << "."); THROW("No attacks found for level " << (uint32_t)level << ".");
} }
return _learnedByLevel.Get(level); return _learnedByLevel.Get(level);
} }

View File

@ -13,5 +13,5 @@ CreatureLib::Library::SpeciesVariant::GetTalentIndex(const ArbUt::StringView& ta
return TalentIndex(true, i); return TalentIndex(true, i);
} }
} }
THROW_CREATURE("The given talent is not a valid talent for this creature."); THROW("The given talent is not a valid talent for this creature.");
} }

View File

@ -25,7 +25,7 @@ namespace CreatureLib::Library {
inline EffectParameterType GetType() const noexcept { return _type; } inline EffectParameterType GetType() const noexcept { return _type; }
bool AsBool() const { bool AsBool() const {
if (_type != EffectParameterType::Bool) { if (_type != EffectParameterType::Bool) {
THROW_CREATURE("Cast effect parameter to bool, but was " << EffectParameterTypeHelper::ToString(_type)); THROW("Cast effect parameter to bool, but was " << EffectParameterTypeHelper::ToString(_type));
} }
return std::get<bool>(_value); return std::get<bool>(_value);
} }
@ -34,7 +34,7 @@ namespace CreatureLib::Library {
if (_type == EffectParameterType::Float) { if (_type == EffectParameterType::Float) {
return static_cast<int64_t>(std::get<float>(_value)); return static_cast<int64_t>(std::get<float>(_value));
} }
THROW_CREATURE("Cast effect parameter to int, but was " << EffectParameterTypeHelper::ToString(_type)); THROW("Cast effect parameter to int, but was " << EffectParameterTypeHelper::ToString(_type));
} }
return std::get<int64_t>(_value); return std::get<int64_t>(_value);
} }
@ -43,15 +43,13 @@ namespace CreatureLib::Library {
if (_type == EffectParameterType::Int) { if (_type == EffectParameterType::Int) {
return static_cast<float>(std::get<int64_t>(_value)); return static_cast<float>(std::get<int64_t>(_value));
} }
THROW_CREATURE("Cast effect parameter to float, but was " THROW("Cast effect parameter to float, but was " << EffectParameterTypeHelper::ToString(_type));
<< EffectParameterTypeHelper::ToString(_type));
} }
return std::get<float>(_value); return std::get<float>(_value);
} }
const ArbUt::StringView& AsString() const { const ArbUt::StringView& AsString() const {
if (_type != EffectParameterType::String) { if (_type != EffectParameterType::String) {
THROW_CREATURE("Cast effect parameter to string, but was " THROW("Cast effect parameter to string, but was " << EffectParameterTypeHelper::ToString(_type));
<< EffectParameterTypeHelper::ToString(_type));
} }
return std::get<ArbUt::StringView>(_value); return std::get<ArbUt::StringView>(_value);
} }

View File

@ -2,18 +2,6 @@
#define CREATURELIB_CREATUREEXCEPTION_HPP #define CREATURELIB_CREATUREEXCEPTION_HPP
#include <Arbutils/Exception.hpp> #include <Arbutils/Exception.hpp>
#include <cstring>
#include <sstream>
#include <stdexcept>
#include <string>
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#define THROW_CREATURE(message) \
std::stringstream ___ss; \
___ss << "[" << __FILENAME__ << ":" << __LINE__ << "] " << message; \
throw ArbUt::Exception(___ss.str());
#define NOT_REACHABLE THROW_CREATURE("Not reachable");
#define NOT_IMPLEMENTED THROW_CREATURE("Not implemented");
#define try_creature(data, msg) \ #define try_creature(data, msg) \
try { \ try { \
@ -21,6 +9,6 @@
} catch (const ArbUt::Exception& e) { \ } catch (const ArbUt::Exception& e) { \
throw e; \ throw e; \
} catch (const std::exception& e) { \ } catch (const std::exception& e) { \
THROW_CREATURE(msg << ": '" << e.what() << "'."); \ THROW(msg << ": '" << e.what() << "'."); \
} }
#endif // CREATURELIB_CREATUREEXCEPTION_HPP #endif // CREATURELIB_CREATUREEXCEPTION_HPP

View File

@ -5,7 +5,7 @@ uint8_t CreatureLib::Library::GrowthRateLibrary::CalculateLevel(const ArbUt::Bas
uint32_t experience) const { uint32_t experience) const {
auto find = _growthRates.find(growthRate); auto find = _growthRates.find(growthRate);
if (find == _growthRates.end()) { if (find == _growthRates.end()) {
THROW_CREATURE("Invalid growth rate was requested."); THROW("Invalid growth rate was requested.");
} }
return find->second->CalculateLevel(experience); return find->second->CalculateLevel(experience);
} }
@ -13,7 +13,7 @@ uint8_t CreatureLib::Library::GrowthRateLibrary::CalculateLevel(const ArbUt::Bas
uint8_t CreatureLib::Library::GrowthRateLibrary::CalculateLevel(uint32_t hash, uint32_t experience) const { uint8_t CreatureLib::Library::GrowthRateLibrary::CalculateLevel(uint32_t hash, uint32_t experience) const {
auto find = _growthRates.find(hash); auto find = _growthRates.find(hash);
if (find == _growthRates.end()) { if (find == _growthRates.end()) {
THROW_CREATURE("Invalid growth rate was requested."); THROW("Invalid growth rate was requested.");
} }
return find->second->CalculateLevel(experience); return find->second->CalculateLevel(experience);
} }
@ -22,7 +22,7 @@ uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(const ArbU
uint8_t level) const { uint8_t level) const {
auto find = _growthRates.find(growthRate); auto find = _growthRates.find(growthRate);
if (find == _growthRates.end()) { if (find == _growthRates.end()) {
THROW_CREATURE("Invalid growth rate was requested."); THROW("Invalid growth rate was requested.");
} }
return find->second->CalculateExperience(level); return find->second->CalculateExperience(level);
} }
@ -30,7 +30,7 @@ uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(const ArbU
uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(uint32_t hash, uint8_t level) const { uint32_t CreatureLib::Library::GrowthRateLibrary::CalculateExperience(uint32_t hash, uint8_t level) const {
auto find = _growthRates.find(hash); auto find = _growthRates.find(hash);
if (find == _growthRates.end()) { if (find == _growthRates.end()) {
THROW_CREATURE("Invalid growth rate was requested."); THROW("Invalid growth rate was requested.");
} }
return find->second->CalculateExperience(level); return find->second->CalculateExperience(level);
} }

View File

@ -21,5 +21,5 @@ const ArbUt::StringView& TypeLibrary::GetTypeName(uint8_t type) const {
return kv.first; return kv.first;
} }
} }
THROW_CREATURE("Name requested for unknown type: " << (uint32_t)type); THROW("Name requested for unknown type: " << (uint32_t)type);
} }

View File

@ -23,8 +23,8 @@ namespace CreatureLib::Library {
try { try {
return _effectiveness[attacking][defensive]; return _effectiveness[attacking][defensive];
} catch (const std::exception& e) { } catch (const std::exception& e) {
THROW_CREATURE("Unknown type indices were requested for effectiveness: " THROW("Unknown type indices were requested for effectiveness: " << (uint32_t)attacking << " and "
<< (uint32_t)attacking << " and " << (uint32_t)defensive); << (uint32_t)defensive);
} }
} }
[[nodiscard]] inline float GetEffectiveness(uint8_t attacking, [[nodiscard]] inline float GetEffectiveness(uint8_t attacking,

View File

@ -133,7 +133,7 @@ TEST_CASE("Script Aggregator properly iterates when empty.", "[Battling, Scripti
auto vec = ArbUt::List<ScriptWrapper>{}; auto vec = ArbUt::List<ScriptWrapper>{};
auto aggr = ScriptAggregator(vec); auto aggr = ScriptAggregator(vec);
while (aggr.HasNext()) { while (aggr.HasNext()) {
THROW_CREATURE("Aggregator returned a script, but should have been empty."); THROW("Aggregator returned a script, but should have been empty.");
} }
CHECK(ran == 0); CHECK(ran == 0);
} }

View File

@ -7,7 +7,7 @@
TEST_CASE("When throwing exception, what() is readable", "[Utilities][Exception]") { TEST_CASE("When throwing exception, what() is readable", "[Utilities][Exception]") {
bool hasCaught = false; bool hasCaught = false;
try { try {
THROW_CREATURE("foobar"); THROW("foobar");
} catch (const ArbUt::Exception& e) { } catch (const ArbUt::Exception& e) {
hasCaught = true; hasCaught = true;
INFO(e.what()); INFO(e.what());