31 #if defined(NumberTraits_RECURSES)
32 #error Recursive header files inclusion detected in NumberTraits.h
33 #else // defined(NumberTraits_RECURSES)
35 #define NumberTraits_RECURSES
37 #if !defined NumberTraits_h
39 #define NumberTraits_h
46 #include <boost/integer_traits.hpp>
47 #include <boost/call_traits.hpp>
48 #include "DGtal/base/Common.h"
84 typedef typename boost::call_traits<T>::param_type
ParamType;
94 static const T
ZERO = T(0);
100 #if (defined (WIN32))
103 static const T
ONE = T(1);
132 static unsigned int digits();
157 return static_cast<double>(aT);
191 typedef boost::call_traits<uint16_t>::param_type
ParamType;
204 return boost::integer_traits<uint16_t>::const_min;
208 return boost::integer_traits<uint16_t>::const_max;
212 return boost::integer_traits<uint16_t>::digits;
232 return static_cast<double>(aT);
240 return ( aT & 1 ) == 0;
248 return ( aT & 1 ) != 0;
266 typedef boost::call_traits<int16_t>::param_type
ParamType;
279 return boost::integer_traits<int16_t>::const_min;
283 return boost::integer_traits<int16_t>::const_max;
287 return boost::integer_traits<int16_t>::digits;
307 return static_cast<double>(aT);
315 return ( aT & 1 ) == 0;
323 return ( aT & 1 ) != 0;
341 typedef boost::call_traits<uint8_t>::param_type
ParamType;
354 return boost::integer_traits<uint8_t>::const_min;
358 return boost::integer_traits<uint8_t>::const_max;
362 return boost::integer_traits<uint8_t>::digits;
382 return static_cast<double>(aT);
390 return ( aT & 1 ) == 0;
398 return ( aT & 1 ) != 0;
416 typedef boost::call_traits<int8_t>::param_type
ParamType;
429 return boost::integer_traits<int8_t>::const_min;
433 return boost::integer_traits<int8_t>::const_max;
437 return boost::integer_traits<int8_t>::digits;
457 return static_cast<double>(aT);
465 return ( aT & 1 ) == 0;
473 return ( aT & 1 ) != 0;
490 typedef boost::call_traits<uint32_t>::param_type
ParamType;
503 return boost::integer_traits<uint32_t>::const_min;
507 return boost::integer_traits<uint32_t>::const_max;
511 return boost::integer_traits<uint32_t>::digits;
527 return static_cast<double>(aT);
535 return ( aT & 1 ) == 0;
543 return ( aT & 1 ) != 0;
560 typedef boost::call_traits<int32_t>::param_type
ParamType;
573 return boost::integer_traits<int32_t>::const_min;
577 return boost::integer_traits<int32_t>::const_max;
581 return boost::integer_traits<int32_t>::digits;
601 return static_cast<double>(aT);
609 return ( aT & 1 ) == 0;
617 return ( aT & 1 ) != 0;
634 typedef boost::call_traits<uint64_t>::param_type
ParamType;
647 return boost::integer_traits<uint64_t>::const_min;
651 return boost::integer_traits<uint64_t>::const_max;
655 return boost::integer_traits<uint64_t>::digits;
675 return static_cast<double>(aT);
683 return ( aT & 1 ) == 0;
691 return ( aT & 1 ) != 0;
708 typedef boost::call_traits<int64_t>::param_type
ParamType;
721 return boost::integer_traits<int64_t>::const_min;
725 return boost::integer_traits<int64_t>::const_max;
729 return boost::integer_traits<int64_t>::digits;
745 return static_cast<double>(aT);
753 return ( aT & 1 ) == 0;
761 return ( aT & 1 ) != 0;
778 typedef boost::call_traits<float>::param_type
ParamType;
811 return static_cast<int64_t>( aT );
815 return static_cast<double>(aT);
833 typedef boost::call_traits<double>::param_type
ParamType;
866 return static_cast<int64_t>( aT );
870 return static_cast<double>(aT);
888 typedef boost::call_traits<long double>::param_type
ParamType;
890 static const long double ONE;
921 return static_cast<int64_t>( aT );
925 return static_cast<double>(aT);
931 #ifdef WITH_BIGINTEGER
949 static const DGtal::BigInteger
ZERO;
950 static const DGtal::BigInteger
ONE;
961 ASSERT2(
false,
"UnBounded interger type does not support min() function");
966 ASSERT2(
false,
"UnBounded interger type does not support max() function");
970 static unsigned int digits()
972 ASSERT2(
false,
"UnBounded interger type does not support digits() function");
987 static double castToDouble(
const DGtal::BigInteger & aT)
997 return mpz_even_p( aT.get_mpz_t() );
1005 return mpz_odd_p( aT.get_mpz_t() );
1013 template<
class A,
class B>
1030 #include "DGtal/kernel/NumberTraits.ih"
1035 #endif // !defined NumberTraits_h
1037 #undef NumberTraits_RECURSES
1038 #endif // else defined(NumberTraits_RECURSES)