37 ::enum_status m_eenum;
40 constexpr e_status() { m_eenum = ::undefined; }
41 constexpr e_status(::enum_status estatus): m_eenum(estatus){}
42 constexpr e_status(const ::e_status & estatus): m_eenum(estatus.m_eenum){}
43 constexpr explicit e_status(
bool b) : m_eenum(b ? success : error_failed){}
44 constexpr explicit e_status(::i32 i) : m_eenum((::enum_status) i) {}
45 constexpr explicit e_status(::i64 i) : m_eenum((::enum_status) i) {}
48 constexpr operator ::enum_status()
const {
return m_eenum; }
50 constexpr ::enum_status as_estatus()
const {
return m_eenum; }
53 constexpr ::i64 as_i64()
const {
return (::i64) m_eenum; }
54 constexpr ::u64 as_u64()
const {
return (::u64) m_eenum; }
57 constexpr bool is_set()
const {
return this->succeeded(); }
63 constexpr explicit operator bool()
const noexcept {
return this->ok(); }
65 constexpr bool ok()
const {
return succeeded(); }
68 constexpr bool succeeded()
const {
return (::i64)m_eenum >= 0; }
70 constexpr bool failed()
const {
return !succeeded(); }
82 constexpr bool succeeded(::i64 iRange)
const
84 return (::i64)m_eenum >= (::i64)SUCCESS_STATUS(iRange).m_eenum
85 && (::i64)m_eenum < ((::i64)SUCCESS_STATUS(iRange).m_eenum + (::i64)STATUS_RANGE);
89 constexpr bool failed(::i64 iRange)
const
92 return (::i64)m_eenum >= (::i64)FAILURE_STATUS(iRange).m_eenum
93 && (::i64)m_eenum < ((::i64)FAILURE_STATUS(iRange).m_eenum + (::i64)STATUS_RANGE);
98 constexpr ::i32 error_status()
const {
return succeeded() ? 0 : (::i32)(::i64)m_eenum; }
102 constexpr e_status& operator =(
const e_status & estatus) { m_eenum = estatus.as_estatus();
return *
this; }
104 constexpr bool operator ==(enum_status estatus)
const {
return m_eenum == estatus; }
105 constexpr bool operator ==(
const e_status& estatus)
const {
return m_eenum == estatus; }
106 constexpr bool operator <(
const e_status& estatus)
const {
return m_eenum < estatus.as_estatus(); }
107 constexpr bool operator <(
const enum_status& estatus)
const {
return m_eenum < estatus; }
108 constexpr bool operator >(
const e_status& estatus)
const {
return m_eenum > estatus.as_estatus(); }
109 constexpr bool operator >(
const enum_status& estatus)
const {
return m_eenum > estatus; }
113 constexpr bool is_exit_status()
const
116 return m_eenum > error_exit_start && m_eenum < error_exit_end;
121 ::i32 exit_code()
const
124 if (this->succeeded())
133 return (::i32)-(::i64)m_eenum;
137 if (this->m_eenum >= -125)
140 return (::i32)-(::i64)(this->m_eenum);
161 return (m_eenum >= signaled_base && m_eenum < signaled_end) ? (::i32)((::i64)m_eenum - (::i64)signaled_base) : -1;
180 return (m_eenum >= abandoned_base && m_eenum < abandoned_end) ? (::i32)((::i64)m_eenum - (::i64)abandoned_base) : -1;
198 return m_eenum == error_wait_timeout;
203 inline void defer_failed(const ::e_status & estatusError)
209 m_eenum = estatusError.m_eenum;
216 inline void defer_failed(::i32 iRange)
219 defer_failed(FAILURE_STATUS(iRange));
223 constexpr bool io_succeeded()
const {
return succeeded(STATUS_RANGE_IO); }
225 constexpr bool io_failed()
const {
return failed(STATUS_RANGE_IO); }
228 inline void defer_authentication_failure() { defer_failed(STATUS_RANGE_AUTHENTICATION); }
230 constexpr ::e_status worst(const ::e_status & e)
const;