diff --git a/include/Nazara/Core/Error.hpp b/include/Nazara/Core/Error.hpp index f9f82ca1d..bdffc1700 100644 --- a/include/Nazara/Core/Error.hpp +++ b/include/Nazara/Core/Error.hpp @@ -31,13 +31,15 @@ namespace Nz Error() = delete; ~Error() = delete; + static ErrorModeFlags ApplyFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags); + static constexpr std::string_view GetCurrentFileRelativeToEngine(std::string_view file); static ErrorModeFlags GetFlags(); static std::string GetLastError(std::string_view* file = nullptr, unsigned int* line = nullptr, std::string_view* function = nullptr); static unsigned int GetLastSystemErrorCode(); static std::string GetLastSystemError(unsigned int code = GetLastSystemErrorCode()); - static void SetFlags(ErrorModeFlags flags); + static ErrorModeFlags SetFlags(ErrorModeFlags flags); template static void Trigger(ErrorType type, std::string_view error, Args&&... args); template static void Trigger(ErrorType type, unsigned int line, std::string_view file, std::string_view function, std::string_view error, Args&&... args); diff --git a/include/Nazara/Core/ErrorFlags.hpp b/include/Nazara/Core/ErrorFlags.hpp index 156567424..207dfd959 100644 --- a/include/Nazara/Core/ErrorFlags.hpp +++ b/include/Nazara/Core/ErrorFlags.hpp @@ -8,22 +8,21 @@ #define NAZARA_CORE_ERRORFLAGS_HPP #include -#include -#include +#include namespace Nz { - class NAZARA_CORE_API ErrorFlags + class ErrorFlags { public: - ErrorFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags = {}); + inline ErrorFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags = {}); ErrorFlags(const ErrorFlags&) = delete; ErrorFlags(ErrorFlags&&) = delete; - ~ErrorFlags(); + inline ~ErrorFlags(); - ErrorModeFlags GetPreviousFlags() const; + inline ErrorModeFlags GetPreviousFlags() const; - void SetFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags = {}); + inline void SetFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags = {}); ErrorFlags& operator=(const ErrorFlags&) = delete; ErrorFlags& operator=(ErrorFlags&&) = delete; @@ -33,4 +32,6 @@ namespace Nz }; } +#include + #endif // NAZARA_CORE_ERRORFLAGS_HPP diff --git a/src/Nazara/Core/ErrorFlags.cpp b/include/Nazara/Core/ErrorFlags.inl similarity index 73% rename from src/Nazara/Core/ErrorFlags.cpp rename to include/Nazara/Core/ErrorFlags.inl index 34df038ae..afaf339b6 100644 --- a/src/Nazara/Core/ErrorFlags.cpp +++ b/include/Nazara/Core/ErrorFlags.inl @@ -2,8 +2,6 @@ // This file is part of the "Nazara Engine - Core module" // For conditions of distribution and use, see copyright notice in Config.hpp -#include -#include #include namespace Nz @@ -21,17 +19,15 @@ namespace Nz * \param replace Replace the entirely the old flag if true, else do a "OR" */ - ErrorFlags::ErrorFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags) : - m_previousFlags(Error::GetFlags()) + inline ErrorFlags::ErrorFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags) : + m_previousFlags(Error::ApplyFlags(orFlags, andFlags)) { - SetFlags(orFlags, andFlags); } /*! * \brief Destructs the object and sets the old flag */ - - ErrorFlags::~ErrorFlags() + inline ErrorFlags::~ErrorFlags() { Error::SetFlags(m_previousFlags); } @@ -40,7 +36,7 @@ namespace Nz * \brief Gets the previous flag * \return Previous flag */ - ErrorModeFlags ErrorFlags::GetPreviousFlags() const + inline ErrorModeFlags ErrorFlags::GetPreviousFlags() const { return m_previousFlags; } @@ -51,7 +47,7 @@ namespace Nz * \param flags Flags for the error * \param replace Replace the entirely the old flag if true, else do a "OR" */ - void ErrorFlags::SetFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags) + inline void ErrorFlags::SetFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags) { ErrorModeFlags newFlags = m_previousFlags; newFlags |= orFlags; @@ -60,3 +56,5 @@ namespace Nz Error::SetFlags(newFlags); } } + +#include diff --git a/src/Nazara/Core/Error.cpp b/src/Nazara/Core/Error.cpp index 69f11105c..10c1df731 100644 --- a/src/Nazara/Core/Error.cpp +++ b/src/Nazara/Core/Error.cpp @@ -42,12 +42,24 @@ namespace Nz * \class Nz::Error * \brief Core class that represents an error */ + ErrorModeFlags Error::ApplyFlags(ErrorModeFlags orFlags, ErrorModeFlags andFlags) + { + NAZARA_USE_ANONYMOUS_NAMESPACE + + ErrorModeFlags& flags = s_flags; + + ErrorModeFlags previousFlags = flags; + + flags |= orFlags; + flags &= andFlags; + + return previousFlags; + } /*! * \brief Gets the flags of the error * \return Flag */ - ErrorModeFlags Error::GetFlags() { NAZARA_USE_ANONYMOUS_NAMESPACE @@ -63,7 +75,6 @@ namespace Nz * \param line Optional argument to set last error line * \param function Optional argument to set last error function */ - std::string Error::GetLastError(std::string_view* file, unsigned int* line, std::string_view* function) { NAZARA_USE_ANONYMOUS_NAMESPACE @@ -84,7 +95,6 @@ namespace Nz * \brief Gets the last system error code * \return "errno" */ - unsigned int Error::GetLastSystemErrorCode() { #if defined(NAZARA_PLATFORM_WINDOWS) @@ -137,18 +147,23 @@ namespace Nz * \param flags Flags for the error */ - void Error::SetFlags(ErrorModeFlags flags) + ErrorModeFlags Error::SetFlags(ErrorModeFlags flags) { NAZARA_USE_ANONYMOUS_NAMESPACE + ErrorModeFlags previousFlags = s_flags; s_flags = flags; + + return previousFlags; } void Error::TriggerInternal(ErrorType type, std::string error, unsigned int line, std::string_view file, std::string_view function) { NAZARA_USE_ANONYMOUS_NAMESPACE - if (type == ErrorType::AssertFailed || (s_flags & ErrorMode::Silent) == 0) + ErrorModeFlags& flags = s_flags; + + if (type == ErrorType::AssertFailed || (flags & ErrorMode::Silent) == 0) { if (line == 0 && file.empty()) Log::Write("{}{}", s_errorTypes[type], error); @@ -169,7 +184,7 @@ namespace Nz std::abort(); #endif - if (type == ErrorType::AssertFailed || (type != ErrorType::Warning && s_flags.Test(ErrorMode::ThrowException))) + if (type == ErrorType::AssertFailed || (type != ErrorType::Warning && flags.Test(ErrorMode::ThrowException))) throw std::runtime_error(s_lastError); } }