diff --git a/src/include/gridfire/exceptions/error_reaction.h b/src/include/gridfire/exceptions/error_reaction.h index a24d93f1..91c6d523 100644 --- a/src/include/gridfire/exceptions/error_reaction.h +++ b/src/include/gridfire/exceptions/error_reaction.h @@ -10,9 +10,12 @@ namespace gridfire::exceptions { std::string m_message; std::string m_reactionID; public: - ReactionError(const std::string& msg, const std::string& reactionId): m_message(msg), m_reactionID(reactionId) {} + ReactionError(const std::string& msg, const std::string& reactionId) { + m_reactionID = reactionId; + m_message = std::format("Reaction {}: {}", reactionId, msg); + } const char* what() const noexcept override { - return std::format("Reaction {}: {}", m_reactionID, m_message).c_str(); + return m_message.c_str(); } }; diff --git a/src/include/gridfire/exceptions/exceptions.h b/src/include/gridfire/exceptions/exceptions.h index 8aad7c52..e57bd8f7 100644 --- a/src/include/gridfire/exceptions/exceptions.h +++ b/src/include/gridfire/exceptions/exceptions.h @@ -1,4 +1,9 @@ #pragma once #include "gridfire/exceptions/error_engine.h" +#include "gridfire/exceptions/error_utils.h" +#include "gridfire/exceptions/general.h" +#include "gridfire/exceptions/error_policy.h" +#include "gridfire/exceptions/error_reaction.h" +#include "gridfire/exceptions/error_solver.h" #include "gridfire/exceptions/error_utils.h" \ No newline at end of file diff --git a/src/include/gridfire/exceptions/general.h b/src/include/gridfire/exceptions/general.h index e69de29b..8e39f169 100644 --- a/src/include/gridfire/exceptions/general.h +++ b/src/include/gridfire/exceptions/general.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include + +namespace gridfire::exceptions { + class DebugException final : public std::runtime_error { + public: + #ifdef NDEBUG + #if defined(__clang__) + __attribute__((unavailable("DebugExceptions may not be used in release builds"))) + + #elif defined(__GNUC__) + __attribute__((error("DebugExceptions may not be used in release builds"))) + #endif + #endif + + explicit DebugException(const std::string_view message, + const std::source_location loc = std::source_location::current()) + : std::runtime_error(format_error(message, loc)) + { + } + + private: + static std::string format_error(std::string_view message, const std::source_location loc) { + return std::format("[DEBUG HALT] {}:{}: {}", + loc.file_name(), + loc.line(), + message); + } + }; +} \ No newline at end of file