mirror of
https://github.com/boostorg/integer.git
synced 2025-06-27 21:10:57 +02:00
Compare commits
1 Commits
svn-branch
...
svn-branch
Author | SHA1 | Date | |
---|---|---|---|
7d9cf81cce |
@ -50,7 +50,6 @@ boostbook standalone
|
|||||||
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/regex/doc/html
|
<format>pdf:<xsl:param>boost.url.prefix=http://www.boost.org/doc/libs/release/libs/regex/doc/html
|
||||||
;
|
;
|
||||||
|
|
||||||
install pdfinstall : standalone/<format>pdf : <location>. <install-type>PDF ;
|
install pdf-install : standalone : <location>. <install-type>PDF ;
|
||||||
explicit pdfinstall ;
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,10 +41,7 @@
|
|||||||
// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.
|
// so we disable use of stdint.h when GLIBC does not define __GLIBC_HAVE_LONG_LONG.
|
||||||
// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990
|
// See https://svn.boost.org/trac/boost/ticket/3548 and http://sources.redhat.com/bugzilla/show_bug.cgi?id=10990
|
||||||
//
|
//
|
||||||
#if defined(BOOST_HAS_STDINT_H) \
|
#if defined(BOOST_HAS_STDINT_H) && (!defined(__GLIBC__) || defined(__GLIBC_HAVE_LONG_LONG))
|
||||||
&& (!defined(__GLIBC__) \
|
|
||||||
|| defined(__GLIBC_HAVE_LONG_LONG) \
|
|
||||||
|| (defined(__GLIBC__) && ((__GLIBC__ > 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ >= 17)))))
|
|
||||||
|
|
||||||
// The following #include is an implementation artifact; not part of interface.
|
// The following #include is an implementation artifact; not part of interface.
|
||||||
# ifdef __hpux
|
# ifdef __hpux
|
||||||
@ -361,40 +358,6 @@ namespace boost
|
|||||||
|
|
||||||
#endif // BOOST_HAS_STDINT_H
|
#endif // BOOST_HAS_STDINT_H
|
||||||
|
|
||||||
// intptr_t/uintptr_t are defined separately because they are optional and not universally available
|
|
||||||
#if defined(BOOST_WINDOWS) && !defined(_WIN32_WCE) && !defined(BOOST_HAS_STDINT_H)
|
|
||||||
// Older MSVC don't have stdint.h and have intptr_t/uintptr_t defined in stddef.h
|
|
||||||
#include <stddef.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// PGI seems to not support intptr_t/uintptr_t properly. BOOST_HAS_STDINT_H is not defined for this compiler by Boost.Config.
|
|
||||||
#if !defined(__PGIC__)
|
|
||||||
|
|
||||||
#if (defined(BOOST_WINDOWS) && !defined(_WIN32_WCE)) \
|
|
||||||
|| (defined(_XOPEN_UNIX) && (_XOPEN_UNIX+0 > 0) && !defined(__UCLIBC__)) \
|
|
||||||
|| defined(__CYGWIN__) \
|
|
||||||
|| defined(macintosh) || defined(__APPLE__) || defined(__APPLE_CC__) \
|
|
||||||
|| defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
|
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
using ::intptr_t;
|
|
||||||
using ::uintptr_t;
|
|
||||||
}
|
|
||||||
#define BOOST_HAS_INTPTR_T
|
|
||||||
|
|
||||||
// Clang pretends to be GCC, so it'll match this condition
|
|
||||||
#elif defined(__GNUC__) && defined(__INTPTR_TYPE__) && defined(__UINTPTR_TYPE__)
|
|
||||||
|
|
||||||
namespace boost {
|
|
||||||
typedef __INTPTR_TYPE__ intptr_t;
|
|
||||||
typedef __UINTPTR_TYPE__ uintptr_t;
|
|
||||||
}
|
|
||||||
#define BOOST_HAS_INTPTR_T
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif // !defined(__PGIC__)
|
|
||||||
|
|
||||||
#endif // BOOST_CSTDINT_HPP
|
#endif // BOOST_CSTDINT_HPP
|
||||||
|
|
||||||
|
|
||||||
|
@ -20,7 +20,6 @@
|
|||||||
#include <boost/integer_traits.hpp> // for boost::::boost::integer_traits
|
#include <boost/integer_traits.hpp> // for boost::::boost::integer_traits
|
||||||
#include <boost/limits.hpp> // for ::std::numeric_limits
|
#include <boost/limits.hpp> // for ::std::numeric_limits
|
||||||
#include <boost/cstdint.hpp> // for boost::int64_t and BOOST_NO_INTEGRAL_INT64_T
|
#include <boost/cstdint.hpp> // for boost::int64_t and BOOST_NO_INTEGRAL_INT64_T
|
||||||
#include <boost/static_assert.hpp>
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// We simply cannot include this header on gcc without getting copious warnings of the kind:
|
// We simply cannot include this header on gcc without getting copious warnings of the kind:
|
||||||
@ -52,7 +51,6 @@ namespace boost
|
|||||||
|
|
||||||
// convert category to type
|
// convert category to type
|
||||||
template< int Category > struct int_least_helper {}; // default is empty
|
template< int Category > struct int_least_helper {}; // default is empty
|
||||||
template< int Category > struct uint_least_helper {}; // default is empty
|
|
||||||
|
|
||||||
// specializatons: 1=long, 2=int, 3=short, 4=signed char,
|
// specializatons: 1=long, 2=int, 3=short, 4=signed char,
|
||||||
// 6=unsigned long, 7=unsigned int, 8=unsigned short, 9=unsigned char
|
// 6=unsigned long, 7=unsigned int, 8=unsigned short, 9=unsigned char
|
||||||
@ -67,14 +65,14 @@ namespace boost
|
|||||||
template<> struct int_least_helper<4> { typedef short least; };
|
template<> struct int_least_helper<4> { typedef short least; };
|
||||||
template<> struct int_least_helper<5> { typedef signed char least; };
|
template<> struct int_least_helper<5> { typedef signed char least; };
|
||||||
#ifdef BOOST_HAS_LONG_LONG
|
#ifdef BOOST_HAS_LONG_LONG
|
||||||
template<> struct uint_least_helper<1> { typedef boost::ulong_long_type least; };
|
template<> struct int_least_helper<6> { typedef boost::ulong_long_type least; };
|
||||||
#elif defined(BOOST_HAS_MS_INT64)
|
#elif defined(BOOST_HAS_MS_INT64)
|
||||||
template<> struct uint_least_helper<1> { typedef unsigned __int64 least; };
|
template<> struct int_least_helper<6> { typedef unsigned __int64 least; };
|
||||||
#endif
|
#endif
|
||||||
template<> struct uint_least_helper<2> { typedef unsigned long least; };
|
template<> struct int_least_helper<7> { typedef unsigned long least; };
|
||||||
template<> struct uint_least_helper<3> { typedef unsigned int least; };
|
template<> struct int_least_helper<8> { typedef unsigned int least; };
|
||||||
template<> struct uint_least_helper<4> { typedef unsigned short least; };
|
template<> struct int_least_helper<9> { typedef unsigned short least; };
|
||||||
template<> struct uint_least_helper<5> { typedef unsigned char least; };
|
template<> struct int_least_helper<10> { typedef unsigned char least; };
|
||||||
|
|
||||||
template <int Bits>
|
template <int Bits>
|
||||||
struct exact_signed_base_helper{};
|
struct exact_signed_base_helper{};
|
||||||
@ -113,12 +111,10 @@ namespace boost
|
|||||||
template< int Bits > // bits (including sign) required
|
template< int Bits > // bits (including sign) required
|
||||||
struct int_t : public detail::exact_signed_base_helper<Bits>
|
struct int_t : public detail::exact_signed_base_helper<Bits>
|
||||||
{
|
{
|
||||||
BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::intmax_t) * CHAR_BIT),
|
|
||||||
"No suitable signed integer type with the requested number of bits is available.");
|
|
||||||
typedef typename detail::int_least_helper
|
typedef typename detail::int_least_helper
|
||||||
<
|
<
|
||||||
#ifdef BOOST_HAS_LONG_LONG
|
#ifdef BOOST_HAS_LONG_LONG
|
||||||
(Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
|
(Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
|
||||||
#else
|
#else
|
||||||
1 +
|
1 +
|
||||||
#endif
|
#endif
|
||||||
@ -134,8 +130,6 @@ namespace boost
|
|||||||
template< int Bits > // bits required
|
template< int Bits > // bits required
|
||||||
struct uint_t : public detail::exact_unsigned_base_helper<Bits>
|
struct uint_t : public detail::exact_unsigned_base_helper<Bits>
|
||||||
{
|
{
|
||||||
BOOST_STATIC_ASSERT_MSG(Bits <= (int)(sizeof(boost::uintmax_t) * CHAR_BIT),
|
|
||||||
"No suitable unsigned integer type with the requested number of bits is available.");
|
|
||||||
#if (defined(__BORLANDC__) || defined(__CODEGEAR__)) && defined(BOOST_NO_INTEGRAL_INT64_T)
|
#if (defined(__BORLANDC__) || defined(__CODEGEAR__)) && defined(BOOST_NO_INTEGRAL_INT64_T)
|
||||||
// It's really not clear why this workaround should be needed... shrug I guess! JM
|
// It's really not clear why this workaround should be needed... shrug I guess! JM
|
||||||
BOOST_STATIC_CONSTANT(int, s =
|
BOOST_STATIC_CONSTANT(int, s =
|
||||||
@ -146,10 +140,11 @@ namespace boost
|
|||||||
(Bits <= ::std::numeric_limits<unsigned char>::digits));
|
(Bits <= ::std::numeric_limits<unsigned char>::digits));
|
||||||
typedef typename detail::int_least_helper< ::boost::uint_t<Bits>::s>::least least;
|
typedef typename detail::int_least_helper< ::boost::uint_t<Bits>::s>::least least;
|
||||||
#else
|
#else
|
||||||
typedef typename detail::uint_least_helper
|
typedef typename detail::int_least_helper
|
||||||
<
|
<
|
||||||
|
5 +
|
||||||
#ifdef BOOST_HAS_LONG_LONG
|
#ifdef BOOST_HAS_LONG_LONG
|
||||||
(Bits <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
|
(Bits-1 <= (int)(sizeof(boost::long_long_type) * CHAR_BIT)) +
|
||||||
#else
|
#else
|
||||||
1 +
|
1 +
|
||||||
#endif
|
#endif
|
||||||
@ -222,7 +217,7 @@ namespace boost
|
|||||||
// It's really not clear why this workaround should be needed... shrug I guess! JM
|
// It's really not clear why this workaround should be needed... shrug I guess! JM
|
||||||
#if defined(BOOST_NO_INTEGRAL_INT64_T)
|
#if defined(BOOST_NO_INTEGRAL_INT64_T)
|
||||||
BOOST_STATIC_CONSTANT(unsigned, which =
|
BOOST_STATIC_CONSTANT(unsigned, which =
|
||||||
1 +
|
6 +
|
||||||
(MaxValue <= ::boost::integer_traits<unsigned long>::const_max) +
|
(MaxValue <= ::boost::integer_traits<unsigned long>::const_max) +
|
||||||
(MaxValue <= ::boost::integer_traits<unsigned int>::const_max) +
|
(MaxValue <= ::boost::integer_traits<unsigned int>::const_max) +
|
||||||
(MaxValue <= ::boost::integer_traits<unsigned short>::const_max) +
|
(MaxValue <= ::boost::integer_traits<unsigned short>::const_max) +
|
||||||
@ -230,17 +225,18 @@ namespace boost
|
|||||||
typedef typename detail::int_least_helper< ::boost::uint_value_t<MaxValue>::which>::least least;
|
typedef typename detail::int_least_helper< ::boost::uint_value_t<MaxValue>::which>::least least;
|
||||||
#else // BOOST_NO_INTEGRAL_INT64_T
|
#else // BOOST_NO_INTEGRAL_INT64_T
|
||||||
BOOST_STATIC_CONSTANT(unsigned, which =
|
BOOST_STATIC_CONSTANT(unsigned, which =
|
||||||
1 +
|
5 +
|
||||||
(MaxValue <= ::boost::integer_traits<boost::ulong_long_type>::const_max) +
|
(MaxValue <= ::boost::integer_traits<boost::ulong_long_type>::const_max) +
|
||||||
(MaxValue <= ::boost::integer_traits<unsigned long>::const_max) +
|
(MaxValue <= ::boost::integer_traits<unsigned long>::const_max) +
|
||||||
(MaxValue <= ::boost::integer_traits<unsigned int>::const_max) +
|
(MaxValue <= ::boost::integer_traits<unsigned int>::const_max) +
|
||||||
(MaxValue <= ::boost::integer_traits<unsigned short>::const_max) +
|
(MaxValue <= ::boost::integer_traits<unsigned short>::const_max) +
|
||||||
(MaxValue <= ::boost::integer_traits<unsigned char>::const_max));
|
(MaxValue <= ::boost::integer_traits<unsigned char>::const_max));
|
||||||
typedef typename detail::uint_least_helper< ::boost::uint_value_t<MaxValue>::which>::least least;
|
typedef typename detail::int_least_helper< ::boost::uint_value_t<MaxValue>::which>::least least;
|
||||||
#endif // BOOST_NO_INTEGRAL_INT64_T
|
#endif // BOOST_NO_INTEGRAL_INT64_T
|
||||||
#else
|
#else
|
||||||
typedef typename detail::uint_least_helper
|
typedef typename detail::int_least_helper
|
||||||
<
|
<
|
||||||
|
5 +
|
||||||
#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)
|
#if !defined(BOOST_NO_INTEGRAL_INT64_T) && defined(BOOST_HAS_LONG_LONG)
|
||||||
(MaxValue <= ::boost::integer_traits<boost::ulong_long_type>::const_max) +
|
(MaxValue <= ::boost::integer_traits<boost::ulong_long_type>::const_max) +
|
||||||
#else
|
#else
|
||||||
|
@ -227,7 +227,7 @@ class integer_traits< ::boost::ulong_long_type>
|
|||||||
template<>
|
template<>
|
||||||
class integer_traits< ::boost::long_long_type>
|
class integer_traits< ::boost::long_long_type>
|
||||||
: public std::numeric_limits< ::boost::long_long_type>,
|
: public std::numeric_limits< ::boost::long_long_type>,
|
||||||
public detail::integer_traits_base< ::boost::long_long_type, (1LL << (sizeof(::boost::long_long_type) * CHAR_BIT - 1)), ~(1LL << (sizeof(::boost::long_long_type) * CHAR_BIT - 1))>
|
public detail::integer_traits_base< ::boost::long_long_type, (1LL << (sizeof(::boost::long_long_type) - 1)), ~(1LL << (sizeof(::boost::long_long_type) - 1))>
|
||||||
{ };
|
{ };
|
||||||
|
|
||||||
template<>
|
template<>
|
||||||
|
@ -22,10 +22,4 @@ test-suite integer
|
|||||||
[ compile static_log2_include_test.cpp ]
|
[ compile static_log2_include_test.cpp ]
|
||||||
[ compile static_min_max_include_test.cpp ]
|
[ compile static_min_max_include_test.cpp ]
|
||||||
[ compile integer_fwd_include_test.cpp ]
|
[ compile integer_fwd_include_test.cpp ]
|
||||||
[ compile-fail fail_int_exact.cpp ]
|
|
||||||
[ compile-fail fail_int_fast.cpp ]
|
|
||||||
[ compile-fail fail_int_least.cpp ]
|
|
||||||
[ compile-fail fail_uint_exact.cpp ]
|
|
||||||
[ compile-fail fail_uint_fast.cpp ]
|
|
||||||
[ compile-fail fail_uint_least.cpp ]
|
|
||||||
;
|
;
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
// Copyright John Maddock 2012.
|
|
||||||
// Distributed under the Boost
|
|
||||||
// Software License, Version 1.0. (See accompanying file
|
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/integer.hpp>
|
|
||||||
|
|
||||||
typedef boost::int_t<sizeof(boost::intmax_t)*CHAR_BIT + 1>::exact fail_int_exact;
|
|
@ -1,8 +0,0 @@
|
|||||||
// Copyright John Maddock 2012.
|
|
||||||
// Distributed under the Boost
|
|
||||||
// Software License, Version 1.0. (See accompanying file
|
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/integer.hpp>
|
|
||||||
|
|
||||||
typedef boost::int_t<sizeof(boost::intmax_t)*CHAR_BIT + 1>::fast fail_int_fast;
|
|
@ -1,8 +0,0 @@
|
|||||||
// Copyright John Maddock 2012.
|
|
||||||
// Distributed under the Boost
|
|
||||||
// Software License, Version 1.0. (See accompanying file
|
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/integer.hpp>
|
|
||||||
|
|
||||||
typedef boost::int_t<sizeof(boost::intmax_t)*CHAR_BIT + 1>::least fail_int_least;
|
|
@ -1,8 +0,0 @@
|
|||||||
// Copyright John Maddock 2012.
|
|
||||||
// Distributed under the Boost
|
|
||||||
// Software License, Version 1.0. (See accompanying file
|
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/integer.hpp>
|
|
||||||
|
|
||||||
typedef boost::uint_t<sizeof(boost::intmax_t)*CHAR_BIT + 1>::exact fail_uint_exact;
|
|
@ -1,8 +0,0 @@
|
|||||||
// Copyright John Maddock 2012.
|
|
||||||
// Distributed under the Boost
|
|
||||||
// Software License, Version 1.0. (See accompanying file
|
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/integer.hpp>
|
|
||||||
|
|
||||||
typedef boost::uint_t<sizeof(boost::intmax_t)*CHAR_BIT + 1>::fast fail_uint_fast;
|
|
@ -1,8 +0,0 @@
|
|||||||
// Copyright John Maddock 2012.
|
|
||||||
// Distributed under the Boost
|
|
||||||
// Software License, Version 1.0. (See accompanying file
|
|
||||||
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
|
||||||
|
|
||||||
#include <boost/integer.hpp>
|
|
||||||
|
|
||||||
typedef boost::uint_t<sizeof(boost::intmax_t)*CHAR_BIT + 1>::least fail_uint_least;
|
|
@ -152,7 +152,7 @@ void do_test_bits()
|
|||||||
if(boost::detail::test_errors() != last_error_count)
|
if(boost::detail::test_errors() != last_error_count)
|
||||||
{
|
{
|
||||||
last_error_count = boost::detail::test_errors();
|
last_error_count = boost::detail::test_errors();
|
||||||
std::cout << "Errors occurred while testing with bit count = " << Bits << std::endl;
|
std::cout << "Errors occured while testing with bit count = " << Bits << std::endl;
|
||||||
std::cout << "Type int_t<" << Bits << ">::least was " << get_name_of_type(least_int(0)) << std::endl;
|
std::cout << "Type int_t<" << Bits << ">::least was " << get_name_of_type(least_int(0)) << std::endl;
|
||||||
std::cout << "Type int_t<" << Bits << ">::fast was " << get_name_of_type(fast_int(0)) << std::endl;
|
std::cout << "Type int_t<" << Bits << ">::fast was " << get_name_of_type(fast_int(0)) << std::endl;
|
||||||
std::cout << "Type uint_t<" << Bits << ">::least was " << get_name_of_type(least_uint(0)) << std::endl;
|
std::cout << "Type uint_t<" << Bits << ">::least was " << get_name_of_type(least_uint(0)) << std::endl;
|
||||||
|
Reference in New Issue
Block a user