diff options
Diffstat (limited to 'boot/efi/status.h')
| -rw-r--r-- | boot/efi/status.h | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/boot/efi/status.h b/boot/efi/status.h new file mode 100644 index 0000000..bcb6b96 --- /dev/null +++ b/boot/efi/status.h @@ -0,0 +1,110 @@ +#pragma once + +#include <cstddef> +#include <limits> +#include <type_traits> + +namespace Efi +{ + class Status + { + using size_t = std::size_t; + using ssize_t = std::make_signed_t<size_t>; + + size_t m_Value; + + constexpr Status(size_t value) + : m_Value(value) + { + } + + constexpr bool IsError() const + { + return static_cast<ssize_t>(m_Value) < 0; + } + + constexpr bool IsWarning() const + { + return m_Value > 0; + } + + constexpr bool IsSuccess() const + { + return m_Value == 0; + } + + constexpr static Status ErrorStatus(size_t code) + { + auto errorBit = std::numeric_limits<ssize_t>::min(); + return Status(static_cast<size_t>(errorBit) | code); + } + + constexpr static Status WarningStatus(size_t code) + { + return Status(code); + } + + public: + + operator size_t() const + { + return m_Value; + } + + static const Status Success; + + class Warning + { + public: + + static const Status UnknownGlyph; + static const Status DeleteFailure; + static const Status WriteFailure; + static const Status BufferTooSmall; + static const Status StaleData; + static const Status FileSystem; + static const Status ResetRequired; + }; + + class Error + { + public: + + static const Status LoadError; + static const Status InvalidParameter; + static const Status Unsupported; + static const Status BadBufferSize; + static const Status BufferTooSmall; + static const Status NotReady; + static const Status DeviceError; + static const Status WriteProtected; + static const Status OutOfResources; + static const Status VolumeCorrupted; + static const Status VolumeFull; + static const Status NoMedia; + static const Status MediaChanged; + static const Status NotFound; + static const Status AccessDenied; + static const Status NoResponse; + static const Status NoMapping; + static const Status Timeout; + static const Status NotStarted; + static const Status AlreadyStarted; + static const Status Aborted; + static const Status IcmpError; + static const Status TftpError; + static const Status ProtocolError; + static const Status IncompatibleVersion; + static const Status SecurityViolation; + static const Status CrcError; + static const Status EndOfMedia; + static const Status EndOfFile; + static const Status InvalidLanguage; + static const Status CompromisedData; + static const Status IpAddressConflict; + static const Status HttpError; + }; + + }; +} + |
