Program Listing for File numeric_limits.hpp
↰ Return to documentation for file (include/ecl/type_traits/numeric_limits.hpp
)
/*****************************************************************************
** Ifdefs
*****************************************************************************/
#ifndef ECL_TYPE_TRAITS_NUMERIC_LIMITS_HPP_
#define ECL_TYPE_TRAITS_NUMERIC_LIMITS_HPP_
/*****************************************************************************
** Includes
*****************************************************************************/
#include <limits>
#include <climits>
#include <ecl/config/portable_types.hpp>
#include "macros.hpp"
/*****************************************************************************
** Namespaces
*****************************************************************************/
namespace ecl {
/*****************************************************************************
** Parent Template
*****************************************************************************/
template <typename T>
class ecl_type_traits_PUBLIC numeric_limits : public std::numeric_limits<T> {
public:
numeric_limits() {}
private:
};
/*****************************************************************************
** Specialisations
*****************************************************************************/
template <>
class ecl_type_traits_PUBLIC numeric_limits<char> : public std::numeric_limits<char> {
public:
static const char one = 1;
static const uint16 bits = ECL_SIZE_OF_CHAR*8;
static const uint16 bytes = ECL_SIZE_OF_CHAR;
static const char minimum = CHAR_MIN;
static const char maximum = CHAR_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<unsigned char> : public std::numeric_limits<unsigned char> {
public:
static const unsigned char one = 1U;
static const uint16 bits = ECL_SIZE_OF_CHAR*8;
static const uint16 bytes = ECL_SIZE_OF_CHAR;
static const unsigned char minimum = 0U;
static const unsigned char maximum = UCHAR_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<short> : public std::numeric_limits<short> {
public:
static const short one = 1;
static const uint16 bits = ECL_SIZE_OF_SHORT*8;
static const uint16 bytes = ECL_SIZE_OF_SHORT;
static const short minimum = SHRT_MIN;
static const short maximum = SHRT_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<unsigned short> : public std::numeric_limits<unsigned short> {
public:
static const unsigned short one = 1U;
static const uint16 bits = ECL_SIZE_OF_SHORT*8;
static const uint16 bytes = ECL_SIZE_OF_SHORT;
static const unsigned short minimum = 0U;
static const unsigned short maximum = USHRT_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<int> : public std::numeric_limits<int> {
public:
static const int one = 1;
static const uint16 bits = ECL_SIZE_OF_INT*8;
static const uint16 bytes = ECL_SIZE_OF_INT;
static const int minimum = INT_MIN;
static const int maximum = INT_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<unsigned int> : public std::numeric_limits<unsigned int> {
public:
static const unsigned int one = 1U;
static const uint16 bits = ECL_SIZE_OF_INT*8;
static const uint16 bytes = ECL_SIZE_OF_INT;
static const unsigned int minimum = 0U;
static const unsigned int maximum = UINT_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<long> : public std::numeric_limits<long> {
public:
static const long one = 1L;
static const uint16 bits = ECL_SIZE_OF_LONG*8;
static const uint16 bytes = ECL_SIZE_OF_LONG;
static const long minimum = LONG_MIN;
static const long maximum = LONG_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<unsigned long> : public std::numeric_limits<unsigned long> {
public:
static const unsigned long one = 1UL;
static const uint16 bits = ECL_SIZE_OF_LONG*8;
static const uint16 bytes = ECL_SIZE_OF_LONG;
static const unsigned long minimum = 0UL;
static const unsigned long maximum = ULONG_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<long long> : public std::numeric_limits<long long> {
public:
static const long long one = 1LL;
static const uint16 bits = ECL_SIZE_OF_LONG_LONG*8;
static const uint16 bytes = ECL_SIZE_OF_LONG_LONG;
static const long long minimum = LLONG_MIN;
static const long long maximum = LLONG_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<unsigned long long> : public std::numeric_limits<unsigned long long> {
public:
static const unsigned long long one = 1ULL;
static const uint16 bits = ECL_SIZE_OF_LONG_LONG*8;
static const uint16 bytes = ECL_SIZE_OF_LONG_LONG;
static const unsigned long long minimum = 0ULL;
static const unsigned long long maximum = ULLONG_MAX;
typedef float Precision;
static const Precision dummy_precision;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<float> : public std::numeric_limits<float> {
public:
static const uint16 bits = ECL_SIZE_OF_FLOAT*8;
static const uint16 bytes = ECL_SIZE_OF_FLOAT;
typedef float Precision;
static const float dummy_precision;
static const float minimum;
static const float maximum;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<double> : public std::numeric_limits<double> {
public:
static const uint16 bits = ECL_SIZE_OF_DOUBLE*8;
static const uint16 bytes = ECL_SIZE_OF_DOUBLE;
typedef double Precision;
static const double dummy_precision;
static const double minimum;
static const double maximum;
};
template <>
class ecl_type_traits_PUBLIC numeric_limits<long double> : public std::numeric_limits<long double> {
public:
static const uint16 bits = ECL_SIZE_OF_LONG_DOUBLE*8;
static const uint16 bytes = ECL_SIZE_OF_LONG_DOUBLE;
typedef long double Precision;
static const long double dummy_precision;
static const long double minimum;
static const long double maximum;
};
} // namespace ecl
#endif /* ECL_TYPE_TRAITS_NUMERIC_LIMITS_HPP_ */