00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00020 #ifndef flc_fassert_H
00021 #define flc_fassert_H
00022
00023 #include <falcon/setup.h>
00024
00025 #ifndef NDEBUG
00026 #ifdef _MSC_VER
00027 #ifdef __func__
00028 # define fassert(expr) \
00029 {if (!(expr)) _perform_FALCON_assert_func( #expr, __FILE__, __LINE__, __func__ );}
00030 #else
00031 # define fassert(expr) \
00032 {if (!(expr)) _perform_FALCON_assert( #expr, __FILE__, __LINE__ );}
00033 #endif
00034 #else
00035
00036
00037 #ifndef __STRING
00038 #define __STRING(x) #x
00039 #endif
00040
00041 #ifdef __func__
00042 # define fassert(expr) \
00043 {if (!(expr)) _perform_FALCON_assert_func( __STRING(expr), __FILE__, __LINE__, __func__ );}
00044 #else
00045 # define fassert(expr) \
00046 {if (!(expr)) _perform_FALCON_assert( __STRING(expr), __FILE__, __LINE__ );}
00047 #endif
00048 #endif
00049 #else
00050 # define fassert(expr)
00051 #endif
00052
00053 extern "C" void FALCON_DYN_SYM _perform_FALCON_assert_func( const char *expr, const char *filename, int line, const char *assertFunc );
00054 extern "C" void FALCON_DYN_SYM _perform_FALCON_assert( const char *expr, const char *filename, int line );
00055
00056 namespace Falcon {
00057
00058
00059 template<typename rtype_ptr, typename stype>
00060 inline rtype_ptr dyncast(stype* pSource)
00061 {
00062 #ifndef NDEBUG
00063
00064 fassert ( pSource == 0 || ( static_cast<rtype_ptr>(pSource) == dynamic_cast<rtype_ptr>(pSource) ) );
00065 #endif
00066
00067 return static_cast<rtype_ptr>(pSource);
00068 }
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089 }
00090
00091 #endif
00092
00093