29#if defined(__GNUC__) || defined (__clang__)
30 #define AGX_NO_RETURN __attribute__((__noreturn__))
57#define AGX_FUNCTION __FUNCTION__
60#define AGX_FUNCTION __PRETTY_FUNCTION__
64#define AGX_WHERE_AM_I agx::buildErrorString("[%s:%u (%s)]", "", __FILE__, __LINE__, AGX_FUNCTION)
84 inline const char* decodeException(
const std::exception& e) {
return e.what(); }
85 inline const char* decodeException(
const char* e) {
return e; }
86 inline const char* decodeException(
const std::string& e) {
return e.c_str(); }
88 class ExceptionDescriber
91 ExceptionDescriber(
const std::string& where)
95 const E& operator%(
const E& e)
const
109#define agxThrow throw agx_internal::ExceptionDescriber(AGX_WHERE_AM_I) %
115#if !defined(AGX_DEBUG) && !defined(NDEBUG)
121 #define AGX_MACRO(x) do {x} while(0,0)
122 #define agx_snprintf _snprintf_s
123 #define agx_fprintf fprintf_s
125 #define AGX_MACRO(x) do {x} while(0)
126 #define agx_snprintf snprintf
127 #define agx_fprintf fprintf
131#define agxVerify(expr) AGX_MACRO(if (!(expr)) {fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxVerify failed: `%s'", "", __FILE__, __LINE__, #expr).c_str()); agx::abort();})
132#define agxVerify1(expr, msg) AGX_MACRO(if (!(expr)) {fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxVerify failed: `%s', ", "%s", __FILE__, __LINE__, #expr, agx::cStr(msg)).c_str()); agx::abort();})
133#define agxVerifyN(expr, format, ...) AGX_MACRO(if (!(expr)) {fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxVerify failed: `%s', ", format, __FILE__, __LINE__, #expr, ##__VA_ARGS__).c_str()); agx::abort();})
135#define agxVerifyThrow(expr) AGX_MACRO(if (!(expr)) {std::string errorMessage = agx::buildErrorString("[%s:%u] agxVerify failed: `%s'", "", __FILE__, __LINE__, #expr); agxThrow agx::Error(errorMessage);})
136#define agxVerifyThrow1(expr, msg) AGX_MACRO(if (!(expr)) {std::string errorMessage = agx::buildErrorString("[%s:%u] agxVerify failed: `%s', ", "%s", __FILE__, __LINE__, #expr, agx::cStr(msg)); agxThrow agx::Error(errorMessage);})
137#define agxVerifyThrowN(expr, format, ...) AGX_MACRO(if (!(expr)) {std::string errorMessage = agx::buildErrorString("[%s:%u] agxVerify failed: `%s', ", format, __FILE__, __LINE__, #expr, ##__VA_ARGS__); agxThrow agx::Error(errorMessage);})
142#define agxAssertVoid() AGX_MACRO( {fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxAssert failed: `%s'", "", __FILE__, __LINE__).c_str()); agx::abort();})
143#define agxAssert(expr) AGX_MACRO(if (!(expr)) {fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxAssert failed: `%s'", "", __FILE__, __LINE__, #expr).c_str()); agx::abort();})
144#define agxAssert1(expr, msg ) AGX_MACRO(if (!(expr)) {fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxAssert failed: `%s', ", "%s", __FILE__, __LINE__, #expr, agx::cStr(msg)).c_str()); agx::abort();})
145#define agxAssertN(expr, format, ... ) AGX_MACRO(if (!(expr)) {fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxAssert failed: `%s', ", format, __FILE__, __LINE__, #expr, ##__VA_ARGS__).c_str()); agx::abort();})
148#define agxDebugVerify(expr) agxAssert(expr)
149#define agxDebugVerify1(expr, msg ) agxAssert1(expr, msg)
150#define agxDebugVerifyN(expr, format, ... ) agxAssertN(expr, format, __VA_ARGS__)
152#define agxAssertVoid() ((void)0)
153#define agxAssert(e) ((void)0)
154#define agxAssert1(e, msg) ((void)0)
155#define agxAssertN(e, format, ...) ((void)0)
158#define agxDebugVerify(expr) ((void)(expr))
159#define agxDebugVerify1( expr, msg ) ((void)(expr))
160#define agxDebugVerifyN( expr, format, ... ) ((void)(expr))
164#define agxAbort( ) AGX_MACRO(fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxAbort", "", __FILE__, __LINE__ ).c_str()); agx::abort();)
165#define agxAbort1(msg) AGX_MACRO(fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxAbort: ", "%s", __FILE__, __LINE__, agx::cStr(msg)).c_str()); agx::abort();)
166#define agxAbortN(format, ... ) AGX_MACRO(fprintf(stderr, "%s\n", agx::buildErrorString("[%s:%u] agxAbort: ", format, __FILE__, __LINE__, ##__VA_ARGS__).c_str()); agx::abort();)
170#define AGX_ASM_COMMENT(X) asm("#" X)
172#define AGX_ASM_COMMENT(X)
#define DOXYGEN_END_INTERNAL_BLOCK()
#define DOXYGEN_START_INTERNAL_BLOCK()
The agx namespace contains the dynamics/math part of the AGX Dynamics API.
AGXCORE_EXPORT std::string buildErrorString(const char *baseFormat, std::string msgFormat,...)
AGXCORE_EXPORT void log_throw(const std::string &where, const char *what)
AGXCORE_EXPORT int setExceptionNotifyLevel(int level)
AGXCORE_EXPORT void abort() AGX_NO_RETURN
AGXCORE_EXPORT const char * cStr(const char *str)
AGXCORE_EXPORT int getExceptionNotifyLevel()