00001 namespace more {
00002 template<int N, int dummy = (N > sizeof(big_uint))>
00003 struct uint_with_size_ {
00004 typedef typename uint_with_size_<N+1>::eval eval;
00005 };
00006 template<int N>
00007 struct uint_with_size_<N, 1> { typedef big_uint eval; };
00008
00009 template<>
00010 struct uint_with_size_<sizeof(unsigned char)>
00011 { typedef unsigned char eval; };
00012 template<>
00013 struct uint_with_size_<sizeof(unsigned short)>
00014 { typedef unsigned short eval; };
00015 template<>
00016 struct uint_with_size_< sizeof(unsigned int),
00017 (sizeof(unsigned short)==sizeof(unsigned int)) >
00018 { typedef unsigned int eval; };
00019 template<>
00020 struct uint_with_size_< sizeof(unsigned long),
00021 (sizeof(unsigned int)==sizeof(unsigned long)) >
00022 { typedef unsigned long eval; };
00023 #ifndef CXX_HAVE_LONG_LONG
00024 template<>
00025 struct uint_with_size_< sizeof(unsigned long)+1 >
00026 { typedef unsigned long eval; };
00027 #else
00028 template<>
00029 struct uint_with_size_< sizeof(unsigned long long),
00030 (sizeof(unsigned long)==sizeof(unsigned long long)) >
00031 { typedef unsigned long long eval; };
00032 template<>
00033 struct uint_with_size_< sizeof(unsigned long long)+1 >
00034 { typedef unsigned long long eval; };
00035 #endif
00036
00037 typedef uint_with_size_<sizeof(float)>::eval float_prec_uint;
00038 typedef uint_with_size_<sizeof(double)>::eval double_prec_uint;
00039 typedef uint_with_size_<sizeof(long double)>::eval long_double_prec_uint;
00040 }