Debug.h

00001 /*
00002  * This source file is part of libRocket, the HTML/CSS Interface Middleware
00003  *
00004  * For the latest information, see http://www.librocket.com
00005  *
00006  * Copyright (c) 2008-2010 CodePoint Ltd, Shift Technology Ltd
00007  *
00008  * Permission is hereby granted, free of charge, to any person obtaining a copy
00009  * of this software and associated documentation files (the "Software"), to deal
00010  * in the Software without restriction, including without limitation the rights
00011  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00012  * copies of the Software, and to permit persons to whom the Software is
00013  * furnished to do so, subject to the following conditions:
00014  *
00015  * The above copyright notice and this permission notice shall be included in
00016  * all copies or substantial portions of the Software.
00017  * 
00018  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00019  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00020  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00021  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00022  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00023  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00024  * THE SOFTWARE.
00025  *
00026  */
00027 
00028 #ifndef ROCKETCOREDEBUG_H
00029 #define ROCKETCOREDEBUG_H
00030 
00031 #include <Rocket/Core/Header.h>
00032 
00033 // Define for breakpointing.
00034 #if defined (ROCKET_PLATFORM_WIN32)
00035 #define ROCKET_BREAK _asm { int 0x03 }
00036 #elif defined (ROCKET_PLATFORM_LINUX)
00037 #define ROCKET_BREAK asm ("int $0x03" )
00038 #elif defined (ROCKET_PLATFORM_MACOSX)
00039 #define ROCKET_BREAK _asm { int 0x03 }
00040 #endif
00041 
00042 #define ROCKET_STATIC_ASSERT(cond, msg) typedef char msg[(cond) ? 1 : 0]
00043 
00044 // Define the LT_ASSERT and ROCKET_VERIFY macros.
00045 #if 1 
00046 #define ROCKET_ASSERT(x)
00047 #define ROCKET_ASSERTMSG(x, m)
00048 #define ROCKET_ERROR
00049 #define ROCKET_ERRORMSG(m)
00050 #define ROCKET_VERIFY(x) x
00051 #else
00052 namespace Rocket {
00053 namespace Core {
00054 
00055 bool ROCKETCORE_API Assert(const char* message, const char* file, int line);
00056 #define ROCKET_ASSERT(x) \
00057 if (!(x)) \
00058 { \
00059         if (!Rocket::Core::Assert("ROCKET_ASSERT("#x")", __FILE__, __LINE__ )) \
00060         { \
00061                 ROCKET_BREAK; \
00062         } \
00063 }
00064 #define ROCKET_ASSERTMSG(x, m)  \
00065 if (!(x)) \
00066 { \
00067         if (!Rocket::Core::Assert(m, __FILE__, __LINE__ )) \
00068         { \
00069                 ROCKET_BREAK; \
00070         } \
00071 }
00072 #define ROCKET_ERROR \
00073 if (!Rocket::Core::Assert("ROCKET_ERROR", __FILE__, __LINE__)) \
00074 { \
00075         ROCKET_BREAK; \
00076 }
00077 #define ROCKET_ERRORMSG(m) \
00078 if (!Rocket::Core::Assert(m, __FILE__, __LINE__)) \
00079 { \
00080         ROCKET_BREAK; \
00081 }
00082 #define ROCKET_VERIFY(x) ROCKET_ASSERT(x)
00083 
00084 }
00085 }
00086 #endif
00087 
00088 #endif