diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-05-27 22:51:00 +0200 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-23 03:51:34 +0200 |
commit | b7764c3a796e53ac74009bc7d7cd153c64b6d743 (patch) | |
tree | 592a8be7cd43349cbabfc3d84693b443ddc0b5d8 /src/shader_recompiler/exception.h | |
parent | glasm: Use integer lod for TXQ (diff) | |
download | yuzu-b7764c3a796e53ac74009bc7d7cd153c64b6d743.tar yuzu-b7764c3a796e53ac74009bc7d7cd153c64b6d743.tar.gz yuzu-b7764c3a796e53ac74009bc7d7cd153c64b6d743.tar.bz2 yuzu-b7764c3a796e53ac74009bc7d7cd153c64b6d743.tar.lz yuzu-b7764c3a796e53ac74009bc7d7cd153c64b6d743.tar.xz yuzu-b7764c3a796e53ac74009bc7d7cd153c64b6d743.tar.zst yuzu-b7764c3a796e53ac74009bc7d7cd153c64b6d743.zip |
Diffstat (limited to '')
-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 6fe620801..013d7b1bf 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 |