32#ifndef AAXLibrary_AAX_Exception_h
33#define AAXLibrary_AAX_Exception_h
47#pragma mark AAX::Exception
59 inline std::string
AsString(
const char* inStr);
60 inline const std::string&
AsString(
const std::string& inStr);
94 explicit Any(
const C& inWhat)
98 , mWhat(
AAX::Exception::
Any::CreateWhat(mDesc, mFunction, mLine))
104 template <
class C1,
class C2,
class C3>
105 explicit Any(
const C1& inWhat,
const C2& inFunction,
const C3& inLine)
109 , mWhat(
AAX::Exception::
Any::CreateWhat(mDesc, mFunction, mLine))
115 : mDesc(inOther.mDesc)
116 , mFunction(inOther.mFunction)
117 , mLine(inOther.mLine)
118 , mWhat(inOther.mWhat)
125 mDesc = inOther.mDesc;
126 mFunction = inOther.mFunction;
127 mLine = inOther.mLine;
128 mWhat = inOther.mWhat;
137#ifndef AAX_CPP11_SUPPORT
139 operator const std::string&(void)
const {
return mWhat; }
142 const std::string&
What()
const {
return mWhat; }
143 const std::string&
Desc()
const {
return mDesc; }
144 const std::string&
Function()
const {
return mFunction; }
145 const std::string&
Line()
const {
return mLine; }
148 static std::string CreateWhat(
const std::string& inDesc,
const std::string& inFunc,
const std::string& inLine)
150 std::string whatStr(inDesc);
151 if (
false == inFunc.empty()) { whatStr += (
" func:" + inFunc); }
152 if (
false == inLine.empty()) { whatStr += (
" line:" + inLine); }
158 std::string mFunction;
170 , mResult(inWhatResult)
177 , mResult(inWhatResult)
181 template <
class C1,
class C2>
184 , mResult(inWhatResult)
191 , mResult(inOther.mResult)
209 return inStr ? std::string(inStr) : std::string();
212 const std::string&
AsString(
const std::string& inStr)
361 : mCurResult(inResult)
376 mAcceptedResults.insert(inResult);
381 mAcceptedResults.clear();
388 mCurResult = inResult;
430 if (0 == mAcceptedResults.count(err))
447 std::set<AAX_Result> mAcceptedResults;
454#pragma mark AAX exception macros
473#define AAX_SWALLOW(...) \
474 try { if(true) { ( __VA_ARGS__ ); } } \
475 catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
476 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()); \
477 } do {} while (false)
501#define AAX_SWALLOW_MULT(...) \
502try { if(true) { __VA_ARGS__ } } \
503catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
504AAX_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()); \
528#define AAX_CAPTURE(X, ...) \
529try { if(true) { ( __VA_ARGS__ ); } } \
530catch (const AAX::Exception::ResultError& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
531AAX_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()); \
532(X) = AAX_PREPROCESSOR_CONCAT(ex,__LINE__).Result(); \
566#define AAX_CAPTURE_MULT(X, ...) \
567try { if(true) { __VA_ARGS__ } } \
568catch (const AAX_CheckedResult::Exception& AAX_PREPROCESSOR_CONCAT(ex,__LINE__)) { \
569AAX_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()); \
570(X) = AAX_PREPROCESSOR_CONCAT(ex,__LINE__).Result(); \
624 if (0 == mNumSucceeded && 0 < mNumFailed) {
645 mLastFailure = inResult;
675 int mNumSucceeded{0};
@ AAX_SUCCESS
Definition: AAX_Errors.h:49
Various utility definitions for AAX.
int32_t AAX_Result
Definition: AAX.h:347
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:241
#define kAAX_Trace_Priority_Normal
Definition: AAX_Assert.h:239
#define AAX_TRACE_RELEASE(iPriority,...)
Print a trace statement to the log.
Definition: AAX_Assert.h:245
#define AAX_STACKTRACE(iPriority,...)
Print a stack trace statement to the log (debug builds only)
Definition: AAX_Assert.h:290
Definition: AAX_EnvironmentUtilities.h:72
std::string AsStringResult(AAX_Result inResult)
Definition: AAX_StringUtilities.hpp:786
std::string AsString(const char *inStr)
Definition: AAX_Exception.h:207
std::string AsStringInt32(int32_t inInt32)
Definition: AAX_StringUtilities.hpp:340
Definition: AAX_Exception.h:87
const std::string & Desc() const
Definition: AAX_Exception.h:143
const std::string & Function() const
Definition: AAX_Exception.h:144
Any(const C &inWhat)
Definition: AAX_Exception.h:94
AAX_DEFAULT_MOVE_OPER(Any)
Any(const Any &inOther)
Definition: AAX_Exception.h:114
Any & operator=(const Any &inOther)
Definition: AAX_Exception.h:123
const std::string & What() const
Definition: AAX_Exception.h:142
Any(const C1 &inWhat, const C2 &inFunction, const C3 &inLine)
Definition: AAX_Exception.h:105
AAX_DEFAULT_MOVE_CTOR(Any)
virtual ~Any()
Definition: AAX_Exception.h:89
const std::string & Line() const
Definition: AAX_Exception.h:145
Definition: AAX_Exception.h:166
ResultError(AAX_Result inWhatResult, const C1 &inFunction, const C2 &inLine)
Definition: AAX_Exception.h:182
static std::string FormatResult(AAX_Result inResult)
Definition: AAX_Exception.h:195
ResultError(const ResultError &inOther)
Definition: AAX_Exception.h:189
AAX_Result Result() const
Definition: AAX_Exception.h:200
ResultError(AAX_Result inWhatResult)
Definition: AAX_Exception.h:168
ResultError(AAX_Result inWhatResult, const C &inFunction)
Definition: AAX_Exception.h:175
Definition: AAX_Exception.h:343
AAX_CheckedResult(AAX_Result inResult)
Implicit conversion constructor from AAX_Result.
Definition: AAX_Exception.h:360
void ResetAcceptedResults()
Definition: AAX_Exception.h:379
AAX::Exception::ResultError Exception
Definition: AAX_Exception.h:345
AAX_CheckedResult & operator|=(AAX_Result inResult)
bitwise-or assignment to AAX_Result
Definition: AAX_Exception.h:395
AAX_CheckedResult()
Construct an AAX_CheckedResult in a success state.
Definition: AAX_Exception.h:350
void Clear()
Clears the current result state.
Definition: AAX_Exception.h:408
~AAX_CheckedResult()
Definition: AAX_Exception.h:347
AAX_CheckedResult & operator=(AAX_Result inResult)
Assignment to AAX_Result.
Definition: AAX_Exception.h:386
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:416
void AddAcceptedResult(AAX_Result inResult)
Add an expected result which will not result in a throw.
Definition: AAX_Exception.h:374
Definition: AAX_Exception.h:618
AAX_Result LastFailure() const
Definition: AAX_Exception.h:667
~AAX_AggregateResult()
Definition: AAX_Exception.h:622
AAX_AggregateResult & operator=(AAX_Result inResult)
Overloaded operator=() for conversion from AAX_Result.
Definition: AAX_Exception.h:637
void Check() const
Definition: AAX_Exception.h:660
void Clear()
Definition: AAX_Exception.h:661
int NumSucceeded() const
Definition: AAX_Exception.h:669
AAX_AggregateResult()=default
int NumFailed() const
Definition: AAX_Exception.h:668
int NumAttempted() const
Definition: AAX_Exception.h:670