74 return _description ==
nullptr;
79 return IsOK() ?
"" : _description;
84 return IsOK() ?
"" : _file;
89 return IsOK() ? 0 : _line;
96 return IsOK() ?
"OK" :
Format(
"%s(%d): %s", _file, _line, _description);
108 MOCHI_NO_INLINE
void SetFirstError(
char const* description,
char const* file,
int line) {
110 _description = description;
121 char const* _description =
nullptr;
133#define MOCHI_ERROR_RETURN(error, ...) \
134 if (!static_cast<superdex::Error const&>(error).IsOK()) \
136 return __VA_ARGS__; \
142#define MOCHI_ERROR_SET(error, descriptionStringLiteral) \
143 static_cast<superdex::Error&>(error).SetFirstError("" descriptionStringLiteral, __FILE__, __LINE__);
146#define MOCHI_ERROR_IF(condition, error, descriptionStringLiteral) \
149 MOCHI_ERROR_SET(error, descriptionStringLiteral); \
155#define MOCHI_ERROR_IF_NOT(condition, error, descriptionStringLiteral) \
156 MOCHI_ERROR_IF(!(condition), error, descriptionStringLiteral)
161#if MOCHI_COMPILER_MSVC
162#define MOCHI_ERROR_NOT_IMPLEMENTED(error) \
163 static_cast<superdex::Error&>(error).SetFirstError( \
164 __FUNCTION__ " not implemented", __FILE__, __LINE__)
166#define MOCHI_ERROR_NOT_IMPLEMENTED(error) \
167 static_cast<superdex::Error&>(error).SetFirstError("Not implemented", __FILE__, __LINE__)
186class ErrorAssert final {
192#if MOCHI_ASSERT_ENABLED
195 MOCHI_ASSERT_ON_FAILURE(
216class ErrorLog final {
ErrorLog(LogChannel channel=LogChannel::Error)
Error & operator=(Error &&)=default
char const * GetFile() const
void SetFirstError(char const *description, char const *file, int line)
char const * GetDescription() const
std::string ToString() const
#define MOCHI_LOG_IMPL(channel, file, line,...)