#ifndef GLTB_MATHFUNCTIONS_H #define GLTB_MATHFUNCTIONS_H #include namespace gltb { template extern inline T sgn(T a) { if(a<0) { return -1; } else if(a==0) { return 0; } else { return 1; } } template extern inline T saturate(T a) { if(a<0) { return 0; } else if(a>1) { return 1; } return a; } } // ugly workarounds for some WIN32 specific insanity: #ifdef WIN32 // Visual C++ may define min as a macro (bleagh!) #ifdef min #undef min #endif // Visual C++ may define max as a macro (bleagh!) #ifdef max #undef max #endif // no isnan and isinf in Visual C++ #define isnan _isnan #define isinf(x) (!_finite(x) && !isnan(x)) #endif // WIN32 #endif /*GLTB_MATHFUNCTIONS_H_*/