Compare commits

..

1 Commits

Author SHA1 Message Date
fcd3688fcd This commit was manufactured by cvs2svn to create branch
'python-v2-dev'.

[SVN r14785]
2002-08-12 13:35:54 +00:00
20 changed files with 353 additions and 611 deletions

View File

@ -2,14 +2,14 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0"> <meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document"> <meta name="ProgId" content="FrontPage.Editor.Document">
<title>Header boost/cstdint.hpp</title> <title>Header boost/cstdint.hpp</title>
</head> </head>
<body bgcolor="#FFFFFF" text="#000000"> <body bgcolor="#FFFFFF" text="#000000">
<h1><img src="../../boost.png" alt="boost.png (6897 bytes)" align="center" width="277" height="86">Header <h1><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="center" width="277" height="86">Header
boost/cstdint.hpp&nbsp;</h1> boost/cstdint.hpp&nbsp;</h1>
<p>The header <code><a href="../../boost/cstdint.hpp">&lt;boost/cstdint.hpp&gt;</a></code> <p>The header <code><a href="../../boost/cstdint.hpp">&lt;boost/cstdint.hpp&gt;</a></code>
provides the typedef's useful for provides the typedef's useful for
@ -69,13 +69,10 @@ representing any value of any signed integer type.</p>
capable of representing any value of any unsigned integer type.</p> capable of representing any value of any unsigned integer type.</p>
<p>These types are required.</p> <p>These types are required.</p>
<hr> <hr>
<p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan -->06 Nov 2007<!--webbot bot="Timestamp" endspan i-checksum="15272" --> <p>Revised <!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %b %Y" startspan -->19 Aug 2001<!--webbot bot="Timestamp" endspan i-checksum="14767" -->
</p> </p>
<p><EFBFBD> Copyright Beman Dawes 2000</p> <p>&nbsp;</p>
<p>Distributed under the Boost Software License, Version 1.0. See
<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
</body> </body>
</html> </html>

View File

@ -1,29 +1,26 @@
// boost cstdint.hpp test program ------------------------------------------// // boost cstdint.hpp test program ------------------------------------------//
// Copyright Beman Dawes 2000. Distributed under the Boost // (C) Copyright Beman Dawes 2000. Permission to copy, use, modify, sell
// Software License, Version 1.0. (See accompanying file // and distribute this software is granted provided this copyright
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // notice appears in all copies. This software is provided "as is" without
// express or implied warranty, and with no claim as to its suitability for
// any purpose.
// See http://www.boost.org for most recent version including documentation.
// See http://www.boost.org/libs/integer for documentation.
// Revision History // Revision History
// 11 Sep 01 Adapted to work with macros defined in native stdint.h (John Maddock) // 11 Sep 01 Adapted to work with macros defined in native stdint.h (John Maddock)
// 12 Nov 00 Adapted to merged <boost/cstdint.hpp> // 12 Nov 00 Adapted to merged <boost/cstdint.hpp>
// 23 Sep 00 Added INTXX_C constant macro support + int64_t support (John Maddock). // 23 Sep 00 Added INTXX_C constant macro support + int64_t support (John Maddock).
// 28 Jun 00 Initial version // 28 Jun 00 Initial version
#define __STDC_CONSTANT_MACROS
#include <cassert> #include <cassert>
#include <iostream> #include <iostream>
#define __STDC_CONSTANT_MACROS
#include <boost/cstdint.hpp> #include <boost/cstdint.hpp>
#ifdef NDEBUG #ifdef NDEBUG
int main() #error This test makes no sense with NDEBUG defined
{ #endif
std::cout << "This test makes no sense with NDEBUG defined.\n";
return 0;
}
#else
#ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION #ifndef BOOST_NO_INCLASS_MEMBER_INITIALIZATION
// //
@ -113,24 +110,10 @@ void integral_constant_type_check(T1, T2)
assert(sizeof(T1) == sizeof(T2)); assert(sizeof(T1) == sizeof(T2));
assert(t1 == t2); assert(t1 == t2);
#endif #endif
#if defined(BOOST_HAS_STDINT_H)
// native headers are permitted to promote small
// unsigned types to type int:
if(sizeof(T1) >= sizeof(int))
{
if(t1 > 0)
assert(t2 > 0);
else
assert(!(t2 > 0));
}
else if(t1 < 0)
assert(!(t2 > 0));
#else
if(t1 > 0) if(t1 > 0)
assert(t2 > 0); assert(t2 > 0);
else else
assert(!(t2 > 0)); assert(!(t2 > 0));
#endif
} }
@ -230,4 +213,5 @@ int main()
std::cout << "OK\n"; std::cout << "OK\n";
return 0; return 0;
} }
#endif

View File

@ -5,7 +5,7 @@
</head> </head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red"> <body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" <h1><img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)"
align="middle" width="277" height="86">Integer Bit Mask Templates</h1> align="middle" width="277" height="86">Integer Bit Mask Templates</h1>
<p>The class templates in <cite><a href="../../../boost/integer/integer_mask.hpp">&lt;boost/integer/integer_mask.hpp&gt;</a></cite> provide bit masks for a certain bit position or a contiguous-bit pack of a certain size. The types of the masking constants come from the <a href="../integer.htm">integer type selection templates</a> header.</p> <p>The class templates in <cite><a href="../../../boost/integer/integer_mask.hpp">&lt;boost/integer/integer_mask.hpp&gt;</a></cite> provide bit masks for a certain bit position or a contiguous-bit pack of a certain size. The types of the masking constants come from the <a href="../integer.htm">integer type selection templates</a> header.</p>
@ -196,15 +196,16 @@ contaimination of values by the higher, unused bits.</p>
<h2><a name="credits">Credits</a></h2> <h2><a name="credits">Credits</a></h2>
<p>The author of the Boost bit mask class templates is <a <p>The author of the Boost bit mask class templates is <a
href="http://www.boost.org/people/daryle_walker.html">Daryle Walker</a>.</p> href="../../../people/daryle_walker.html">Daryle Walker</a>.</p>
<hr> <hr>
<p>Revised September 23, 2001</p> <p>Revised September 23, 2001</p>
<p>&copy; Copyright Daryle Walker 2001. Use, modification, and distribution are <p>&copy; Copyright Daryle Walker 2001. Permission to copy, use,
subject to the Boost Software License, Version 1.0. (See accompanying file <a modify, sell and distribute this document is granted provided this
href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or a copy at &lt;<a copyright notice appears in all copies. This document is provided
href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>&gt;.)</p> &quot;as is&quot; without express or implied warranty, and with no claim
as to its suitability for any purpose.</p>
</body> </body>
</html> </html>

View File

@ -1,125 +1,73 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html> <html>
<head> <head>
<title>Binary Logarithm Template</title> <title>Binary Logarithm Template</title>
</head> </head>
<body bgcolor="white" text="black"> <body bgcolor="white" text="black">
<h1><img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)"
<h1><img src="../../../boost.png" alt="boost.png (6897 bytes)"
align="middle" width="277" height="86">Binary Logarithm Template</h1> align="middle" width="277" height="86">Binary Logarithm Template</h1>
<p>The class template in <cite><a href="../../../boost/integer/static_log2.hpp">&lt;boost/integer/static_log2.hpp&gt;</a></cite> determines the position of the highest bit in a given value. This facility is useful for solving generic programming problems.</p> <p>The class template in <cite><a href="../../../boost/integer/static_log2.hpp">&lt;boost/integer/static_log2.hpp&gt;</a></cite> determines the position of the highest bit in a given value. This facility is useful for solving generic programming problems.</p>
<h2><a name="contents">Contents</a></h2> <h2><a name="contents">Contents</a></h2>
<ul> <ul>
<li><a href="#contents">Contents</a></li> <li><a href="#contents">Contents</a></li>
<li><a href="#synopsis">Synopsis</a></li> <li><a href="#synopsis">Synopsis</a></li>
<li><a href="#usage">Usage</a></li> <li><a href="#usage">Usage</a></li>
<li><a href="#example">Example</a></li> <li><a href="#example">Example</a></li>
<li><a href="#demo">Demonstration Program</a></li> <li><a href="#demo">Demonstration Program</a></li>
<li><a href="#rationale">Rationale</a></li> <li><a href="#rationale">Rationale</a></li>
<li><a href="#credits">Credits</a></li> <li><a href="#credits">Credits</a></li>
<li><a href="#whatsnew"><b>What's new</b></a></li>
</ul> </ul>
<h2><a name="synopsis">Synopsis</a></h2> <h2><a name="synopsis">Synopsis</a></h2>
<blockquote><pre> <blockquote><pre>
namespace boost namespace boost
{ {
typedef <em>implementation-defined</em> static_log2_argument_type; template &lt; unsigned long Value &gt;
typedef <em>implementation-defined</em> static_log2_result_type; struct static_log2
{
static const int value = <em>implementation_defined</em>;
};
template &lt; static_log2_argument_type arg &gt; template &lt; &gt;
struct static_log2 struct static_log2&lt; 0ul &gt;
{ {
static const static_log2_result_type value = <em>implementation-defined</em>;
};
template &lt; &gt;
struct static_log2&lt; 0 &gt;
{
// The logarithm of zero is undefined. // The logarithm of zero is undefined.
}; };
} // namespace boost } // namespace boost
</pre></blockquote> </pre></blockquote>
<h2><a name="usage">Usage</a></h2> <h2><a name="usage">Usage</a></h2>
<p>The <code>boost::static_log2</code> class template takes one template <p>The <code>boost::static_log2</code> class template takes one template
parameter, a value of type <code>static_log2_argument_type</code>. The template parameter, a value of type <code>unsigned long</code>. The template
only defines one member, <code>value</code>, which gives the truncated only defines one member, <code>value</code>, that returns the truncated
base-two logarithm of the template argument.</p> base-two logarithm of the template parameter.</p>
<p>Since the logarithm of zero, for any base, is undefined, there is a <p>Since the logarithm of zero, for any base, is undefined, there is a
specialization of <code>static_log2</code> for a template argument specialization of <code>static_log2</code> for a template parameter
of zero. This specialization has no members, so an attempt to use of zero. This specialization has no members, so an attempt to use
the base-two logarithm of zero results in a compile-time error.</p> the base-two logarithm of zero results in a compile-time error.</p>
<p>Note: <ul>
<li><code>static_log2_argument_type</code> is an <i>unsigned integer
type</i> (C++ standard, 3.9.1p3).</li>
<li><code>static_log2_result_type</code> is an <i>integer type</i>
(C++ standard, 3.9.1p7).</li>
</ul>
<h2><a name="example">Example</a></h2> <h2><a name="example">Example</a></h2>
<blockquote><pre> <blockquote><pre>
#include &lt;boost/integer/static_log2.hpp&gt;
#include "boost/integer/static_log2.hpp" template &lt; unsigned long Value &gt;
template &lt; boost::static_log2_argument_type value &gt;
bool is_it_what() bool is_it_what()
{ {
typedef boost::static_log2&lt;value&gt; lb_type; typedef boost::static_log2&lt;Value&gt; lb_type;
int temp = lb_type::value; int temp = lb_type::value;
//... //...
return (temp % 2) != 0; return (temp % 2) != 0;
} }
@ -129,87 +77,47 @@ int main()
{ {
bool temp = is_it_what&lt;2000&gt;(); bool temp = is_it_what&lt;2000&gt;();
//... //...
# if 0
#if 0
temp = is_it_what&lt;0&gt;(); // would give an error temp = is_it_what&lt;0&gt;(); // would give an error
# endif #endif
//... //...
temp = is_it_what&lt;24&gt;(); temp = is_it_what&lt;24&gt;();
//... //...
} }
</pre></blockquote> </pre></blockquote>
<h2><a name="demo">Demonstration Program</a></h2> <h2><a name="demo">Demonstration Program</a></h2>
<p>The program <a href="../test/static_log2_test.cpp">static_log2_test.cpp</a> <p>The program <a href="../test/static_log2_test.cpp">static_log2_test.cpp</a>
is a simplistic demonstration of the results from instantiating various is a simplistic demonstration of the results from instantiating various
examples of the binary logarithm class template.</p> examples of the binary logarithm class template.</p>
<h2><a name="rationale">Rationale</a></h2> <h2><a name="rationale">Rationale</a></h2>
<p>The base-two (binary) logarithm, abbreviated <dfn>lb</dfn>, function <p>The base-two (binary) logarithm, abbreviated <dfn>lb</dfn>, function
is occasionally used to give order-estimates of computer algorithms. is occasionally used to give order-estimates of computer algorithms.
The truncated logarithm can be considered the highest power-of-two in a The truncated logarithm can be considered the highest power-of-two in a
value, which corresponds to the value's highest set bit (for binary value, which corresponds to the value's highest set bit (for binary
integers). Sometimes the highest-bit position could be used in generic integers). Sometimes the highest-bit position could be used in generic
programming, which requires the position to be statically (<i>i.e.</i> programming, which requires the position to be statically (<i>i.e.</i>
at compile-time) available.</p> at compile-time) available.</p>
<h2><a name="whatsnew">Changes from previous versions:</a></h2>
<ul>
<li><i>New in version 1.32.0:</i><br><br>
The argument type and the result type of <code>boost::static_log2</code>
are now typedef'd. Formerly, they were hardcoded as <code>unsigned long</code>
and <code>int</code> respectively. Please, use the provided typedefs in new
code (and update old code as soon as possible).
</li>
</ul>
<h2><a name="credits">Credits</a></h2> <h2><a name="credits">Credits</a></h2>
<p>The author of the Boost binary logarithm class template is <a
href="../../../people/daryle_walker.html">Daryle Walker</a>. Giovanni Bajo
<p>The original version of the Boost binary logarithm class template was added support for compilers without partial template specialization.</p>
written by <a href="http://www.boost.org/people/daryle_walker.html">Daryle Walker</a>
and then enhanced by Giovanni Bajo with support for compilers without
partial template specialization. The current version was suggested,
together with a reference implementation, by Vesa Karvonen. Gennaro Prota
wrote the actual source file.
</p>
<hr> <hr>
<p>Revised May 14, 2002</p>
<p>&copy; Copyright Daryle Walker 2001. Permission to copy, use,
<p>Revised July 19, 2004</p> modify, sell and distribute this document is granted provided this
copyright notice appears in all copies. This document is provided
<p>&copy; Copyright Daryle Walker 2001.<br> &quot;as is&quot; without express or implied warranty, and with no claim
&copy; Copyright Gennaro Prota 2004.</p> as to its suitability for any purpose.</p>
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at
<a href="http://www.boost.org/LICENSE_1_0.txt">
http://www.boost.org/LICENSE_1_0.txt</a>)
<br>
</body> </body>
</html> </html>

View File

@ -5,7 +5,7 @@
</head> </head>
<body bgcolor="white" text="black" link="blue" alink="red" vlink="purple"> <body bgcolor="white" text="black" link="blue" alink="red" vlink="purple">
<h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" <h1><img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)"
align="middle" width="277" height="86">Compile-Time Extrema align="middle" width="277" height="86">Compile-Time Extrema
Templates</h1> Templates</h1>
@ -106,15 +106,16 @@ class template.</p>
<h2><a name="credits">Credits</a></h2> <h2><a name="credits">Credits</a></h2>
<p>The author of the Boost compile-time extrema class templates is <a <p>The author of the Boost compile-time extrema class templates is <a
href="http://www.boost.org/people/daryle_walker.html">Daryle Walker</a>.</p> href="../../../people/daryle_walker.html">Daryle Walker</a>.</p>
<hr> <hr>
<p>Revised October 12, 2001</p> <p>Revised October 12, 2001</p>
<p>&copy; Copyright Daryle Walker 2001. Use, modification, and distribution are <p>&copy; Copyright Daryle Walker 2001. Permission to copy, use,
subject to the Boost Software License, Version 1.0. (See accompanying file <a modify, sell and distribute this document is granted provided this
href="../../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or a copy at &lt;<a copyright notice appears in all copies. This document is provided
href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>&gt;.)</p> &quot;as is&quot; without express or implied warranty, and with no claim
as to its suitability for any purpose.</p>
</body> </body>
</html> </html>

View File

@ -1,13 +1,12 @@
// boost cstdint.hpp header file ------------------------------------------// // boost cstdint.hpp header file ------------------------------------------//
// (C) Copyright Beman Dawes 1999. // (C) Copyright boost.org 1999. Permission to copy, use, modify, sell
// (C) Copyright Jens Mauer 2001 // and distribute this software is granted provided this copyright
// (C) Copyright John Maddock 2001 // notice appears in all copies. This software is provided "as is" without
// Distributed under the Boost // express or implied warranty, and with no claim as to its suitability for
// Software License, Version 1.0. (See accompanying file // any purpose.
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// See http://www.boost.org/libs/integer for documentation. // See http://www.boost.org for most recent version including documentation.
// Revision History // Revision History
// 31 Oct 01 use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.) // 31 Oct 01 use BOOST_HAS_LONG_LONG to check for "long long" (Jens M.)
@ -36,52 +35,12 @@
// this is triggered with GCC, because it defines __cplusplus < 199707L // this is triggered with GCC, because it defines __cplusplus < 199707L
# define BOOST_NO_INT64_T # define BOOST_NO_INT64_T
# endif # endif
# elif defined(__FreeBSD__) || defined(__IBMCPP__) # elif defined(__FreeBSD__)
# include <inttypes.h> # include <inttypes.h>
# else # else
# include <stdint.h> # include <stdint.h>
// There is a bug in Cygwin two _C macros
# if defined(__STDC_CONSTANT_MACROS) && defined(__CYGWIN__)
# undef INTMAX_C
# undef UINTMAX_C
# define INTMAX_C(c) c##LL
# define UINTMAX_C(c) c##ULL
# endif
# endif # endif
#ifdef __QNX__
// QNX (Dinkumware stdlib) defines these as non-standard names.
// Reflect to the standard names.
typedef ::intleast8_t int_least8_t;
typedef ::intfast8_t int_fast8_t;
typedef ::uintleast8_t uint_least8_t;
typedef ::uintfast8_t uint_fast8_t;
typedef ::intleast16_t int_least16_t;
typedef ::intfast16_t int_fast16_t;
typedef ::uintleast16_t uint_least16_t;
typedef ::uintfast16_t uint_fast16_t;
typedef ::intleast32_t int_least32_t;
typedef ::intfast32_t int_fast32_t;
typedef ::uintleast32_t uint_least32_t;
typedef ::uintfast32_t uint_fast32_t;
# ifndef BOOST_NO_INT64_T
typedef ::intleast64_t int_least64_t;
typedef ::intfast64_t int_fast64_t;
typedef ::uintleast64_t uint_least64_t;
typedef ::uintfast64_t uint_fast64_t;
# endif
#endif
namespace boost namespace boost
{ {
@ -122,8 +81,8 @@ namespace boost
} // namespace boost } // namespace boost
#elif defined(__FreeBSD__) && (__FreeBSD__ <= 4) || defined(__osf__) #elif defined(__FreeBSD__) && (__FreeBSD__ <= 4)
// FreeBSD and Tru64 have an <inttypes.h> that contains much of what we need. // FreeBSD has an <inttypes.h> that contains much of what we need
# include <inttypes.h> # include <inttypes.h>
namespace boost { namespace boost {
@ -172,8 +131,7 @@ namespace boost {
#else // BOOST_HAS_STDINT_H #else // BOOST_HAS_STDINT_H
# include <boost/limits.hpp> // implementation artifact; not part of interface # include <limits.h> // implementation artifact; not part of interface
# include <limits.h> // needed for limits macros
namespace boost namespace boost
@ -203,29 +161,12 @@ namespace boost
// 16-bit types -----------------------------------------------------------// // 16-bit types -----------------------------------------------------------//
# if USHRT_MAX == 0xffff # if USHRT_MAX == 0xffff
# if defined(__crayx1)
// The Cray X1 has a 16-bit short, however it is not recommend
// for use in performance critical code.
typedef short int16_t;
typedef short int_least16_t;
typedef int int_fast16_t;
typedef unsigned short uint16_t;
typedef unsigned short uint_least16_t;
typedef unsigned int uint_fast16_t;
# else
typedef short int16_t; typedef short int16_t;
typedef short int_least16_t; typedef short int_least16_t;
typedef short int_fast16_t; typedef short int_fast16_t;
typedef unsigned short uint16_t; typedef unsigned short uint16_t;
typedef unsigned short uint_least16_t; typedef unsigned short uint_least16_t;
typedef unsigned short uint_fast16_t; typedef unsigned short uint_fast16_t;
# endif
# elif (USHRT_MAX == 0xffffffff) && defined(CRAY)
// no 16-bit types on Cray:
typedef short int_least16_t;
typedef short int_fast16_t;
typedef unsigned short uint_least16_t;
typedef unsigned short uint_fast16_t;
# else # else
# error defaults not correct; you must hand modify boost/cstdint.hpp # error defaults not correct; you must hand modify boost/cstdint.hpp
# endif # endif
@ -264,14 +205,14 @@ namespace boost
# error defaults not correct; you must hand modify boost/cstdint.hpp # error defaults not correct; you must hand modify boost/cstdint.hpp
# endif # endif
typedef ::boost::long_long_type intmax_t; typedef long long intmax_t;
typedef ::boost::ulong_long_type uintmax_t; typedef unsigned long long uintmax_t;
typedef ::boost::long_long_type int64_t; typedef long long int64_t;
typedef ::boost::long_long_type int_least64_t; typedef long long int_least64_t;
typedef ::boost::long_long_type int_fast64_t; typedef long long int_fast64_t;
typedef ::boost::ulong_long_type uint64_t; typedef unsigned long long uint64_t;
typedef ::boost::ulong_long_type uint_least64_t; typedef unsigned long long uint_least64_t;
typedef ::boost::ulong_long_type uint_fast64_t; typedef unsigned long long uint_fast64_t;
# elif ULONG_MAX != 0xffffffff # elif ULONG_MAX != 0xffffffff
@ -287,15 +228,6 @@ namespace boost
# else # else
# error defaults not correct; you must hand modify boost/cstdint.hpp # error defaults not correct; you must hand modify boost/cstdint.hpp
# endif # endif
# elif defined(__GNUC__) && defined(BOOST_HAS_LONG_LONG)
__extension__ typedef long long intmax_t;
__extension__ typedef unsigned long long uintmax_t;
__extension__ typedef long long int64_t;
__extension__ typedef long long int_least64_t;
__extension__ typedef long long int_fast64_t;
__extension__ typedef unsigned long long uint64_t;
__extension__ typedef unsigned long long uint_least64_t;
__extension__ typedef unsigned long long uint_fast64_t;
# elif defined(BOOST_HAS_MS_INT64) # elif defined(BOOST_HAS_MS_INT64)
// //
// we have Borland/Intel/Microsoft __int64: // we have Borland/Intel/Microsoft __int64:
@ -442,5 +374,3 @@ BOOST_HAS_STDINT_H is defined (John Maddock).
#endif // __STDC_CONSTANT_MACROS_DEFINED etc. #endif // __STDC_CONSTANT_MACROS_DEFINED etc.

View File

@ -1,10 +1,12 @@
// boost integer.hpp header file -------------------------------------------// // boost integer.hpp header file -------------------------------------------//
// Copyright Beman Dawes and Daryle Walker 1999. Distributed under the Boost // (C) Copyright Beman Dawes 1999. Permission to copy, use, modify, sell
// Software License, Version 1.0. (See accompanying file // and distribute this software is granted provided this copyright
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // notice appears in all copies. This software is provided "as is" without
// express or implied warranty, and with no claim as to its suitability for
// any purpose.
// See http://www.boost.org/libs/integer for documentation. // See http://www.boost.org for most recent version including documentation.
// Revision History // Revision History
// 22 Sep 01 Added value-based integer templates. (Daryle Walker) // 22 Sep 01 Added value-based integer templates. (Daryle Walker)
@ -34,7 +36,7 @@ namespace boost
template< int Category > struct int_least_helper {}; // default is empty template< int Category > struct int_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 long
// no specializations for 0 and 5: requests for a type > long are in error // no specializations for 0 and 5: requests for a type > long are in error
template<> struct int_least_helper<1> { typedef long least; }; template<> struct int_least_helper<1> { typedef long least; };
template<> struct int_least_helper<2> { typedef int least; }; template<> struct int_least_helper<2> { typedef int least; };

View File

@ -1,9 +1,9 @@
// Boost integer/integer_mask.hpp header file ------------------------------// // Boost integer/integer_mask.hpp header file ------------------------------//
// (C) Copyright Daryle Walker 2001. // (C) Copyright Daryle Walker 2001. Permission to copy, use, modify, sell and
// Distributed under the Boost Software License, Version 1.0. (See // distribute this software is granted provided this copyright notice appears
// accompanying file LICENSE_1_0.txt or copy at // in all copies. This software is provided "as is" without express or
// http://www.boost.org/LICENSE_1_0.txt) // implied warranty, and with no claim as to its suitability for any purpose.
// See http://www.boost.org for updates, documentation, and revision history. // See http://www.boost.org for updates, documentation, and revision history.

View File

@ -1,132 +1,141 @@
// -------------- Boost static_log2.hpp header file ----------------------- // // Boost integer/static_log2.hpp header file -------------------------------//
//
// Copyright (C) 2001 Daryle Walker.
// Copyright (C) 2003 Vesa Karvonen.
// Copyright (C) 2003 Gennaro Prota.
//
// 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)
//
// ---------------------------------------------------
// See http://www.boost.org/libs/integer for documentation.
// ------------------------------------------------------------------------- //
// (C) Copyright Daryle Walker 2001. Permission to copy, use, modify, sell and
// distribute this software is granted provided this copyright notice appears
// in all copies. This software is provided "as is" without express or
// implied warranty, and with no claim as to its suitability for any purpose.
// See http://www.boost.org for updates, documentation, and revision history.
#ifndef BOOST_INTEGER_STATIC_LOG2_HPP #ifndef BOOST_INTEGER_STATIC_LOG2_HPP
#define BOOST_INTEGER_STATIC_LOG2_HPP #define BOOST_INTEGER_STATIC_LOG2_HPP
#include "boost/config.hpp" // for BOOST_STATIC_CONSTANT #include <boost/integer_fwd.hpp> // self include
namespace boost { #include <boost/config.hpp> // for BOOST_STATIC_CONSTANT, etc.
#include <boost/limits.hpp> // for std::numeric_limits
namespace detail { #ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
#include <boost/pending/ct_if.hpp> // for boost::ct_if<>
namespace static_log2_impl { #endif
// choose_initial_n<>
//
// Recursively doubles its integer argument, until it
// becomes >= of the "width" (C99, 6.2.6.2p4) of
// static_log2_argument_type.
//
// Used to get the maximum power of two less then the width.
//
// Example: if on your platform argument_type has 48 value
// bits it yields n=32.
//
// It's easy to prove that, starting from such a value
// of n, the core algorithm works correctly for any width
// of static_log2_argument_type and that recursion always
// terminates with x = 1 and n = 0 (see the algorithm's
// invariant).
typedef unsigned long argument_type;
typedef int result_type;
template <result_type n> namespace boost
struct choose_initial_n { {
enum { c = (argument_type(1) << n << n) != 0 };
BOOST_STATIC_CONSTANT(
result_type,
value = !c*n + choose_initial_n<2*c*n>::value
);
};
template <>
struct choose_initial_n<0> {
BOOST_STATIC_CONSTANT(result_type, value = 0);
};
// Implementation details --------------------------------------------------//
// start computing from n_zero - must be a power of two namespace detail
const result_type n_zero = 16; {
const result_type initial_n = choose_initial_n<n_zero>::value;
// static_log2_impl<> // Forward declarations
// template < unsigned long Val, int Place = 0, int Index
// * Invariant: = std::numeric_limits<unsigned long>::digits >
// 2n struct static_log2_helper_t;
// 1 <= x && x < 2 at the start of each recursion
// (see also choose_initial_n<>)
//
// * Type requirements:
//
// argument_type maybe any unsigned type with at least n_zero + 1
// value bits. (Note: If larger types will be standardized -e.g.
// unsigned long long- then the argument_type typedef can be
// changed without affecting the rest of the code.)
//
template <argument_type x, result_type n = initial_n> #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
struct static_log2_impl {
enum { c = (x >> n) > 0 }; // x >= 2**n ? template < unsigned long Val, int Place >
BOOST_STATIC_CONSTANT( struct static_log2_helper_t< Val, Place, 1 >;
result_type,
value = c*n + (static_log2_impl< (x>>c*n), n/2 >::value)
);
}; #else
template <> template < int Place >
struct static_log2_impl<1, 0> { struct static_log2_helper_final_step;
BOOST_STATIC_CONSTANT(result_type, value = 0);
};
} template < unsigned long Val, int Place = 0, int Index
} // detail = std::numeric_limits<unsigned long>::digits >
struct static_log2_helper_nopts_t;
#endif
// Recursively build the logarithm by examining the upper bits
template < unsigned long Val, int Place, int Index >
struct static_log2_helper_t
{
private:
BOOST_STATIC_CONSTANT( int, half_place = Index / 2 );
BOOST_STATIC_CONSTANT( unsigned long, lower_mask = (1ul << half_place)
- 1ul );
BOOST_STATIC_CONSTANT( unsigned long, upper_mask = ~lower_mask );
BOOST_STATIC_CONSTANT( bool, do_shift = (Val & upper_mask) != 0ul );
BOOST_STATIC_CONSTANT( unsigned long, new_val = do_shift ? (Val
>> half_place) : Val );
BOOST_STATIC_CONSTANT( int, new_place = do_shift ? (Place + half_place)
: Place );
BOOST_STATIC_CONSTANT( int, new_index = Index - half_place );
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
typedef static_log2_helper_t<new_val, new_place, new_index> next_step_type;
#else
typedef static_log2_helper_nopts_t<new_val, new_place, new_index> next_step_type;
#endif
public:
BOOST_STATIC_CONSTANT( int, value = next_step_type::value );
}; // boost::detail::static_log2_helper_t
// Non-recursive case
#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template < unsigned long Val, int Place >
struct static_log2_helper_t< Val, Place, 1 >
{
public:
BOOST_STATIC_CONSTANT( int, value = Place );
}; // boost::detail::static_log2_helper_t
#else
template < int Place >
struct static_log2_helper_final_step
{
public:
BOOST_STATIC_CONSTANT( int, value = Place );
}; // boost::detail::static_log2_helper_final_step
template < unsigned long Val, int Place, int Index >
struct static_log2_helper_nopts_t
{
private:
typedef static_log2_helper_t<Val, Place, Index> recursive_step_type;
typedef static_log2_helper_final_step<Place> final_step_type;
typedef typename ct_if<( Index != 1 ), recursive_step_type,
final_step_type>::type next_step_type;
public:
BOOST_STATIC_CONSTANT( int, value = next_step_type::value );
}; // boost::detail::static_log2_helper_nopts_t
#endif
} // namespace detail
// Compile-time log-base-2 evaluator class declaration ---------------------//
// -------------------------------------- template < unsigned long Value >
// static_log2<x> struct static_log2
// ---------------------------------------- {
BOOST_STATIC_CONSTANT( int, value
= detail::static_log2_helper_t<Value>::value );
};
typedef detail::static_log2_impl::argument_type static_log2_argument_type; template < >
typedef detail::static_log2_impl::result_type static_log2_result_type; struct static_log2< 0ul >
{
// The logarithm of zero is undefined.
};
template <static_log2_argument_type x> } // namespace boost
struct static_log2 {
BOOST_STATIC_CONSTANT(
static_log2_result_type,
value = detail::static_log2_impl::static_log2_impl<x>::value
);
};
template <> #endif // BOOST_INTEGER_STATIC_LOG2_HPP
struct static_log2<0> { };
}
#endif // include guard

View File

@ -1,9 +1,10 @@
// Boost integer/static_min_max.hpp header file ----------------------------// // Boost integer/static_min_max.hpp header file ----------------------------//
// (C) Copyright Daryle Walker 2001. // (C) Copyright Daryle Walker 2001. Permission to copy, use, modify, sell
// Distributed under the Boost Software License, Version 1.0. (See // and distribute this software is granted provided this copyright notice
// accompanying file LICENSE_1_0.txt or copy at // appears in all copies. This software is provided "as is" without
// http://www.boost.org/LICENSE_1_0.txt) // express or implied warranty, and with no claim as to its suitability
// for any purpose.
// See http://www.boost.org for updates, documentation, and revision history. // See http://www.boost.org for updates, documentation, and revision history.

View File

@ -1,10 +1,12 @@
// Boost integer_fwd.hpp header file ---------------------------------------// // Boost integer_fwd.hpp header file ---------------------------------------//
// (C) Copyright Dave Abrahams and Daryle Walker 2001. Distributed under the Boost // (C) Copyright boost.org 2001. Permission to copy, use, modify, sell
// Software License, Version 1.0. (See accompanying file // and distribute this software is granted provided this copyright
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // notice appears in all copies. This software is provided "as is" without
// express or implied warranty, and with no claim as to its suitability for
// any purpose.
// See http://www.boost.org/libs/integer for documentation. // See http://www.boost.org for most recent version including documentation.
#ifndef BOOST_INTEGER_FWD_HPP #ifndef BOOST_INTEGER_FWD_HPP
#define BOOST_INTEGER_FWD_HPP #define BOOST_INTEGER_FWD_HPP
@ -67,10 +69,10 @@ template < >
#ifdef ULLONG_MAX #ifdef ULLONG_MAX
template < > template < >
class integer_traits< ::boost::long_long_type>; class integer_traits< long long >;
template < > template < >
class integer_traits< ::boost::ulong_long_type >; class integer_traits< unsigned long long >;
#endif #endif

View File

@ -1,18 +1,20 @@
/* boost integer_traits.hpp header file /* boost integer_traits.hpp header file
* *
* Copyright Jens Maurer 2000 * Copyright Jens Maurer 2000
* Distributed under the Boost Software License, Version 1.0. (See * Permission to use, copy, modify, sell, and distribute this software
* accompanying file LICENSE_1_0.txt or copy at * is hereby granted without fee provided that the above copyright notice
* http://www.boost.org/LICENSE_1_0.txt) * appears in all copies and that both that copyright notice and this
* permission notice appear in supporting documentation,
*
* Jens Maurer makes no representations about the suitability of this
* software for any purpose. It is provided "as is" without express or
* implied warranty.
* *
* $Id$ * $Id$
* *
* Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers * Idea by Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers
*/ */
// See http://www.boost.org/libs/integer for documentation.
#ifndef BOOST_INTEGER_TRAITS_HPP #ifndef BOOST_INTEGER_TRAITS_HPP
#define BOOST_INTEGER_TRAITS_HPP #define BOOST_INTEGER_TRAITS_HPP
@ -21,9 +23,7 @@
// These are an implementation detail and not part of the interface // These are an implementation detail and not part of the interface
#include <limits.h> #include <limits.h>
// we need wchar.h for WCHAR_MAX/MIN but not all platforms provide it, #if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && !defined(BOOST_NO_CWCHAR)
// and some may have <wchar.h> but not <cwchar> ...
#if !defined(BOOST_NO_INTRINSIC_WCHAR_T) && (!defined(BOOST_NO_CWCHAR) || defined(sun) || defined(__sun) || defined(__QNX__))
#include <wchar.h> #include <wchar.h>
#endif #endif
@ -88,25 +88,17 @@ class integer_traits<unsigned char>
template<> template<>
class integer_traits<wchar_t> class integer_traits<wchar_t>
: public std::numeric_limits<wchar_t>, : public std::numeric_limits<wchar_t>,
// Don't trust WCHAR_MIN and WCHAR_MAX with Mac OS X's native #if defined(WCHAR_MIN) && defined(WCHAR_MAX)
// library: they are wrong!
#if defined(WCHAR_MIN) && defined(WCHAR_MAX) && !defined(__APPLE__)
public detail::integer_traits_base<wchar_t, WCHAR_MIN, WCHAR_MAX> public detail::integer_traits_base<wchar_t, WCHAR_MIN, WCHAR_MAX>
#elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__)) #elif defined(__BORLANDC__) || defined(__CYGWIN__) || defined(__MINGW32__) || (defined(__BEOS__) && defined(__GNUC__))
// No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned: // No WCHAR_MIN and WCHAR_MAX, whar_t is short and unsigned:
public detail::integer_traits_base<wchar_t, 0, 0xffff> public detail::integer_traits_base<wchar_t, 0, 0xffff>
#elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400))\ #elif (defined(__sgi) && (!defined(__SGI_STL_PORT) || __SGI_STL_PORT < 0x400)) || (defined __APPLE__) || (defined(__FreeBSD__) && defined(__GNUC__)) || (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT))
|| (defined __APPLE__)\
|| (defined(__OpenBSD__) && defined(__GNUC__))\
|| (defined(__NetBSD__) && defined(__GNUC__))\
|| (defined(__FreeBSD__) && defined(__GNUC__))\
|| (defined(__DragonFly__) && defined(__GNUC__))\
|| (defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 3) && !defined(__SGI_STL_PORT))
// No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int. // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as int.
// - SGI MIPSpro with native library // - SGI MIPSpro with native library
// - gcc 3.x on HP-UX // - gcc 3.x on HP-UX
// - Mac OS X with native library // - Mac OS X with native library
// - gcc on FreeBSD, OpenBSD and NetBSD // - gcc on FreeBSD
public detail::integer_traits_base<wchar_t, INT_MIN, INT_MAX> public detail::integer_traits_base<wchar_t, INT_MIN, INT_MAX>
#elif defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 2) && !defined(__SGI_STL_PORT) #elif defined(__hpux) && defined(__GNUC__) && (__GNUC__ == 2) && !defined(__SGI_STL_PORT)
// No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as unsigned int. // No WCHAR_MIN and WCHAR_MAX, wchar_t has the same range as unsigned int.
@ -155,82 +147,42 @@ class integer_traits<unsigned long>
public detail::integer_traits_base<unsigned long, 0, ULONG_MAX> public detail::integer_traits_base<unsigned long, 0, ULONG_MAX>
{ }; { };
#if !defined(BOOST_NO_INTEGRAL_INT64_T) && !defined(BOOST_NO_INT64_T) #if defined(ULLONG_MAX) && !defined(__SUNPRO_CC)
#if defined(ULLONG_MAX) && defined(BOOST_HAS_LONG_LONG)
template<> template<>
class integer_traits< ::boost::long_long_type> class integer_traits<long long>
: public std::numeric_limits< ::boost::long_long_type>, : public std::numeric_limits<long long>,
public detail::integer_traits_base< ::boost::long_long_type, LLONG_MIN, LLONG_MAX> public detail::integer_traits_base<long long, LLONG_MIN, LLONG_MAX>
{ }; { };
template<> template<>
class integer_traits< ::boost::ulong_long_type> class integer_traits<unsigned long long>
: public std::numeric_limits< ::boost::ulong_long_type>, : public std::numeric_limits<unsigned long long>,
public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULLONG_MAX> public detail::integer_traits_base<unsigned long long, 0, ULLONG_MAX>
{ }; { };
#elif defined(ULONG_LONG_MAX)
#elif defined(ULONG_LONG_MAX) && defined(BOOST_HAS_LONG_LONG)
template<> template<>
class integer_traits< ::boost::long_long_type> : public std::numeric_limits< ::boost::long_long_type>, public detail::integer_traits_base< ::boost::long_long_type, LONG_LONG_MIN, LONG_LONG_MAX>{ }; class integer_traits<long long>
template<> : public std::numeric_limits<long long>,
class integer_traits< ::boost::ulong_long_type> public detail::integer_traits_base<long long, LONG_LONG_MIN, LONG_LONG_MAX>
: public std::numeric_limits< ::boost::ulong_long_type>,
public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONG_LONG_MAX>
{ }; { };
#elif defined(ULONGLONG_MAX) && defined(BOOST_HAS_LONG_LONG)
template<> template<>
class integer_traits< ::boost::long_long_type> class integer_traits<unsigned long long>
: public std::numeric_limits< ::boost::long_long_type>, : public std::numeric_limits<unsigned long long>,
public detail::integer_traits_base< ::boost::long_long_type, LONGLONG_MIN, LONGLONG_MAX> public detail::integer_traits_base<unsigned long long, 0, ULONG_LONG_MAX>
{ }; { };
#elif defined(ULONGLONG_MAX) && !defined(BOOST_MSVC) && !defined(__BORLANDC__)
template<> template<>
class integer_traits< ::boost::ulong_long_type> class integer_traits<long long>
: public std::numeric_limits< ::boost::ulong_long_type>, : public std::numeric_limits<long long>,
public detail::integer_traits_base< ::boost::ulong_long_type, 0, ULONGLONG_MAX> public detail::integer_traits_base<long long, LONGLONG_MIN, LONGLONG_MAX>
{ }; { };
#elif defined(_LLONG_MAX) && defined(_C2) && defined(BOOST_HAS_LONG_LONG)
template<> template<>
class integer_traits< ::boost::long_long_type> class integer_traits<unsigned long long>
: public std::numeric_limits< ::boost::long_long_type>, : public std::numeric_limits<unsigned long long>,
public detail::integer_traits_base< ::boost::long_long_type, -_LLONG_MAX - _C2, _LLONG_MAX> public detail::integer_traits_base<unsigned long long, 0, ULONGLONG_MAX>
{ }; { };
template<>
class integer_traits< ::boost::ulong_long_type>
: public std::numeric_limits< ::boost::ulong_long_type>,
public detail::integer_traits_base< ::boost::ulong_long_type, 0, _ULLONG_MAX>
{ };
#elif defined(BOOST_HAS_LONG_LONG)
//
// we have long long but no constants, this happens for example with gcc in -ansi mode,
// we'll just have to work out the values for ourselves (assumes 2's compliment representation):
//
template<>
class integer_traits< ::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) - 1)), ~(1LL << (sizeof(::boost::long_long_type) - 1))>
{ };
template<>
class integer_traits< ::boost::ulong_long_type>
: public std::numeric_limits< ::boost::ulong_long_type>,
public detail::integer_traits_base< ::boost::ulong_long_type, 0, ~0uLL>
{ };
#endif
#endif #endif
} // namespace boost } // namespace boost
#endif /* BOOST_INTEGER_TRAITS_HPP */ #endif /* BOOST_INTEGER_TRAITS_HPP */

View File

@ -7,11 +7,11 @@
<body bgcolor="white" text="black"> <body bgcolor="white" text="black">
<table border="1" bgcolor="teal" cellpadding="2"> <table border="1" bgcolor="teal" cellpadding="2">
<tr> <tr>
<td bgcolor="white"><img src="../../boost.png" alt="boost.png (6897 bytes)" width="277" height="86"></td> <td bgcolor="white"><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" width="277" height="86"></td>
<td><a href="../../index.htm"><font face="Arial" color="white"><big>Home</big></font></a></td> <td><a href="../../index.htm"><font face="Arial" color="white"><big>Home</big></font></a></td>
<td><a href="../libraries.htm"><font face="Arial" color="white"><big>Libraries</big></font></a></td> <td><a href="../libraries.htm"><font face="Arial" color="white"><big>Libraries</big></font></a></td>
<td><a href="http://www.boost.org/people/people.htm"><font face="Arial" color="white"><big>People</big></font></a></td> <td><a href="../../people/people.htm"><font face="Arial" color="white"><big>People</big></font></a></td>
<td><a href="http://www.boost.org/more/faq.htm"><font face="Arial" color="white"><big>FAQ</big></font></a></td> <td><a href="../../more/faq.htm"><font face="Arial" color="white"><big>FAQ</big></font></a></td>
<td><a href="../../more/index.htm"><font face="Arial" color="white"><big>More</big></font></a></td> <td><a href="../../more/index.htm"><font face="Arial" color="white"><big>More</big></font></a></td>
</tr> </tr>
</table> </table>
@ -121,13 +121,8 @@ instead.</p>
<hr> <hr>
<p>Revised: <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %b %Y" startspan -->06 Nov 2007<!--webbot bot="Timestamp" endspan i-checksum="15272" --> <p>Revised: <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %b %Y" startspan -->03 Oct 2001<!--webbot bot="Timestamp" endspan i-checksum="14373" -->
</p> </p>
<p>© Copyright Beman Dawes 2003</p>
<p>Distributed under the Boost Software License, Version 1.0. See
<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>
</body> </body>
</html> </html>

View File

@ -6,7 +6,7 @@
<body bgcolor="white" text="black"> <body bgcolor="white" text="black">
<h1> <h1>
<img src="../../boost.png" alt="boost.png (6897 bytes)" <img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)"
align="middle" width="277" height="86">Integer Type Selection align="middle" width="277" height="86">Integer Type Selection
Templates</h1> Templates</h1>
@ -193,20 +193,21 @@ href="../../boost/cstdint.hpp">&lt;boost/cstdint.hpp&gt;</a></cite>.</p>
<h2><a name="credits">Credits</a></h2> <h2><a name="credits">Credits</a></h2>
<p>The author of most of the Boost integer type choosing templates is <a <p>The author of most of the Boost integer type choosing templates is <a
href="http://www.boost.org/people/beman_dawes.html">Beman Dawes</a>. He gives thanks href="../../people/beman_dawes.html">Beman Dawes</a>. He gives thanks
to Valentin Bonnard and to Valentin Bonnard and
<a href="http://www.boost.org/people/kevlin_henney.htm"> Kevlin Henney</a> for sharing <a href="../../people/kevlin_henney.htm"> Kevlin Henney</a> for sharing
their designs for similar templates. <a their designs for similar templates. <a
href="http://www.boost.org/people/daryle_walker.html">Daryle Walker</a> designed the href="../../people/daryle_walker.html">Daryle Walker</a> designed the
value-based sized templates.</p> value-based sized templates.</p>
<hr> <hr>
<p>Revised May 20, 2001</p> <p>Revised May 20, 2001</p>
<p>&copy; Copyright Beman Dawes 1999. Use, modification, and distribution are <p>&copy; Copyright Beman Dawes 1999. Permission to copy, use, modify,
subject to the Boost Software License, Version 1.0. (See accompanying file <a sell and distribute this document is granted provided this copyright
href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or a copy at &lt;<a notice appears in all copies. This document is provided &quot;as
href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>&gt;.)</p> is&quot; without express or implied warranty, and with no claim as to
its suitability for any purpose.</p>
</body> </body>
</html> </html>

View File

@ -1,18 +1,20 @@
// boost integer.hpp test program ------------------------------------------// // boost integer.hpp test program ------------------------------------------//
// Copyright Beman Dawes 1999. Distributed under the Boost // (C) Copyright Beman Dawes 1999. Permission to copy, use, modify, sell
// Software License, Version 1.0. (See accompanying file // and distribute this software is granted provided this copyright
// LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // notice appears in all copies. This software is provided "as is" without
// express or implied warranty, and with no claim as to its suitability for
// any purpose.
// See http://www.boost.org for most recent version including documentation.
// See http://www.boost.org/libs/integer for documentation.
// Revision History // Revision History
// 04 Oct 01 Added tests for new templates; rewrote code (Daryle Walker) // 04 Oct 01 Added tests for new templates; rewrote code (Daryle Walker)
// 10 Mar 01 Boost Test Library now used for tests (Beman Dawes) // 10 Mar 01 Boost Test Library now used for tests (Beman Dawes)
// 31 Aug 99 Initial version // 31 Aug 99 Initial version
#include <boost/test/minimal.hpp> // for main, BOOST_CHECK #define BOOST_INCLUDE_MAIN
#include <boost/test/test_tools.hpp> // for main, BOOST_TEST
#include <boost/config.hpp> // for BOOST_NO_USING_TEMPLATE #include <boost/config.hpp> // for BOOST_NO_USING_TEMPLATE
#include <boost/cstdlib.hpp> // for boost::exit_success #include <boost/cstdlib.hpp> // for boost::exit_success
@ -128,27 +130,9 @@ namespace boost
// Test if a constant can fit within a certain type // Test if a constant can fit within a certain type
#define PRIVATE_FIT_TEST(Template, Number, Type, Value) BOOST_CHECK( Template < Number > :: Type ( Value ) == Value ) #define PRIVATE_FIT_TEST(Template, Number, Type, Value) BOOST_TEST( Template < Number > :: Type ( Value ) == Value )
#if ULONG_MAX > 0xFFFFFFFFL #define PRIVATE_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; PRIVATE_FIT_TEST(Template, 32, Type, v); v >>= 1; \
#define PRIVATE_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \
PRIVATE_FIT_TEST(Template, 64, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 63, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 62, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 61, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 60, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 59, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 58, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 57, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 56, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 55, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 54, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 53, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 52, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 51, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 50, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 49, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 48, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 47, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 46, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 45, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 44, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 43, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 42, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 41, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 40, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 39, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 38, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 37, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 36, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 35, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 34, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 33, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 32, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 31, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 30, Type, v); v >>= 1; \ PRIVATE_FIT_TEST(Template, 31, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 30, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 29, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 28, Type, v); v >>= 1; \ PRIVATE_FIT_TEST(Template, 29, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 28, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 27, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 26, Type, v); v >>= 1; \ PRIVATE_FIT_TEST(Template, 27, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 26, Type, v); v >>= 1; \
@ -165,28 +149,8 @@ namespace boost
PRIVATE_FIT_TEST(Template, 5, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 4, Type, v); v >>= 1; \ PRIVATE_FIT_TEST(Template, 5, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 4, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 3, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 2, Type, v); v >>= 1; \ PRIVATE_FIT_TEST(Template, 3, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 2, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 1, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 0, Type, v); } while ( false ) PRIVATE_FIT_TEST(Template, 1, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 0, Type, v); } while ( false )
#else
#define PRIVATE_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \
PRIVATE_FIT_TEST(Template, 32, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 31, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 30, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 29, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 28, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 27, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 26, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 25, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 24, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 23, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 22, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 21, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 20, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 19, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 18, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 17, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 16, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 15, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 14, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 13, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 12, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 11, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 10, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 9, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 8, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 7, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 6, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 5, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 4, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 3, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 2, Type, v); v >>= 1; \
PRIVATE_FIT_TEST(Template, 1, Type, v); v >>= 1; PRIVATE_FIT_TEST(Template, 0, Type, v); } while ( false )
#endif
#define PRIVATE_SHIFTED_FIT_TEST(Template, Number, Type, Value) BOOST_CHECK( Template < (ULONG_MAX >> Number) > :: Type ( Value ) == Value ) #define PRIVATE_SHIFTED_FIT_TEST(Template, Number, Type, Value) BOOST_TEST( Template < (ULONG_MAX >> Number) > :: Type ( Value ) == Value )
#define PRIVATE_SHIFTED_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \ #define PRIVATE_SHIFTED_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \
PRIVATE_SHIFTED_FIT_TEST(Template, 0, Type, v); v >>= 1; PRIVATE_SHIFTED_FIT_TEST(Template, 1, Type, v); v >>= 1; \ PRIVATE_SHIFTED_FIT_TEST(Template, 0, Type, v); v >>= 1; PRIVATE_SHIFTED_FIT_TEST(Template, 1, Type, v); v >>= 1; \
@ -206,7 +170,7 @@ namespace boost
PRIVATE_SHIFTED_FIT_TEST(Template, 28, Type, v); v >>= 1; PRIVATE_SHIFTED_FIT_TEST(Template, 29, Type, v); v >>= 1; \ PRIVATE_SHIFTED_FIT_TEST(Template, 28, Type, v); v >>= 1; PRIVATE_SHIFTED_FIT_TEST(Template, 29, Type, v); v >>= 1; \
PRIVATE_SHIFTED_FIT_TEST(Template, 30, Type, v); v >>= 1; PRIVATE_SHIFTED_FIT_TEST(Template, 31, Type, v); } while ( false ) PRIVATE_SHIFTED_FIT_TEST(Template, 30, Type, v); v >>= 1; PRIVATE_SHIFTED_FIT_TEST(Template, 31, Type, v); } while ( false )
#define PRIVATE_POS_SHIFTED_FIT_TEST(Template, Number, Type, Value) BOOST_CHECK( Template < (LONG_MAX >> Number) > :: Type ( Value ) == Value ) #define PRIVATE_POS_SHIFTED_FIT_TEST(Template, Number, Type, Value) BOOST_TEST( Template < (LONG_MAX >> Number) > :: Type ( Value ) == Value )
#define PRIVATE_POS_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \ #define PRIVATE_POS_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \
PRIVATE_POS_SHIFTED_FIT_TEST(Template, 0, Type, v); v >>= 1; PRIVATE_POS_SHIFTED_FIT_TEST(Template, 1, Type, v); v >>= 1; \ PRIVATE_POS_SHIFTED_FIT_TEST(Template, 0, Type, v); v >>= 1; PRIVATE_POS_SHIFTED_FIT_TEST(Template, 1, Type, v); v >>= 1; \
@ -226,7 +190,7 @@ namespace boost
PRIVATE_POS_SHIFTED_FIT_TEST(Template, 28, Type, v); v >>= 1; PRIVATE_POS_SHIFTED_FIT_TEST(Template, 29, Type, v); v >>= 1; \ PRIVATE_POS_SHIFTED_FIT_TEST(Template, 28, Type, v); v >>= 1; PRIVATE_POS_SHIFTED_FIT_TEST(Template, 29, Type, v); v >>= 1; \
PRIVATE_POS_SHIFTED_FIT_TEST(Template, 30, Type, v); v >>= 1; PRIVATE_POS_SHIFTED_FIT_TEST(Template, 31, Type, v); } while ( false ) PRIVATE_POS_SHIFTED_FIT_TEST(Template, 30, Type, v); v >>= 1; PRIVATE_POS_SHIFTED_FIT_TEST(Template, 31, Type, v); } while ( false )
#define PRIVATE_NEG_SHIFTED_FIT_TEST(Template, Number, Type, Value) BOOST_CHECK( Template < (LONG_MIN >> Number) > :: Type ( Value ) == Value ) #define PRIVATE_NEG_SHIFTED_FIT_TEST(Template, Number, Type, Value) BOOST_TEST( Template < (LONG_MIN >> Number) > :: Type ( Value ) == Value )
#define PRIVATE_NEG_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \ #define PRIVATE_NEG_FIT_TESTS(Template, Type, ValType, InitVal) do { ValType v = InitVal ; \
PRIVATE_NEG_SHIFTED_FIT_TEST(Template, 0, Type, v); v >>= 1; PRIVATE_NEG_SHIFTED_FIT_TEST(Template, 1, Type, v); v >>= 1; \ PRIVATE_NEG_SHIFTED_FIT_TEST(Template, 0, Type, v); v >>= 1; PRIVATE_NEG_SHIFTED_FIT_TEST(Template, 1, Type, v); v >>= 1; \

View File

@ -8,7 +8,7 @@
<body bgcolor="#FFFFFF" text="#000000"> <body bgcolor="#FFFFFF" text="#000000">
<h1><img src="../../boost.png" alt="boost.png (6897 bytes)" align="center" width="277" height="86">Compile-Time Integral <h1><img src="../../c++boost.gif" alt="c++boost.gif (8819 bytes)" align="center" width="277" height="86">Compile-Time Integral
Type Limits</h1> Type Limits</h1>
<p> <p>
@ -85,10 +85,5 @@ exercises the <code>integer_traits</code> class.
Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers discussed the integer Beman Dawes, Ed Brey, Steve Cleary, and Nathan Myers discussed the integer
traits idea on the boost mailing list in August 1999. traits idea on the boost mailing list in August 1999.
<hr> <hr>
<p>Revised <a href="../../people/jens_maurer.htm">
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B %Y" startspan -->06 November 2007<!--webbot bot="Timestamp" endspan i-checksum="40336" --></p> Jens Maurer</a>, 2000-02-20
<p><EFBFBD> Copyright Beman Dawes 2000</p>
<p>Distributed under the Boost Software License, Version 1.0. See
<a href="http://www.boost.org/LICENSE_1_0.txt">www.boost.org/LICENSE_1_0.txt</a></p>

View File

@ -1,9 +1,14 @@
/* boost integer_traits.hpp tests /* boost integer_traits.hpp tests
* *
* Copyright Jens Maurer 2000 * Copyright Jens Maurer 2000
* Distributed under the Boost Software License, Version 1.0. (See * Permission to use, copy, modify, sell, and distribute this software
* accompanying file LICENSE_1_0.txt or copy at * is hereby granted without fee provided that the above copyright notice
* http://www.boost.org/LICENSE_1_0.txt) * appears in all copies and that both that copyright notice and this
* permission notice appear in supporting documentation,
*
* Jens Maurer makes no representations about the suitability of this
* software for any purpose. It is provided "as is" without express or
* implied warranty.
* *
* $Id$ * $Id$
* *
@ -50,22 +55,14 @@ void runtest(const char * type, T)
{ {
typedef boost::integer_traits<T> traits; typedef boost::integer_traits<T> traits;
std::cout << "Checking " << type std::cout << "Checking " << type
<< "; min is " << make_char_numeric_for_streaming((traits::min)()) << "; min is " << make_char_numeric_for_streaming(traits::min())
<< ", max is " << make_char_numeric_for_streaming((traits::max)()) << ", max is " << make_char_numeric_for_streaming(traits::max())
<< std::endl; << std::endl;
BOOST_CHECK(traits::is_specialized); BOOST_TEST(traits::is_specialized);
#if defined(BOOST_MSVC) && (BOOST_MSVC <= 1200) BOOST_TEST(traits::is_integer);
// MSVC++ 6.0 issues a LNK1179 error (duplicate comdat) when the compiler BOOST_TEST(traits::is_integral);
// generates different symbol names with a very long common prefix: BOOST_TEST(traits::const_min == traits::min());
// the dummy "&& true" disambiguates between the symbols generated by this BOOST_TEST(traits::const_max == traits::max());
// BOOST_CHECK instantiation and the preceding one.
BOOST_CHECK(traits::is_integer && true);
#else
BOOST_CHECK(traits::is_integer);
#endif
BOOST_CHECK(traits::is_integral == true);
BOOST_CHECK(traits::const_min == (traits::min)());
BOOST_CHECK(traits::const_max == (traits::max)());
} }
int test_main(int, char*[]) int test_main(int, char*[])

View File

@ -1,9 +1,10 @@
// boost integer_mask.hpp test program -------------------------------------// // boost integer_mask.hpp test program -------------------------------------//
// (C) Copyright Daryle Walker 2001. // (C) Copyright Daryle Walker 2001. Permission to copy, use, modify, sell
// Distributed under the Boost Software License, Version 1.0. (See // and distribute this software is granted provided this copyright
// accompanying file LICENSE_1_0.txt or copy at // notice appears in all copies. This software is provided "as is" without
// http://www.boost.org/LICENSE_1_0.txt) // express or implied warranty, and with no claim as to its suitability for
// any purpose.
// See http://www.boost.org for most recent version including documentation. // See http://www.boost.org for most recent version including documentation.
@ -19,16 +20,16 @@
#include <iostream> // for std::cout (std::endl indirectly) #include <iostream> // for std::cout (std::endl indirectly)
#define PRIVATE_HIGH_BIT_SLOW_TEST(v) BOOST_CHECK( ::boost::high_bit_mask_t< \ #define PRIVATE_HIGH_BIT_SLOW_TEST(v) BOOST_TEST( ::boost::high_bit_mask_t< \
(v) >::high_bit == (1ul << (v)) ); (v) >::high_bit == (1ul << (v)) );
#define PRIVATE_HIGH_BIT_FAST_TEST(v) BOOST_CHECK( ::boost::high_bit_mask_t< \ #define PRIVATE_HIGH_BIT_FAST_TEST(v) BOOST_TEST( ::boost::high_bit_mask_t< \
(v) >::high_bit_fast == (1ul << (v)) ); (v) >::high_bit_fast == (1ul << (v)) );
#define PRIVATE_HIGH_BIT_TEST(v) do { PRIVATE_HIGH_BIT_SLOW_TEST(v); \ #define PRIVATE_HIGH_BIT_TEST(v) do { PRIVATE_HIGH_BIT_SLOW_TEST(v); \
PRIVATE_HIGH_BIT_FAST_TEST(v); } while (false) PRIVATE_HIGH_BIT_FAST_TEST(v); } while (false)
#define PRIVATE_LOW_BITS_SLOW_TEST(v) BOOST_CHECK( ::boost::low_bits_mask_t< \ #define PRIVATE_LOW_BITS_SLOW_TEST(v) BOOST_TEST( ::boost::low_bits_mask_t< \
(v) >::sig_bits == ((1ul << (v)) - 1) ); (v) >::sig_bits == ((1ul << (v)) - 1) );
#define PRIVATE_LOW_BITS_FAST_TEST(v) BOOST_CHECK( ::boost::low_bits_mask_t< \ #define PRIVATE_LOW_BITS_FAST_TEST(v) BOOST_TEST( ::boost::low_bits_mask_t< \
(v) >::sig_bits_fast == ((1ul << (v)) - 1) ); (v) >::sig_bits_fast == ((1ul << (v)) - 1) );
#define PRIVATE_LOW_BITS_TEST(v) do { PRIVATE_LOW_BITS_SLOW_TEST(v); \ #define PRIVATE_LOW_BITS_TEST(v) do { PRIVATE_LOW_BITS_SLOW_TEST(v); \
PRIVATE_LOW_BITS_FAST_TEST(v); } while (false) PRIVATE_LOW_BITS_FAST_TEST(v); } while (false)

View File

@ -1,9 +1,10 @@
// Boost static_log2.hpp test program --------------------------------------// // Boost static_log2.hpp test program --------------------------------------//
// (C) Copyright Daryle Walker 2001. // (C) Copyright Daryle Walker 2001. Permission to copy, use, modify, sell
// Distributed under the Boost Software License, Version 1.0. (See // and distribute this software is granted provided this copyright
// accompanying file LICENSE_1_0.txt or copy at // notice appears in all copies. This software is provided "as is" without
// http://www.boost.org/LICENSE_1_0.txt) // express or implied warranty, and with no claim as to its suitability for
// any purpose.
// See http://www.boost.org for most recent version including documentation. // See http://www.boost.org for most recent version including documentation.
@ -20,7 +21,7 @@
// Macros to compact code // Macros to compact code
#define PRIVATE_LB_TEST( v, e ) BOOST_CHECK( ::boost::static_log2<v>::value == e ) #define PRIVATE_LB_TEST( v, e ) BOOST_TEST( ::boost::static_log2<v>::value == e )
#define PRIVATE_PRINT_LB( v ) ::std::cout << "boost::static_log2<" << (v) \ #define PRIVATE_PRINT_LB( v ) ::std::cout << "boost::static_log2<" << (v) \
<< "> = " << ::boost::static_log2< (v) >::value << '.' << ::std::endl << "> = " << ::boost::static_log2< (v) >::value << '.' << ::std::endl

View File

@ -1,9 +1,10 @@
// Boost static_min_max.hpp test program -----------------------------------// // Boost static_min_max.hpp test program -----------------------------------//
// (C) Copyright Daryle Walker 2001. // (C) Copyright Daryle Walker 2001. Permission to copy, use, modify, sell
// Distributed under the Boost Software License, Version 1.0. (See // and distribute this software is granted provided this copyright
// accompanying file LICENSE_1_0.txt or copy at // notice appears in all copies. This software is provided "as is" without
// http://www.boost.org/LICENSE_1_0.txt) // express or implied warranty, and with no claim as to its suitability for
// any purpose.
// See http://www.boost.org for most recent version including documentation. // See http://www.boost.org for most recent version including documentation.
@ -11,7 +12,7 @@
// 23 Sep 2001 Initial version (Daryle Walker) // 23 Sep 2001 Initial version (Daryle Walker)
#define BOOST_INCLUDE_MAIN #define BOOST_INCLUDE_MAIN
#include <boost/test/test_tools.hpp> // for main, BOOST_CHECK #include <boost/test/test_tools.hpp> // for main, BOOST_TEST
#include <boost/cstdlib.hpp> // for boost::exit_success #include <boost/cstdlib.hpp> // for boost::exit_success
#include <boost/integer/static_min_max.hpp> // for boost::static_signed_min, etc. #include <boost/integer/static_min_max.hpp> // for boost::static_signed_min, etc.
@ -37,57 +38,57 @@ test_main
// Two positives // Two positives
cout << "Doing tests with two positive values." << endl; cout << "Doing tests with two positive values." << endl;
BOOST_CHECK( (static_signed_min< 9, 14>::value) == 9 ); BOOST_TEST( (static_signed_min< 9, 14>::value) == 9 );
BOOST_CHECK( (static_signed_max< 9, 14>::value) == 14 ); BOOST_TEST( (static_signed_max< 9, 14>::value) == 14 );
BOOST_CHECK( (static_signed_min<14, 9>::value) == 9 ); BOOST_TEST( (static_signed_min<14, 9>::value) == 9 );
BOOST_CHECK( (static_signed_max<14, 9>::value) == 14 ); BOOST_TEST( (static_signed_max<14, 9>::value) == 14 );
BOOST_CHECK( (static_unsigned_min< 9, 14>::value) == 9 ); BOOST_TEST( (static_unsigned_min< 9, 14>::value) == 9 );
BOOST_CHECK( (static_unsigned_max< 9, 14>::value) == 14 ); BOOST_TEST( (static_unsigned_max< 9, 14>::value) == 14 );
BOOST_CHECK( (static_unsigned_min<14, 9>::value) == 9 ); BOOST_TEST( (static_unsigned_min<14, 9>::value) == 9 );
BOOST_CHECK( (static_unsigned_max<14, 9>::value) == 14 ); BOOST_TEST( (static_unsigned_max<14, 9>::value) == 14 );
// Two negatives // Two negatives
cout << "Doing tests with two negative values." << endl; cout << "Doing tests with two negative values." << endl;
BOOST_CHECK( (static_signed_min< -8, -101>::value) == -101 ); BOOST_TEST( (static_signed_min< -8, -101>::value) == -101 );
BOOST_CHECK( (static_signed_max< -8, -101>::value) == -8 ); BOOST_TEST( (static_signed_max< -8, -101>::value) == -8 );
BOOST_CHECK( (static_signed_min<-101, -8>::value) == -101 ); BOOST_TEST( (static_signed_min<-101, -8>::value) == -101 );
BOOST_CHECK( (static_signed_max<-101, -8>::value) == -8 ); BOOST_TEST( (static_signed_max<-101, -8>::value) == -8 );
// With zero // With zero
cout << "Doing tests with zero and a positive or negative value." << endl; cout << "Doing tests with zero and a positive or negative value." << endl;
BOOST_CHECK( (static_signed_min< 0, 14>::value) == 0 ); BOOST_TEST( (static_signed_min< 0, 14>::value) == 0 );
BOOST_CHECK( (static_signed_max< 0, 14>::value) == 14 ); BOOST_TEST( (static_signed_max< 0, 14>::value) == 14 );
BOOST_CHECK( (static_signed_min<14, 0>::value) == 0 ); BOOST_TEST( (static_signed_min<14, 0>::value) == 0 );
BOOST_CHECK( (static_signed_max<14, 0>::value) == 14 ); BOOST_TEST( (static_signed_max<14, 0>::value) == 14 );
BOOST_CHECK( (static_unsigned_min< 0, 14>::value) == 0 ); BOOST_TEST( (static_unsigned_min< 0, 14>::value) == 0 );
BOOST_CHECK( (static_unsigned_max< 0, 14>::value) == 14 ); BOOST_TEST( (static_unsigned_max< 0, 14>::value) == 14 );
BOOST_CHECK( (static_unsigned_min<14, 0>::value) == 0 ); BOOST_TEST( (static_unsigned_min<14, 0>::value) == 0 );
BOOST_CHECK( (static_unsigned_max<14, 0>::value) == 14 ); BOOST_TEST( (static_unsigned_max<14, 0>::value) == 14 );
BOOST_CHECK( (static_signed_min< 0, -101>::value) == -101 ); BOOST_TEST( (static_signed_min< 0, -101>::value) == -101 );
BOOST_CHECK( (static_signed_max< 0, -101>::value) == 0 ); BOOST_TEST( (static_signed_max< 0, -101>::value) == 0 );
BOOST_CHECK( (static_signed_min<-101, 0>::value) == -101 ); BOOST_TEST( (static_signed_min<-101, 0>::value) == -101 );
BOOST_CHECK( (static_signed_max<-101, 0>::value) == 0 ); BOOST_TEST( (static_signed_max<-101, 0>::value) == 0 );
// With identical // With identical
cout << "Doing tests with two identical values." << endl; cout << "Doing tests with two identical values." << endl;
BOOST_CHECK( (static_signed_min<0, 0>::value) == 0 ); BOOST_TEST( (static_signed_min<0, 0>::value) == 0 );
BOOST_CHECK( (static_signed_max<0, 0>::value) == 0 ); BOOST_TEST( (static_signed_max<0, 0>::value) == 0 );
BOOST_CHECK( (static_unsigned_min<0, 0>::value) == 0 ); BOOST_TEST( (static_unsigned_min<0, 0>::value) == 0 );
BOOST_CHECK( (static_unsigned_max<0, 0>::value) == 0 ); BOOST_TEST( (static_unsigned_max<0, 0>::value) == 0 );
BOOST_CHECK( (static_signed_min<14, 14>::value) == 14 ); BOOST_TEST( (static_signed_min<14, 14>::value) == 14 );
BOOST_CHECK( (static_signed_max<14, 14>::value) == 14 ); BOOST_TEST( (static_signed_max<14, 14>::value) == 14 );
BOOST_CHECK( (static_unsigned_min<14, 14>::value) == 14 ); BOOST_TEST( (static_unsigned_min<14, 14>::value) == 14 );
BOOST_CHECK( (static_unsigned_max<14, 14>::value) == 14 ); BOOST_TEST( (static_unsigned_max<14, 14>::value) == 14 );
BOOST_CHECK( (static_signed_min< -101, -101>::value) == -101 ); BOOST_TEST( (static_signed_min< -101, -101>::value) == -101 );
BOOST_CHECK( (static_signed_max< -101, -101>::value) == -101 ); BOOST_TEST( (static_signed_max< -101, -101>::value) == -101 );
return boost::exit_success; return boost::exit_success;
} }