19#ifndef AAXLibrary_AAX_Exception_h
20#define AAXLibrary_AAX_Exception_h
34#pragma mark AAX::Exception
46 inline std::string
AsString(
const char* inStr);
47 inline const std::string&
AsString(
const std::string& inStr);
81 explicit Any(
const C& inWhat)
85 , mWhat(
AAX::Exception::
Any::CreateWhat(mDesc, mFunction, mLine))
91 template <
class C1,
class C2,
class C3>
92 explicit Any(
const C1& inWhat,
const C2& inFunction,
const C3& inLine)
96 , mWhat(
AAX::Exception::
Any::CreateWhat(mDesc, mFunction, mLine))
103 mDesc = inOther.mDesc;
104 mFunction = inOther.mFunction;
105 mLine = inOther.mLine;
106 mWhat = inOther.mWhat;
115#ifndef AAX_CPP11_SUPPORT
117 operator const std::string&(void)
const {
return mWhat; }
120 const std::string&
What()
const {
return mWhat; }
121 const std::string&
Desc()
const {
return mDesc; }
122 const std::string&
Function()
const {
return mFunction; }
123 const std::string&
Line()
const {
return mLine; }
126 static std::string CreateWhat(
const std::string& inDesc,
const std::string& inFunc,
const std::string& inLine)
128 std::string whatStr(inDesc);
129 if (
false == inFunc.empty()) { whatStr += (
" func:" + inFunc); }
130 if (
false == inLine.empty()) { whatStr += (
" line:" + inLine); }
136 std::string mFunction;
148 , mResult(inWhatResult)
155 , mResult(inWhatResult)
159 template <
class C1,
class C2>
162 , mResult(inWhatResult)
180 return inStr ? std::string(inStr) : std::string();
183 const std::string&
AsString(
const std::string& inStr)
332 : mCurResult(inResult)
347 mAcceptedResults.insert(inResult);
352 mAcceptedResults.clear();
359 mCurResult = inResult;
401 if (0 == mAcceptedResults.count(err))
418 std::set<AAX_Result> mAcceptedResults;
425#pragma mark AAX exception macros
444#define AAX_SWALLOW(...) \
445 try { if(true) { ( __VA_ARGS__ ); } } \
446 catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
447 AAX_TRACE_RELEASE(kAAX_Trace_Priority_High, "%s line %d (%s) exception caught: %s (swallowed)", __FILE__, __LINE__, __FUNCTION__, AAX_PREPROCESSOR_CONCAT(ex,__LINE__).What().c_str()); \
448 } do {} while (false)
472#define AAX_SWALLOW_MULT(...) \
473try { if(true) { __VA_ARGS__ } } \
474catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
475AAX_TRACE_RELEASE(kAAX_Trace_Priority_High, "%s line %d (%s) exception caught: %s (swallowed)", __FILE__, __LINE__, __FUNCTION__, AAX_PREPROCESSOR_CONCAT(ex,__LINE__).What().c_str()); \
499#define AAX_CAPTURE(X, ...) \
500try { if(true) { ( __VA_ARGS__ ); } } \
501catch (const AAX::Exception::ResultError& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
502AAX_TRACE_RELEASE(kAAX_Trace_Priority_High, "%s line %d (%s) exception caught: %s (captured)", __FILE__, __LINE__, __FUNCTION__, AAX_PREPROCESSOR_CONCAT(ex,__LINE__).What().c_str()); \
503(X) = AAX_PREPROCESSOR_CONCAT(ex,__LINE__).Result(); \
537#define AAX_CAPTURE_MULT(X, ...) \
538try { if(true) { __VA_ARGS__ } } \
539catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
540AAX_TRACE_RELEASE(kAAX_Trace_Priority_High, "%s line %d (%s) exception caught: %s (captured)", __FILE__, __LINE__, __FUNCTION__, AAX_PREPROCESSOR_CONCAT(ex,__LINE__).What().c_str()); \
541(X) = AAX_PREPROCESSOR_CONCAT(ex,__LINE__).Result(); \
595 if (0 == mNumSucceeded && 0 < mNumFailed) {
616 mLastFailure = inResult;
646 int mNumSucceeded{0};
@ AAX_SUCCESS
Definition: AAX_Errors.h:36
Various utility definitions for AAX.
int32_t AAX_Result
Definition: AAX.h:334
Various string utility definitions for AAX Native.
Declarations for cross-platform AAX_ASSERT, AAX_TRACE and related facilities.
#define kAAX_Trace_Priority_Lowest
Definition: AAX_Assert.h:228
#define kAAX_Trace_Priority_Normal
Definition: AAX_Assert.h:226
#define AAX_TRACE_RELEASE(iPriority,...)
Print a trace statement to the log.
Definition: AAX_Assert.h:232
#define AAX_STACKTRACE(iPriority,...)
Print a stack trace statement to the log (debug builds only)
Definition: AAX_Assert.h:277
Definition: AAX_EnvironmentUtilities.h:59
std::string AsStringResult(AAX_Result inResult)
Definition: AAX_StringUtilities.hpp:773
std::string AsString(const char *inStr)
Definition: AAX_Exception.h:178
std::string AsStringInt32(int32_t inInt32)
Definition: AAX_StringUtilities.hpp:327
Definition: AAX_Exception.h:74
const std::string & Desc() const
Definition: AAX_Exception.h:121
const std::string & Function() const
Definition: AAX_Exception.h:122
Any(const C &inWhat)
Definition: AAX_Exception.h:81
AAX_DEFAULT_MOVE_OPER(Any)
Any & operator=(const Any &inOther)
Definition: AAX_Exception.h:101
const std::string & What() const
Definition: AAX_Exception.h:120
Any(const C1 &inWhat, const C2 &inFunction, const C3 &inLine)
Definition: AAX_Exception.h:92
AAX_DEFAULT_MOVE_CTOR(Any)
virtual ~Any()
Definition: AAX_Exception.h:76
const std::string & Line() const
Definition: AAX_Exception.h:123
Definition: AAX_Exception.h:144
ResultError(AAX_Result inWhatResult, const C1 &inFunction, const C2 &inLine)
Definition: AAX_Exception.h:160
static std::string FormatResult(AAX_Result inResult)
Definition: AAX_Exception.h:166
AAX_Result Result() const
Definition: AAX_Exception.h:171
ResultError(AAX_Result inWhatResult)
Definition: AAX_Exception.h:146
ResultError(AAX_Result inWhatResult, const C &inFunction)
Definition: AAX_Exception.h:153
Definition: AAX_Exception.h:314
AAX_CheckedResult(AAX_Result inResult)
Implicit conversion constructor from AAX_Result.
Definition: AAX_Exception.h:331
void ResetAcceptedResults()
Definition: AAX_Exception.h:350
AAX::Exception::ResultError Exception
Definition: AAX_Exception.h:316
AAX_CheckedResult & operator|=(AAX_Result inResult)
bitwise-or assignment to AAX_Result
Definition: AAX_Exception.h:366
AAX_CheckedResult()
Construct an AAX_CheckedResult in a success state.
Definition: AAX_Exception.h:321
void Clear()
Clears the current result state.
Definition: AAX_Exception.h:379
~AAX_CheckedResult()
Definition: AAX_Exception.h:318
AAX_CheckedResult & operator=(AAX_Result inResult)
Assignment to AAX_Result.
Definition: AAX_Exception.h:357
AAX_Result LastError() const
Get the last non-success result which was stored in this object, or AAX_SUCCESS if no non-success res...
Definition: AAX_Exception.h:387
void AddAcceptedResult(AAX_Result inResult)
Add an expected result which will not result in a throw.
Definition: AAX_Exception.h:345
Definition: AAX_Exception.h:589
AAX_Result LastFailure() const
Definition: AAX_Exception.h:638
~AAX_AggregateResult()
Definition: AAX_Exception.h:593
AAX_AggregateResult & operator=(AAX_Result inResult)
Overloaded operator=() for conversion from AAX_Result.
Definition: AAX_Exception.h:608
void Check() const
Definition: AAX_Exception.h:631
void Clear()
Definition: AAX_Exception.h:632
int NumSucceeded() const
Definition: AAX_Exception.h:640
AAX_AggregateResult()=default
int NumFailed() const
Definition: AAX_Exception.h:639
int NumAttempted() const
Definition: AAX_Exception.h:641