diff options
| author | Yuqian Yang <crupest@crupest.life> | 2025-11-04 22:17:27 +0800 |
|---|---|---|
| committer | Yuqian Yang <crupest@crupest.life> | 2025-11-04 22:17:27 +0800 |
| commit | ef6cff0f308d49326bbe0c3b557cb8ab6cca455b (patch) | |
| tree | 34914a6e76093d892ff10f8400d04c285eeab2c8 /src/base/Base.cpp | |
| parent | 8bea03e0811588e741050b598b8123865b333999 (diff) | |
| download | cru-ef6cff0f308d49326bbe0c3b557cb8ab6cca455b.tar.gz cru-ef6cff0f308d49326bbe0c3b557cb8ab6cca455b.tar.bz2 cru-ef6cff0f308d49326bbe0c3b557cb8ab6cca455b.zip | |
Move base Exception.h to Base.h.
Diffstat (limited to 'src/base/Base.cpp')
| -rw-r--r-- | src/base/Base.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/base/Base.cpp b/src/base/Base.cpp index c6d9ac07..49b0c462 100644 --- a/src/base/Base.cpp +++ b/src/base/Base.cpp @@ -1,8 +1,46 @@ #include "cru/base/Base.h" +#include <cerrno> #include <exception> +#include <format> +#include <string_view> namespace cru { void UnreachableCode() { std::terminate(); } void NotImplemented() { std::terminate(); } + +static constexpr auto NO_MESSAGE = "No message."; + +Exception::Exception(std::string message, std::shared_ptr<std::exception> inner) + : message_(std::move(message)), inner_(std::move(inner)) {} + +Exception::~Exception() {} + +const char* Exception::what() const noexcept { return message_.c_str(); } + +void Exception::AppendMessage(const std::string& additional_message) { + AppendMessage(std::string_view(additional_message)); +} + +void Exception::AppendMessage(std::string_view additional_message) { + message_ += ' '; + message_ += additional_message; +} + +void Exception::AppendMessage( + std::optional<std::string_view> additional_message) { + if (additional_message) AppendMessage(*additional_message); +} + +ErrnoException::ErrnoException() : ErrnoException(NO_MESSAGE) {} + +ErrnoException::ErrnoException(int errno_code) + : ErrnoException(NO_MESSAGE, errno_code) {} + +ErrnoException::ErrnoException(std::string_view message) + : ErrnoException(message, errno) {} + +ErrnoException::ErrnoException(std::string_view message, int errno_code) + : Exception(std::format("{} Errno is {}.", message, errno_code)), + errno_code_(errno_code) {} } // namespace cru |
