1#ifndef NEFORCE_CORE_EXCEPTION_ERROR_CATEGORY_HPP__
2#define NEFORCE_CORE_EXCEPTION_ERROR_CATEGORY_HPP__
5NEFORCE_BEGIN_NAMESPACE__
10class error_category :
public icomparable<error_category> {
12 error_category() noexcept = default;
13 virtual ~error_category() noexcept = default;
15 error_category(const error_category&) = delete;
16 error_category& operator=(const error_category&) = delete;
18 virtual const
char* name() const noexcept = 0;
19 virtual
string message(
int32_t ev) const = 0;
21 virtual error_condition default_error_condition(
int32_t ev) const noexcept;
23 virtual
bool equivalent(
int code, const error_condition& condition) const noexcept;
24 virtual
bool equivalent(const error_code& code,
int condition) const noexcept;
26 bool operator==(const error_category& rhs) const noexcept {
return this == &rhs; }
27 bool operator<(
const error_category& rhs)
const noexcept {
return less<const error_category*>()(
this, &rhs); }
31class NEFORCE_API generic_error_category final :
public error_category {
33 NEFORCE_NODISCARD
const char*
name() const noexcept
override {
return "generic"; }
35 NEFORCE_NODISCARD
string message(
int32_t ev)
const override;
37 NEFORCE_NODISCARD error_condition default_error_condition(
int32_t ev)
const noexcept override;
40NEFORCE_API
const error_category& generic_category() noexcept;
42inline error_code make_error_code(
errc e) noexcept;
43inline error_condition make_error_condition(
errc e) noexcept;
46class NEFORCE_API system_error_category final : public error_category {
48 NEFORCE_NODISCARD
const char*
name() const noexcept
override {
return "system"; }
50 NEFORCE_NODISCARD
string message(
int32_t ev)
const override;
52 NEFORCE_NODISCARD error_condition default_error_condition(
int32_t ev)
const noexcept override;
55NEFORCE_API
const error_category& system_category() noexcept;
57NEFORCE_END_NAMESPACE__
NEFORCE_ALWAYS_INLINE_INLINE bool name(char *buffer, size_t size)
获取当前线程名称