1#ifndef NEFORCE_CORE_EXCEPTION_ERROR_CONDITION_HPP__
2#define NEFORCE_CORE_EXCEPTION_ERROR_CONDITION_HPP__
3#include "NeForce/core/exception/error_category.hpp"
4NEFORCE_BEGIN_NAMESPACE__
6class error_condition :
icomparable<error_condition> {
9 const error_category* category_;
12 error_condition() noexcept :
14 category_(&generic_category()) {}
16 error_condition(
int val,
const error_category& cat) noexcept :
20 explicit error_condition(
errc e)
noexcept { *
this = make_error_condition(e); }
22 void assign(
int val,
const error_category& cat)
noexcept {
27 void clear() noexcept {
29 category_ = &generic_category();
32 NEFORCE_NODISCARD
int value() const noexcept {
return value_; }
33 NEFORCE_NODISCARD
const error_category& category() const noexcept {
return *category_; }
34 NEFORCE_NODISCARD
string message()
const {
return category_->message(value_); }
36 explicit operator bool() const noexcept {
return value_ != 0; }
38 NEFORCE_NODISCARD
bool operator==(
const error_condition& rhs)
const noexcept {
39 return category_ == rhs.category_ && value_ == rhs.value_;
41 NEFORCE_NODISCARD
bool operator<(
const error_condition& rhs)
const noexcept {
42 if (*category_ < *rhs.category_) {
45 if (*rhs.category_ < *category_) {
48 return value_ < rhs.value_;
53inline error_condition make_error_condition(
errc e)
noexcept {
return {
static_cast<int>(e), generic_category()}; }
55NEFORCE_END_NAMESPACE__