#pragma once #include #if !defined(OLD_DEBUG_LEVEL) #define OLD_DEBUG_LEVEL 1 #else #undef OLD_DEBUG_LEVEL #if DEBUG_LEVEL >= 3 #define OLD_DEBUG_LEVEL 3 #elif DEBUG_LEVEL == 1 #define OLD_DEBUG_LEVEL 1 #elif DEBUG_LEVEL == 0 #define OLD_DEBUG_LEVEL 0 #endif #endif #undef DEBUG_LEVEL #undef Verify #undef Verify_And_Dump #undef Dump #undef Tell #undef Warn #undef Warn_And_Dump #undef Check_Signature #undef Check_Pointer #undef Check #undef Check_Fpu #undef Fail #undef Cast_Object #undef DEBUG_CODE #undef Mem_Copy #undef Str_Copy #undef Str_Cat #undef Sqrt #undef Arctan #undef Arccos #undef Arcsin #define DEBUG_LEVEL 1 #define DEBUG_CODE(x) { x } #define Dump(v)\ (DEBUG_STREAM << __FILE__ "(" << __LINE__ << "): "#v" = " << (v) << endl << flush) #define Verify(c)\ if (!(c)) {\ Verify_Failed(#c,__FILE__,__LINE__);\ } #define Verify_And_Dump(c,v)\ if (!(c)) {\ DEBUG_STREAM << __FILE__ "(" << __LINE__ << "): "#v" = " << (v) << endl << std::flush;\ Verify_Failed(#c,__FILE__,__LINE__);\ } #define Warn(c)\ if (c) {\ DEBUG_STREAM << __FILE__"(" << __LINE__ << "): Warning -> "#c"\n" << flush;\ } #define Warn_And_Dump(c,v)\ if (c) {\ DEBUG_STREAM << __FILE__ "(" << __LINE__ << "): "#v" = " << (v) << endl << std::flush;\ DEBUG_STREAM << __FILE__"(" << __LINE__ << "): Warning -> "#c"\n" << flush;\ } #define Tell(m)\ (DEBUG_STREAM << m << flush) #define Check_Pointer(p) Verify(p) #define Check_Fpu() Verify(Fpu_Ok()) #define Mem_Copy(destination, source, length, available)\ {\ Check_Pointer(destination);\ Check_Pointer(source);\ memcpy(destination, source, length);\ } #define Str_Copy(destination, source, available)\ {\ Check_Pointer(destination);\ Check_Pointer(source);\ strcpy(destination, source);\ } #define Str_Cat(destination, source, available)\ {\ Check_Pointer(destination);\ Check_Pointer(source);\ strcat(destination, source);\ } #define Sqrt(value)\ ((value>=0.0f) ? sqrt(value) : (Fail("Bad parameter to sqrt"),0.0f)) #define Arctan(y,x)\ (\ (!Small_Enough(y) || !Small_Enough(x))\ ? atan2((y),(x)) :\ (Fail("Zero Arctan!"),0.0f)\ ) #define Arccos(x)\ (\ ((x)>=-1.0f && (x)<=1.0f)\ ? acos(x) :\ (Fail("Out of range Arccos!"),0.0f)\ ) #define Arcsin(x)\ (\ ((x)>=-1.0f && (x)<=1.0f)\ ? asin(x) :\ (Fail("Out of range Arcsin!"),0.0f)\ ) #define Power(x,y)\ (\ ((x)<0.0f)\ ? (Fail("Out of range Power!"),0.0f) :\ pow(x,y)\ ) #define Check_Signature(p) Check_Pointer(p) #define Check(p) Check_Pointer(p) #define Fail(m) Fail_To_Debugger(m,__FILE__,__LINE__) #define Cast_Object(type, ptr) ((type)(ptr))