123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _PLATFORMASSERT_H_
- #define _PLATFORMASSERT_H_
- #ifndef _PLATFORM_H_
- #include "platform/platform.h"
- #endif
- class PlatformAssert
- {
- public:
- enum Type
- {
- Warning = 3,
- Fatal = 2,
- Fatal_ISV = 1
- };
- private:
- static PlatformAssert *platformAssert;
- bool processing;
- bool ignoreAll;
- virtual bool displayMessageBox(const char *title, const char *message, bool retry);
- virtual bool process(Type assertType,
- const char* filename,
- U32 lineNumber,
- const char* message);
- PlatformAssert();
- virtual ~PlatformAssert();
- public:
- static void create( PlatformAssert* newAssertClass = NULL );
- static void destroy();
- static bool processAssert(Type assertType,
- const char* filename,
- U32 lineNumber,
- const char* message);
- static char *message(const char *message, ...);
- static bool processingAssert();
- };
- #ifdef TORQUE_ENABLE_ASSERTS
- /*!
- Assert that the statement x is true, and continue processing.
- If the statment x is true, continue processing.
- If the statement x is false, log the file and line where the assert occured,
- the message y and continue processing.
- These asserts are only present in DEBUG builds.
- */
- #define AssertWarn(x, y) (void)(!!(x) || ::PlatformAssert::processAssert(::PlatformAssert::Warning, __FILE__, __LINE__, y))
- /*!
- Helper macro called when AssertFatal failed.
- Used for help static code analyzers.
- */
- #ifndef ON_FAIL_ASSERTFATAL
- #define ON_FAIL_ASSERTFATAL
- #endif
- /*!
- Assert that the statement x is true, otherwise halt.
- If the statement x is true, continue processing.
- If the statement x is false, log the file and line where the assert occured,
- the message y and displaying a dialog containing the message y. The user then
- has the option to halt or continue causing the debugger to break.
- These asserts are only present in DEBUG builds.
- This assert is very useful for verifying data as well as function entry and
- exit conditions.
- */
- #define AssertFatal(x, y) ((!(x) && ::PlatformAssert::processAssert(::PlatformAssert::Fatal, __FILE__, __LINE__, y)) ? ::Platform::debugBreak() : (void)0) \
- #else
- #define AssertFatal(x, y) TORQUE_UNUSED(x)
- #define AssertWarn(x, y) TORQUE_UNUSED(x)
- #endif
- /*!
- Assert (In Shipping Version) that the statement x is true, otherwise halt.
- If the statement x is true, continue processing.
- If the statement x is false, log the file and line where the assert occurred,
- the message y and exit the program displaying a dialog containing the message y.
- These asserts are present in both OPTIMIZED and DEBUG builds.
- This assert should only be used for rare conditions where the application cannot continue
- execution without seg-faulting and you want to display a nice exit message.
- */
- #define AssertISV(x, y) ((!(x) && ::PlatformAssert::processAssert(::PlatformAssert::Fatal_ISV, __FILE__, __LINE__, y)) ? ::Platform::debugBreak() : (void)0) \
- /*!
- Sprintf style string formating into a fixed temporary buffer.
- @param in_msg sprintf style format string
- @returns pointer to fixed buffer containing formatted string
- \b Example:
- \code
- U8 a = 5;
- S16 b = -10;
- char *output = avar("hello %s! a=%u, b=%d", "world");
- ouput = "hello world! a=5, b=-10"
- \endcode
- @warning avar uses a static fixed buffer. Treat the buffer as volatile data
- and use it immediately. Other functions my use avar too and clobber the buffer.
- */
- const char* avar(const char *in_msg, ...);
- #endif // _PLATFORM_ASSERT_H_
|