diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-05-27 17:51:00 -0300 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-22 21:51:34 -0400 |
commit | b7764c3a796e53ac74009bc7d7cd153c64b6d743 (patch) | |
tree | 592a8be7cd43349cbabfc3d84693b443ddc0b5d8 /src/shader_recompiler/exception.h | |
parent | 83db7abae6550f89ba907789efdf818d93be1b5d (diff) |
shader: Handle host exceptions
Diffstat (limited to 'src/shader_recompiler/exception.h')
-rw-r--r-- | src/shader_recompiler/exception.h | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/shader_recompiler/exception.h b/src/shader_recompiler/exception.h index 6fe620801d..013d7b1bfe 100644 --- a/src/shader_recompiler/exception.h +++ b/src/shader_recompiler/exception.h @@ -5,38 +5,62 @@ #pragma once #include <stdexcept> +#include <string> +#include <string_view> #include <utility> #include <fmt/format.h> namespace Shader { -class LogicError : public std::logic_error { +class Exception : public std::exception { +public: + explicit Exception(std::string message_) noexcept : message{std::move(message_)} {} + + const char* what() const override { + return message.c_str(); + } + + void Prepend(std::string_view prepend) { + message.insert(0, prepend); + } + + void Append(std::string_view append) { + message += append; + } + +private: + std::string message; +}; + +class LogicError : public Exception { public: template <typename... Args> LogicError(const char* message, Args&&... args) - : std::logic_error{fmt::format(message, std::forward<Args>(args)...)} {} + : Exception{fmt::format(message, std::forward<Args>(args)...)} {} }; -class RuntimeError : public std::runtime_error { +class RuntimeError : public Exception { public: template <typename... Args> RuntimeError(const char* message, Args&&... args) - : std::runtime_error{fmt::format(message, std::forward<Args>(args)...)} {} + : Exception{fmt::format(message, std::forward<Args>(args)...)} {} }; -class NotImplementedException : public std::logic_error { +class NotImplementedException : public Exception { public: template <typename... Args> NotImplementedException(const char* message, Args&&... args) - : std::logic_error{fmt::format(message, std::forward<Args>(args)...)} {} + : Exception{fmt::format(message, std::forward<Args>(args)...)} { + Append(" is not implemented"); + } }; -class InvalidArgument : public std::invalid_argument { +class InvalidArgument : public Exception { public: template <typename... Args> InvalidArgument(const char* message, Args&&... args) - : std::invalid_argument{fmt::format(message, std::forward<Args>(args)...)} {} + : Exception{fmt::format(message, std::forward<Args>(args)...)} {} }; } // namespace Shader |