base_typesig.hh

Go to the documentation of this file.
00001 /*
00064  * LEGAL:   COPYRIGHT (C) 2004 JIM E. BROOKS
00065  *          THIS SOURCE CODE IS RELEASED UNDER THE TERMS
00066  *          OF THE GNU GENERAL PUBLIC LICENSE VERSION 2 (GPL 2).
00067  *****************************************************************************/
00068 
00069 #ifndef DOXYGEN  // doxygen can't parse this correctly
00070 #ifndef BASE_TYPESIG_HH
00071 #define BASE_TYPESIG_HH 1
00072 
00073 namespace base {
00074 
00076 #ifndef COMPILE_TYPESIGS
00077 #   if DEBUG
00078 #       define COMPILE_TYPESIGS 1
00079 #   else
00080 #       define COMPILE_TYPESIGS 0
00081 #   endif
00082 #endif
00083 
00089 #if COMPILE_TYPESIGS
00090 #define  const { return typesig##TYPESIG; }
00091 #else
00092 #define 
00093 #endif
00094 
00098 #define            \
00099     CLASS()  {        SET_TYPESIG( this, TYPESIG ); } \
00100     ~CLASS() { INVALIDATE_TYPESIG( this, TYPESIG ); } \
00101     
00102 
00105 #if COMPILE_TYPESIGS
00106 #define SET_TYPESIG( OBJ, TYPESIG ) (OBJ)->typesig##TYPESIG = TYPESIG; ASSERT( TYPESIG <= TYPESIG_MAX );
00107 #else
00108 #define SET_TYPESIG( OBJ, TYPESIG )
00109 #endif
00110 
00112 #if COMPILE_TYPESIGS
00113 #define CHECK_TYPESIG( OBJ, TYPESIG ) ASSERT( (OBJ)->GetTypesig##TYPESIG() == TYPESIG )
00114 #else
00115 #define CHECK_TYPESIG( OBJ, TYPESIG )
00116 #endif
00117 
00119 #if COMPILE_TYPESIGS
00120 #define CHECK_TYPESIG_NULL_OK( OBJ, TYPESIG ) ASSERT( ((OBJ) == NULL) || ((OBJ)->GetTypesig##TYPESIG() == TYPESIG) )
00121 #else
00122 #define CHECK_TYPESIG_NULL_OK( OBJ, TYPESIG )
00123 #endif
00124 
00127 #if COMPILE_TYPESIGS
00128 #define INVALIDATE_TYPESIG( OBJ, TYPESIG ) ( CHECK_TYPESIG((OBJ),TYPESIG), ((OBJ)->typesig##TYPESIG = TYPESIG_INVALID) )
00129 #else
00130 #define INVALIDATE_TYPESIG( OBJ, TYPESIG )
00131 #endif
00132 
00134 #if COMPILE_TYPESIGS
00135 #define TYPESIG_OK( OBJ, TYPESIG ) ( ((OBJ) != NULL) && ((OBJ)->GetTypesig##TYPESIG() == TYPESIG) )
00136 #else
00137 #define TYPESIG_OK( OBJ, TYPESIG ) (true)
00138 #endif
00139 
00140 } // namespace base
00141 
00142 #endif // BASE_TYPESIG_HH
00143 #endif // DOXYGEN
Palomino 3D Engine documents generated by doxygen 1.5.3 on Fri Nov 23 11:26:07 2007