22 #ifndef AAXLibrary_AAX_Exception_h
23 #define AAXLibrary_AAX_Exception_h
37 #pragma mark AAX::Exception
49 inline std::string
AsString(
const char* inStr);
50 inline const std::string&
AsString(
const std::string& inStr);
84 explicit Any(
const C& inWhat)
88 , mWhat(
AAX::Exception::
Any::CreateWhat(mDesc, mFunction, mLine))
94 template <
class C1,
class C2,
class C3>
95 explicit Any(
const C1& inWhat,
const C2& inFunction,
const C3& inLine)
99 , mWhat(
AAX::Exception::
Any::CreateWhat(mDesc, mFunction, mLine))
106 mDesc = inOther.mDesc;
107 mFunction = inOther.mFunction;
108 mLine = inOther.mLine;
109 mWhat = inOther.mWhat;
118 #ifndef AAX_CPP11_SUPPORT
120 operator const std::string&(void)
const {
return mWhat; }
123 const std::string&
What()
const {
return mWhat; }
124 const std::string&
Desc()
const {
return mDesc; }
125 const std::string&
Function()
const {
return mFunction; }
126 const std::string&
Line()
const {
return mLine; }
129 static std::string CreateWhat(
const std::string& inDesc,
const std::string& inFunc,
const std::string& inLine)
131 std::string whatStr(inDesc);
132 if (
false == inFunc.empty()) { whatStr += (
" func:" + inFunc); }
133 if (
false == inLine.empty()) { whatStr += (
" line:" + inLine); }
139 std::string mFunction;
151 , mResult(inWhatResult)
158 , mResult(inWhatResult)
162 template <
class C1,
class C2>
165 , mResult(inWhatResult)
183 return inStr ? std::string(inStr) : std::string();
186 const std::string&
AsString(
const std::string& inStr)
335 : mCurResult(inResult)
350 mAcceptedResults.insert(inResult);
355 mAcceptedResults.clear();
362 mCurResult = inResult;
404 if (0 == mAcceptedResults.count(err))
421 std::set<AAX_Result> mAcceptedResults;
428 #pragma mark AAX exception macros
447 #define AAX_SWALLOW(...) \
448 try { if(true) { ( __VA_ARGS__ ); } } \
449 catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
450 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()); \
451 } do {} while (false)
475 #define AAX_SWALLOW_MULT(...) \
476 try { if(true) { __VA_ARGS__ } } \
477 catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
478 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()); \
479 } do {} while (false)
502 #define AAX_CAPTURE(X, ...) \
503 try { if(true) { ( __VA_ARGS__ ); } } \
504 catch (const AAX::Exception::ResultError& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
505 AAX_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()); \
506 (X) = AAX_PREPROCESSOR_CONCAT(ex,__LINE__).Result(); \
507 } do {} while (false)
540 #define AAX_CAPTURE_MULT(X, ...) \
541 try { if(true) { __VA_ARGS__ } } \
542 catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
543 AAX_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()); \
544 (X) = AAX_PREPROCESSOR_CONCAT(ex,__LINE__).Result(); \
545 } do {} while (false)
603 if (0 == mNumSucceeded && 0 < mNumFailed)
616 mLastFailure = inResult;
Various utility definitions for AAX.
int32_t AAX_Result
Definition: AAX.h:337
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
@ AAX_SUCCESS
Definition: AAX_Errors.h:39
Various string utility definitions for AAX Native.
Definition: AAX_Exception.h:42
std::string AsStringResult(AAX_Result inResult)
Definition: AAX_StringUtilities.hpp:536
std::string AsString(const char *inStr)
Definition: AAX_Exception.h:181
std::string AsStringInt32(int32_t inInt32)
Definition: AAX_StringUtilities.hpp:294
Definition: AAX_Exception.h:77
const std::string & Function() const
Definition: AAX_Exception.h:125
Any & operator=(const Any &inOther)
Definition: AAX_Exception.h:104
Any(const C &inWhat)
Definition: AAX_Exception.h:84
const std::string & What() const
Definition: AAX_Exception.h:123
AAX_DEFAULT_MOVE_OPER(Any)
const std::string & Desc() const
Definition: AAX_Exception.h:124
Any(const C1 &inWhat, const C2 &inFunction, const C3 &inLine)
Definition: AAX_Exception.h:95
AAX_DEFAULT_MOVE_CTOR(Any)
virtual ~Any()
Definition: AAX_Exception.h:79
const std::string & Line() const
Definition: AAX_Exception.h:126
Definition: AAX_Exception.h:147
ResultError(AAX_Result inWhatResult, const C1 &inFunction, const C2 &inLine)
Definition: AAX_Exception.h:163
static std::string FormatResult(AAX_Result inResult)
Definition: AAX_Exception.h:169
AAX_Result Result() const
Definition: AAX_Exception.h:174
ResultError(AAX_Result inWhatResult)
Definition: AAX_Exception.h:149
ResultError(AAX_Result inWhatResult, const C &inFunction)
Definition: AAX_Exception.h:156
Definition: AAX_Exception.h:317
AAX_CheckedResult(AAX_Result inResult)
Implicit conversion constructor from AAX_Result.
Definition: AAX_Exception.h:334
void ResetAcceptedResults()
Definition: AAX_Exception.h:353
AAX::Exception::ResultError Exception
Definition: AAX_Exception.h:319
AAX_CheckedResult & operator|=(AAX_Result inResult)
bitwise-or assignment to AAX_Result
Definition: AAX_Exception.h:369
AAX_CheckedResult()
Construct an AAX_CheckedResult in a success state.
Definition: AAX_Exception.h:324
void Clear()
Clears the current result state.
Definition: AAX_Exception.h:382
~AAX_CheckedResult()
Definition: AAX_Exception.h:321
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:390
void AddAcceptedResult(AAX_Result inResult)
Add an expected result which will not result in a throw.
Definition: AAX_Exception.h:348
AAX_CheckedResult & operator=(AAX_Result inResult)
Assignment to AAX_Result.
Definition: AAX_Exception.h:360
Definition: AAX_Exception.h:592
AAX_Result LastFailure() const
Definition: AAX_Exception.h:623
~AAX_AggregateResult()
Definition: AAX_Exception.h:601
AAX_AggregateResult & operator=(AAX_Result inResult)
Overloaded operator=() for conversion from AAX_Result.
Definition: AAX_Exception.h:608
AAX_AggregateResult()
Definition: AAX_Exception.h:594
int NumSucceeded() const
Definition: AAX_Exception.h:625
int NumFailed() const
Definition: AAX_Exception.h:624
int NumAttempted() const
Definition: AAX_Exception.h:626