acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
status.h
1// created by Camilo 2021-02-02 06:50 BRT <3CamiloSasukeThomasBorregaardSoerensen
2#pragma once
3#ifdef __clang__
4#pragma clang diagnostic push
5#pragma ide diagnostic ignored "google-explicit-constructor"
6#endif
7
8
9#include "acme/constant/status.h"
10
11
12template < typename TYPE >
13class status :
14 public TYPE
15{
16public:
17
18
19 ::e_status m_estatus;
20
21
22 status() { m_estatus = error_not_initialized; }
23
24
25 status(const TYPE & t, const ::e_status & estatus = ::success) :
26 TYPE(t),
27 m_estatus(estatus)
28 {
29
30 }
31
32
33 status(const TYPE&& t, const ::e_status & estatus = ::success) :
34 TYPE(::transfer(t)),
35 m_estatus(estatus)
36 {
37
38 }
39
40
41 status(const ::e_status & estatus) :
42 m_estatus(estatus == error_not_initialized ? error_failed : estatus.m_eenum)
43 {
44
45 }
46
47
48 status(::enum_status estatus) :
49 m_estatus(estatus == error_not_initialized ? error_failed : estatus)
50 {
51
52 }
53
54
55 status(nullptr_t) :
56 m_estatus(error_null_result)
57 {
58
59 }
60
61
62 bool nok() const { return !is_ok(); }
63
64 bool ok() const { return is_ok() != false; }
65
66 [[nodiscard]] ::enum_status estatus() const { return m_estatus.m_eenum; }
67
68 [[nodiscard]] bool is_ok() const { return m_estatus.succeeded(); }
69
70
71 status & operator = (enum_status estatus)
72 {
73
74 m_estatus = estatus;
75
76 return *this;
77
78 }
79
80
81 status & operator = (const e_status & estatus)
82 {
83
84 m_estatus = estatus;
85
86 return *this;
87
88 }
89
90
91 status & operator = (const TYPE & payload)
92 {
93
94 (*((TYPE*)(this))) = payload;
95
96 m_estatus = ::success;
97
98 return *this;
99
100 }
101
102
103};
104
105
106template < typename T >
108 virtual public ::particle
109{
110public:
111
112 T m_payload;
113
114};
115
116
117template < typename TYPE >
118using status_pointer = ::pointer < ::particle_of < TYPE > >;
119
120//template < typename OBJECT >
121//class transport :
122// public status < ::pointer<OBJECT> >
123//{
124//public:
125//
126//
127// using status < ::pointer<OBJECT >>:status;
128// using status < ::pointer<OBJECT >>:operator =;
129//
130//
131//};
132
133
134
135//template < typename HOLDING >
136//class holding_status
137//{
138//public:
139//
140//
141// HOLDING m_holding;
142// void m_estatus;
143//
144//
145// holding_status() { m_estatus = error_not_initialized; }
146//
147//
148// holding_status(const HOLDING & _, const ::e_status & estatus = ::success) :
149// m_holding(_),
150// m_estatus(estatus)
151// {
152//
153// }
154//
155// holding_status(const HOLDING&& _, const ::e_status & estatus = ::success) :
156// m_holding(::transfer(_)),
157// m_estatus(estatus)
158// {
159//
160// }
161//
162// holding_status(const ::e_status & estatus)
163// {
164//
165// if (estatus == error_not_initialized)
166// {
167//
168// m_estatus = ::error_failed;
169//
170// }
171// else
172// {
173//
174// m_estatus = estatus;
175//
176// }
177//
178// }
179//
180//
181// holding_status(::enum_status estatus)
182// {
183//
184// if (estatus == error_not_initialized)
185// {
186//
187// estatus = ::error_failed;
188//
189// }
190//
191// m_estatus = estatus;
192//
193// }
194//
195//
196// holding_status(nullptr_t)
197// {
198//
199// m_estatus = error_null_result;
200//
201// }
202//
203//
204// bool operator !() const { return !is_ok(); }
205//
206// operator bool() const { return is_ok(); }
207//
208// operator ::i32() const { return is_ok() != false; }
209//
210// ::e_status estatus() const { return m_estatus; }
211//
212// operator HOLDING() const { return m_holding; }
213//
214// HOLDING holding() const { return m_holding; }
215//
216// bool is_ok() const { return ::succeeded(m_estatus); }
217//
218//
219// holding_status & operator = (const HOLDING & holding)
220// {
221//
222// m_estatus = ::success;
223//
224// m_holding = (holding);
225//
226// return *this;
227//
228// }
229//
230//
231// holding_status & operator = (HOLDING && holding)
232// {
233//
234// m_estatus = ::success;
235//
236// m_holding = ::transfer(holding);
237//
238// return *this;
239//
240// }
241//
242//
243// holding_status & operator = (enum_status estatus)
244// {
245//
246// m_estatus = estatus;
247//
248// return *this;
249//
250// }
251//
252//
253// holding_status & operator = (const e_status & estatus)
254// {
255//
256// m_estatus = estatus;
257//
258// return *this;
259//
260// }
261//
262//
263//};
264//
265
266#ifdef __clang__
267#pragma clang diagnostic pop
268#endif
269
270
271
Definition e_status.h:30
Definition status.h:109
Definition payload.h:54