00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef PPL_Limits_hh
00024 #define PPL_Limits_hh 1
00025
00026 #include <climits>
00027
00028
00029
00030
00031
00032
00033 #ifndef LLONG_MIN
00034 #if defined(LONG_LONG_MIN)
00035 #define LLONG_MIN LONG_LONG_MIN
00036 #elif SIZEOF_LONG_LONG == 8
00037 #define LLONG_MIN 0x8000000000000000LL
00038 #endif
00039 #endif
00040
00041 #ifndef LLONG_MAX
00042 #if defined(LONG_LONG_MAX)
00043 #define LLONG_MAX LONG_LONG_MAX
00044 #elif SIZEOF_LONG_LONG == 8
00045 #define LLONG_MAX 0x7fffffffffffffffLL
00046 #endif
00047 #endif
00048
00049 #ifndef ULLONG_MAX
00050 #if defined(ULONG_LONG_MAX)
00051 #define ULLONG_MAX ULONG_LONG_MAX
00052 #elif SIZEOF_UNSIGNED_LONG_LONG == 8
00053 #define ULLONG_MAX 0xffffffffffffffffULL
00054 #endif
00055 #endif
00056
00057 namespace Parma_Polyhedra_Library {
00058
00059
00060
00061
00062
00063
00064 template <typename T>
00065 struct Limits;
00066
00067 #define signed_limits(type, prefix) \
00068 template <> \
00069 struct Limits<type> { \
00070 static const type min = prefix ## _MIN; \
00071 static const type max = prefix ## _MAX; \
00072 }
00073
00074 #define unsigned_limits(type, prefix) \
00075 template <> \
00076 struct Limits<type> { \
00077 static const type min = 0; \
00078 static const type max = prefix ## _MAX; \
00079 }
00080
00081 signed_limits(signed char, SCHAR);
00082 signed_limits(short, SHRT);
00083 signed_limits(int, INT);
00084 signed_limits(long, LONG);
00085 signed_limits(long long, LLONG);
00086
00087 unsigned_limits(unsigned char, UCHAR);
00088 unsigned_limits(unsigned short, USHRT);
00089 unsigned_limits(unsigned int, UINT);
00090 unsigned_limits(unsigned long, ULONG);
00091 unsigned_limits(unsigned long long, ULLONG);
00092
00093 }
00094
00095 #endif // !defined(PPL_Limits_hh)