acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
e_status.h
1//
2// estatus.h
3// acme
4//
5// Created by Camilo Sasuke Thomas Borregaard Soerensen on 29/02/20.
6//
7#pragma once
8
9
10//#include "acme/parallelization/synchronization_result.h"
11
12//
13//inline bool succeeded(::i64 i)
14//{
15//
16// return i >= 0;
17//
18//}
19
20
21//inline bool failed(::i64 i)
22//{
23//
24// return !succeeded(i);
25//
26//}
27//
28
29class e_status
30{
31public:
32
33
34 using ENUM_TYPE_TAG = enum_type_t;
35
36
37 ::enum_status m_eenum;
38
39
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) {}
46
47
48 constexpr operator ::enum_status() const { return m_eenum; }
49
50 constexpr ::enum_status as_estatus() const { return m_eenum; }
51
52
53 constexpr ::i64 as_i64() const { return (::i64) m_eenum; }
54 constexpr ::u64 as_u64() const { return (::u64) m_eenum; }
55
56
57 constexpr bool is_set() const { return this->succeeded(); }
58
59 //operator ::i32() const { return this->succeeded(); }
60
61 //bool operator !() const { return failed();}
62
63 constexpr explicit operator bool() const noexcept { return this->ok(); }
64
65 constexpr bool ok() const { return succeeded(); }
66
67
68 constexpr bool succeeded() const { return (::i64)m_eenum >= 0; }
69
70 constexpr bool failed() const { return !succeeded(); }
71
72 //bool signaled() const { return ::signaled(*this); }
73
74 //::i32 signaled_index() const { return ::signaled_index(*this); }
75
76 //bool abandoned() const { return ::abandoned(*this); }
77
78 //::i32 abandoned_index() const { return ::abandoned_index(*this); }
79
80 //bool wait_timeout() const { return ::wait_timeout(*this); }
81
82 constexpr bool succeeded(::i64 iRange) const
83 {
84 return (::i64)m_eenum >= (::i64)SUCCESS_STATUS(iRange).m_eenum
85 && (::i64)m_eenum < ((::i64)SUCCESS_STATUS(iRange).m_eenum + (::i64)STATUS_RANGE);
86
87 }
88
89 constexpr bool failed(::i64 iRange) const
90 {
91
92 return (::i64)m_eenum >= (::i64)FAILURE_STATUS(iRange).m_eenum
93 && (::i64)m_eenum < ((::i64)FAILURE_STATUS(iRange).m_eenum + (::i64)STATUS_RANGE);
94
95 }
96
97
98 constexpr ::i32 error_status() const { return succeeded() ? 0 : (::i32)(::i64)m_eenum; }
99
100 //::i32 exit_code() const { return succeeded() ? 0 : (::i32)_status_exit_code(m_eenum); }
101
102 constexpr e_status& operator =(const e_status & estatus) { m_eenum = estatus.as_estatus(); return *this; }
103
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; }
110
111
112
113 constexpr bool is_exit_status() const
114 {
115
116 return m_eenum > error_exit_start && m_eenum < error_exit_end;
117
118 }
119
120
121 ::i32 exit_code() const
122 {
123
124 if (this->succeeded())
125 {
126
127 return 0;
128
129 }
130
131#ifdef WINDOWS
132
133 return (::i32)-(::i64)m_eenum;
134
135#else
136
137 if (this->m_eenum >= -125)
138 {
139
140 return (::i32)-(::i64)(this->m_eenum);
141
142 }
143 else
144 {
145
146 return 125;
147
148 }
149
150#endif
151
152 }
153
154
155
158 constexpr ::i32 signaled_index() const
159 {
160
161 return (m_eenum >= signaled_base && m_eenum < signaled_end) ? (::i32)((::i64)m_eenum - (::i64)signaled_base) : -1;
162
163 }
164
168 constexpr bool signaled()const
169 {
170
171 return signaled_index() >= 0;
172
173 }
174
177 constexpr ::i32 abandoned_index()const
178 {
179
180 return (m_eenum >= abandoned_base && m_eenum < abandoned_end) ? (::i32)((::i64)m_eenum - (::i64)abandoned_base) : -1;
181
182 }
183
186 constexpr bool abandoned()const
187 {
188
189 return abandoned_index() >= 0;
190
191 }
192
195 constexpr bool wait_timeout() const
196 {
197
198 return m_eenum == error_wait_timeout;
199
200 }
201
202
203 inline void defer_failed(const ::e_status & estatusError)
204 {
205
206 if (!failed())
207 {
208
209 m_eenum = estatusError.m_eenum;
210
211 }
212
213 }
214
215
216 inline void defer_failed(::i32 iRange)
217 {
218
219 defer_failed(FAILURE_STATUS(iRange));
220
221 }
222
223 constexpr bool io_succeeded() const { return succeeded(STATUS_RANGE_IO); }
224
225 constexpr bool io_failed() const { return failed(STATUS_RANGE_IO); }
226
227
228 inline void defer_authentication_failure() { defer_failed(STATUS_RANGE_AUTHENTICATION); }
229
230 constexpr ::e_status worst(const ::e_status & e) const;
231
232};
233
234
235//inline bool succeeded(const ::e_status& estatus)
236//{
237//
238// return succeeded((::i64)estatus.m_eenum);
239//
240//}
241
242
243//inline bool failed(const ::e_status & estatus)
244//{
245//
246// return !succeeded(estatus);
247//
248//}
249
250//inline bool succeeded(const ::e_status & estatus, ::i32 iRange)
251//{
252//
253// return (::i64)estatus.m_eenum >= (::i64)SUCCESS_STATUS(iRange).m_eenum
254// && (::i64)estatus.m_eenum < ((::i64)SUCCESS_STATUS(iRange).m_eenum + (::i64)STATUS_RANGE);
255//
256//}
257
258
259//inline bool failed(const ::e_status & estatus, ::i64 iRange)
260//{
261//
262// return (::i64)estatus.m_eenum >= (::i64)FAILURE_STATUS(iRange).m_eenum
263// && (::i64)estatus.m_eenum < ((::i64)FAILURE_STATUS(iRange).m_eenum + (::i64)STATUS_RANGE);
264//
265//}
266
267
268
269
270//
271//
272//inline void defer_authentication_failure(::e_status& estatus) { ::defer_failed(estatus, STATUS_RANGE_AUTHENTICATION); }
273//
274//
275//CLASS_DECL_ACME::e_status worst(const ::e_status & e1, const ::e_status & e2);
276//
277
278
279//constexpr bool succeeded(const ::e_status & estatus) { return estatus.succeeded(); }
280//constexpr bool failed(const ::e_status & estatus) { return estatus.failed(); }
281
282
283
284template < > struct raw_enum_of_struct<::e_status > { using type = ::enum_status; };
Definition e_status.h:30
constexpr bool abandoned() const
is synchronization abandoned?
Definition e_status.h:186
constexpr ::i32 signaled_index() const
synchronization signaled index
Definition e_status.h:158
constexpr ::i32 abandoned_index() const
synchronization abandoned index
Definition e_status.h:177
constexpr bool signaled() const
is synchronization signaled?
Definition e_status.h:168
constexpr bool wait_timeout() const
is synchronization timed out?
Definition e_status.h:195
Definition _structures.h:23
Definition _forward_declaration.h:17