15#ifndef A_UTIL_UTIL_RESULT_DETAIL_RESULT_TYPE_IMPL_HEADER_INCLUDED
16#define A_UTIL_UTIL_RESULT_DETAIL_RESULT_TYPE_IMPL_HEADER_INCLUDED
35 : _result_handle(DescriptionType::makeResultDescription(static_cast<std::int32_t>(!val) * -1))
43template <
typename ErrorType>
45 : _result_handle(DescriptionType::makeResultDescription(error))
50template <
typename ErrorType>
52 const char* error_description,
68 : _result_handle(DescriptionType::makeResultDescription(error_code))
73 const char* error_description,
79 *
this = createFrom(error_code, error_description, line, file, function);
83 const char* error_description,
99 static_assert(
sizeof(*this) == 8,
"sizeof(*this) != 8");
100 static_assert(std::is_standard_layout<Result>::value,
"Result must be standard layout type");
131 if (SUCCESS != other) {
138 if (_result_handle.getDetailedDescription()) {
139 return _result_handle.getDetailedDescription()->getErrorCode();
141 return _result_handle.getErrorCode();
146 if (_result_handle.getDetailedDescription()) {
148 return _result_handle.getDetailedDescription()->getErrorCodeLabel();
151 return *
this ?
"SUCCESS" :
"(unknown)";
156 if (0 != _result_handle.getErrorCode()) {
161 if (_result_handle.getDetailedDescription()) {
162 return _result_handle.getDetailedDescription()->getErrorDescription();
165 return "No error occurred";
170 if (_result_handle.getDetailedDescription()) {
171 return _result_handle.getDetailedDescription()->getLine();
179 if (_result_handle.getDetailedDescription()) {
180 return _result_handle.getDetailedDescription()->getFileName();
188 if (_result_handle.getDetailedDescription()) {
189 return _result_handle.getDetailedDescription()->getFunctionName();
195inline Result::operator bool() const noexcept
201 const char* error_description,
204 const char* function,
206 : _result_handle(DescriptionType::makeResultDescription<
detail::ErrorDescriptionType>(
207 error_code, error_description, line, file, function, label))
211inline Result Result::createFrom(std::int32_t error_code,
212 const char* error_description,
215 const char* function)
222 0 == error_code ?
"SUCCESS" :
"(unknown)");
227 return lhs._result_handle == rhs._result_handle;
232 return !(lhs == rhs);
244 return !(
result == error_code);
250 return result == error_code;
256 return result != error_code;
263 swap(lhs._result_handle, rhs._result_handle);
269 return 0 ==
result.getErrorCode();
277inline void swap<a_util::result::Result>(a_util::result::Result& lhs, a_util::result::Result& rhs)
Definition result_type_decl.h:34
const char * getFile() const
Definition result_type_impl.h:177
const char * getErrorLabel() const
Definition result_type_impl.h:144
std::int32_t getLine() const
Definition result_type_impl.h:168
Result()
Definition result_type_impl.h:30
const char * getFunction() const
Definition result_type_impl.h:186
std::int32_t getErrorCode() const
Definition result_type_impl.h:136
const char * getDescription() const
Definition result_type_impl.h:154
friend void swap(Result &lhs, Result &rhs)
Definition result_type_impl.h:259
Result & operator=(const ResultInfo< void > &)
Definition result_type_impl.h:123
~Result()
Definition result_type_impl.h:97
void maybe_unused(T &&)
Definition types.h:51
Serves as namespace for result implementation details.
Definition result.h:22
Serves as component for functionality handling error and return types.
Definition result.h:20
void swap(Result &lhs, Result &rhs)
Definition result_type_impl.h:259
bool operator!=(const ResultInfo< ResultTypeLHS > &lhs, const ResultInfo< ResultTypeRHS > &rhs)
Definition result_info_impl.h:66
bool operator==(const ResultInfo< ResultTypeLHS > &lhs, const ResultInfo< ResultTypeRHS > &rhs)
Definition result_info_impl.h:58
bool isOk< Result >(const Result &result)
Definition result_type_impl.h:267
Serves as the root component, with common functionality documented in core functionality.
Definition base.h:24
Definition result_info_decl.h:86
static std::int32_t getCode()
Definition result_info_impl.h:42
static const char * getLabel()
Definition result_info_impl.h:36