00001 #ifndef _FV_LIMITS_H_
00002 #define _FV_LIMITS_H_
00003
00004 #if _MSC_VER < 1600
00005
00006
00007 #if (defined(WIN32) && defined(_MSC_VER))
00008 #define FV_MISSING_LIMITS_HEADER_FILE
00009 #define FV_MISSING_STD_MIN_MAX
00010 #undef min
00011 #undef max
00012 #endif
00013
00014 #ifdef FV_MISSING_STD_MIN_MAX
00015 #undef min
00016 #undef max
00017
00018 namespace std {
00019
00020 template <class T> T min(T a,T b)
00021 { return( a < b ? a : b); };
00022
00023 template <class T> T max(T a,T b)
00024 { return( a > b ? a : b); };
00025 };
00026
00027 #endif //FV_MISSING_STD_MIN_MAX
00028
00029 #ifdef FV_MISSING_LIMITS_HEADER_FILE
00030
00031 #ifdef FV_MISSING_CFLOAT_HEADER_FILE
00032 #include <float.h>
00033 #else // #ifdef FV_MISSING_CFLOAT_HEADER_FILE
00034 #include <cfloat>
00035 #endif // #ifdef FV_MISSING_CFLOAT_HEADER_FILE
00036
00037 namespace std {
00038 template <class T>
00039 struct numeric_limits {};
00040
00041 template <>
00042 struct numeric_limits<float>
00043 {
00044 static double min() throw()
00045 { return FLT_MIN; }
00046
00047 static double max() throw()
00048 { return FLT_MAX;}
00049 };
00050
00051 template <>
00052 struct numeric_limits<double>
00053 {
00054 static double min() throw()
00055 { return FLT_MIN; }
00056
00057 static double max() throw()
00058 { return FLT_MAX;}
00059 };
00060 }
00061
00062 #else // #ifdef FV_MISSING_LIMITS_HEADER_FILE
00063
00064 #include <limits>
00065
00066 #endif // #ifdef FV_MISSING_LIMITS_HEADER_FILE
00067
00068 #endif
00069
00070 #endif
00071