|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r63881 - in sandbox/SOC/2010/bits_and_ints: boost/integer libs/integer/doc libs/integer/doc/html libs/integer/doc/html/boost_integer
From: muriloufg_at_[hidden]
Date: 2010-07-11 13:26:36
Author: murilov
Date: 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
New Revision: 63881
URL: http://svn.boost.org/trac/boost/changeset/63881
Log:
Improving documentation
Added pragma to avoid a warning in MSVC compilers
Some cosmetic changes
Text files modified:
sandbox/SOC/2010/bits_and_ints/boost/integer/round_power_2.hpp | 27
sandbox/SOC/2010/bits_and_ints/boost/integer/static_abs.hpp | 8
sandbox/SOC/2010/bits_and_ints/boost/integer/static_clear_least_bit_set.hpp | 4
sandbox/SOC/2010/bits_and_ints/boost/integer/static_lcm.hpp | 2
sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign.hpp | 4
sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign_extend.hpp | 4
sandbox/SOC/2010/bits_and_ints/libs/integer/doc/bits_and_ints.qbk | 276 ++++++++++++++++--
sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/bits_and_ints.html | 587 ++++++++++++++++++++++++++++++++++-----
sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/history.html | 4
sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/index.html | 2
10 files changed, 783 insertions(+), 135 deletions(-)
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/round_power_2.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/round_power_2.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/round_power_2.hpp 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -12,21 +12,20 @@
#define BOOST_POWER_2_ROUND
/*
- * The functions declared in this file an integra rounds up or down to
- * the next power of 2.
+ * The functions declared in this file rounds up or down an integral to the next power of 2.
*
- * The functions `ceil_to_power_2()' rounds up and the functions
- * `floor_to_power_2()' rounds down.
+ * The functions `ceil_pow2()' rounds up and the functions
+ * `floor_pow2()' rounds down.
*
* Usage:
*
- * T x = ceil_to_power_2(y); // rounds down
- * T z = floor_to_power_2(w); // rounds up
+ * T x = ceil_pow2(y); // rounds down
+ * T z = floor_pow2(w); // rounds up
*/
namespace boost {
-uint8_t ceil_to_power_2(uint8_t value)
+uint8_t ceil_pow2(uint8_t value)
{
value = value - 1;
value = value | (value >> 1);
@@ -36,7 +35,7 @@
return value + 1;
}
-uint16_t ceil_to_power_2(uint16_t value)
+uint16_t ceil_pow2(uint16_t value)
{
value = value - 1;
value = value | (value >> 1);
@@ -47,7 +46,7 @@
return value + 1;
}
-uint32_t ceil_to_power_2(uint32_t value)
+uint32_t ceil_pow2(uint32_t value)
{
value = value - 1;
value = value | (value >> 1);
@@ -60,7 +59,7 @@
}
#ifndef BOOST_HAS_INT64_T
-uint64_t ceil_to_power_2(uint64_t value)
+uint64_t ceil_pow2(uint64_t value)
{
value = value - 1;
value = value | (value >> 1);
@@ -74,7 +73,7 @@
}
#endif
-uint8_t floor_to_power_2(uint8_t value)
+uint8_t floor_pow2(uint8_t value)
{
value = value | (value >> 1);
value = value | (value >> 2);
@@ -83,7 +82,7 @@
return value - (value >> 1);
}
-uint16_t floor_to_power_2(uint16_t value)
+uint16_t floor_pow2(uint16_t value)
{
value = value | (value >> 1);
value = value | (value >> 2);
@@ -93,7 +92,7 @@
return value - (value >> 1);
}
-uint32_t floor_to_power_2(uint32_t value)
+uint32_t floor_pow2(uint32_t value)
{
value = value | (value >> 1);
value = value | (value >> 2);
@@ -105,7 +104,7 @@
}
#ifndef BOOST_HAS_INT64_T
-uint64_t floor_to_power_2(uint64_t value)
+uint64_t floor_pow2(uint64_t value)
{
value = value | (value >> 1);
value = value | (value >> 2);
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_abs.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_abs.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_abs.hpp 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -22,8 +22,8 @@
/*
* This header defines mpl::abs<> and static_abs<> metafunctions.
- * The mpl::abs<> version returns the absolute value of an mpl::integral_c<>
- * and the static_abs version returns the absolute value from an integral value.
+ * The mpl::abs<> version returns the absolute value of a mpl::integral_c<>
+ * and the static_abs<> version returns the absolute value from an integral value.
*/
namespace mpl {
@@ -36,8 +36,8 @@
}
-template <typename T, T data, class Enable = typename enable_if< is_integral<T> >::type >
-struct static_abs : mpl::abs< mpl::integral_c<T, data> >
+template <typename T, T Value, class Enable = typename enable_if< is_integral<T> >::type >
+struct static_abs : mpl::abs< mpl::integral_c<T, Value> >
{};
} // boost
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_clear_least_bit_set.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_clear_least_bit_set.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_clear_least_bit_set.hpp 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -46,8 +46,8 @@
/*
* Requires T to be an integral type
*/
-template <typename T, T value>
-struct static_clear_least_bit_set : mpl::clear_least_bit_set< mpl::integral_c<T, value> >
+template <typename T, T Value>
+struct static_clear_least_bit_set : mpl::clear_least_bit_set< mpl::integral_c<T, Value> >
{};
}
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_lcm.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_lcm.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_lcm.hpp 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -21,7 +21,7 @@
/*
* This header defines mpl::lcm<> metafunction wich calculates the
- * least common multiplier from two given mpl::integral_c<> ICT1 and ICT2.
+ * least common multiple from two given mpl::integral_c<> ICT1 and ICT2.
*/
namespace mpl {
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign.hpp 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -42,12 +42,12 @@
}
-template <typename T, T data
+template <typename T, T Value
, class Enable = typename enable_if<
is_integral<T>
>::type
>
-struct static_sign : mpl::sign<mpl::integral_c< T, data> >
+struct static_sign : mpl::sign<mpl::integral_c<T, Value> >
{};
} // boost
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign_extend.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign_extend.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign_extend.hpp 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -30,6 +30,10 @@
* Wich is -6 in 32-bit 2-complement.
*/
+#ifdef BOOST_MSVC
+#pragma warning ( disable : 4307 )
+#endif
+
namespace boost {
namespace mpl {
Modified: sandbox/SOC/2010/bits_and_ints/libs/integer/doc/bits_and_ints.qbk
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/libs/integer/doc/bits_and_ints.qbk (original)
+++ sandbox/SOC/2010/bits_and_ints/libs/integer/doc/bits_and_ints.qbk 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -284,6 +284,26 @@
[endsect]
+[section Static Functions `mpl::sign` and `static_sign`]
+The compile-time versions can be included via [@../../../../boost/integer/static_sign.hpp <boost/integer/static_sign.hpp>].
+
+ template <typename IC>
+ struct mpl::sign { static const int value = ``['implementation-defined]``; };
+
+ template <template T, T Value>
+ struct static_same_sign { static const int value = ``['implementation-defined]``; };
+
+[table
+ [[Parameter][Description]]
+ [[`IC`][ A `mpl::integral_c<>` type. ]]
+ [[`T`][ The value type. Must be an integral type. ]]
+ [[`Value`][ The value to be checked. ]]
+]
+
+*[*Requires: ] `T` to be an integral type and `IC` to be an `mpl::integral_c<>` type.
+
+[endsect]
+
[section Examples]
*[*Run-time version:]
@@ -368,10 +388,17 @@
[section Synopsis]
int pop_count(uintmax_t value);
+
+ template <uintmax_t Value>
+ struct static_pop_count { static const int value = ``['implementation-defined]``; };
+
+ template <typename IC>
+ struct pop_count { static const int value = ``['implementation-defined]``; };
[endsect]
-[*Returns: ] The number of bits set in `value`.
+*[*Requires: ] `IC` must be an `mpl::integral_c<>` type.
+*[*Returns: ] The number of bits set in `value`. For the compile-time versions, the result will be on member `value`.
[endsect]
@@ -380,27 +407,187 @@
[section Synopsis]
+ template <typename T>
T clear_least_bit_set(T value);
+
+ template <typename IC>
+ struct mpl::clear_least_bit_set { static const typename IC::value_type value = ``['implementation-defined]``; };
+
+ template <typename T, T Value>
+ struct static_clear_least_bit_set { static const T value = ``['implementation-defined]``; };
[endsect]
-*[*Remarks: ] `T` must be an integral type.
+*[*Requires: ] `T` must be an integral type. `IC` must be an `mpl::integral_c<>` type.
*[*Returns: ] `value` with it's least significant active bit disactivated.
[endsect]
[section Count Trailing Zeros]
-The `count_trailing_zeros()` function counts the number of consecutive 0's from the least significant bit of an integral value.
-This function is defined on [@../../../../boost/integer/count_trailing_zeros.hpp <boost/integer/count_trailing_zeros.hpp>]
+The `count_trailing_zeros` function and metafunctions counts the number of consecutive 0's from the least significant bit of an integral value.
+The runtime function is defined on [@../../../../boost/integer/count_trailing_zeros.hpp <boost/integer/count_trailing_zeros.hpp>] and
+the compile-time metafunctions are defined on [@../../../../boost/integer/static_count_trailing_zeros.hpp <boost/integer/static_count_trailing_zeros.hpp>]
[section Synopsis]
int count_trailing_zeros(uintmax_t value);
+ template <typename IC>
+ struct mpl::count_trailing_zeros { static const int value = ``['implementation-defined]``; };
+
+ template <uintmax_t Value>
+ struct static_count_trailing_zeros { static const int value = ``['implementation-defined]``; };
+
+[endsect]
+
+*[*Requires: ] For the `mpl::count_trailing_zeros<>` version, `IC` must be an mpl::integral_c<> type.
+*[*Returns: ] For the runtime version, the number of consecutive zeros from the least significant bit.
+In the compile-time versions, the number of consecutive zeros in the `value` static member.
+
+[endsect]
+
+[section Safe Average]
+Given two integer values x and y, the (floor of the) average normally would be computed by `(x+y)/2` unfortunately,
+this can yield incorrect results due to overflow. Safe average ensures that no overflow will happen even if `(x+y)`
+overflows the range of T.
+The runtime version is defined on [@../../../../boost/integer/safe_avg.hpp <boost/integer/safe_avg.hpp>] and
+the compile-time metafunctions are defined on [@../../../../boost/integer/static_safe_avg.hpp <boost/integer/static_safe_avg.hpp>]
+
+[section Synopsis]
+
+ template <typename T>
+ T safe_avg(T x, T y);
+
+ template <typename ICT1, typename ICT2>
+ struct mpl::safe_avg { static const int value = ``['implementation-defined]``; };
+
+ template <typename T, T Value1, T Value2>
+ struct static_safe_avg { static const int value = ``['implementation-defined]``; };
+
+[endsect]
+
+*[*Requires: ] For the `mpl::safe_avg<>` version, both `ICT1` and `ICT2` must be mpl::integral_c<> types.
+For the `static_safe_avg<>` and the runtime version, `T` must be an integral type.
+
+*[*Returns: ] The average of the sum between two integrals rounded down. Overflow is ensured to not happen.
+
+[endsect]
+
+[section Round to Power of 2 functions]
+This function rounds up and down integral values to the next power of 2.
+The `ceil_pow2` function rounds up and `floor_pow2` function rounds down.
+These functions are defined on [@../../../../boost/integer/round_power_2.hpp <boost/integer/round_power_2.hpp>]
+
+[section Synopsis]
+
+ T ceil_pow2(T value);
+ T floor_pow2(T value);
+
[endsect]
-*[*Returns: ] The number of consecutive zeros from the least significant bit.
+*[*Requires: ] `T` must be convertible to `uint8_t` or `uint16_t` or `uint32_t` or `uint64_t`.
+
+*[*Returns: ]
+ * `ceil_pow2()` returns `value` rounded [*up] to the lesser power of two greater than or equal to `value.
+
+ * `floor_pow2()` returns `value` rounded [*down] to the greater power of two lesser or equal `value`.
+
+[endsect]
+
+[section Transfer of Sign (isign) functions ]
+isign or transfer of sign function is defined by:
+``
+ isign(x, y) =
+ abs(x), if y is greater than or equal 0,
+ -abs(x), if y is less than 0
+``
+
+The runtime functions are defined on [@../../../../boost/integer/isign.hpp <boost/integer/isign.hpp>] and the
+static metafunctions are defined on [@../../../../boost/integer/static_isign.hpp <boost/integer/static_isign.hpp>]
+
+[section Synopsis]
+
+ template <typename T>
+ T isign(T x, T y);
+
+ template <typename T, T Value1, T Value2>
+ struct static_isign { static const T value = ``['implementation-defined]``; };
+
+ template <typename IC1, typename IC2>
+ struct mpl::isign { static const typename IC1::value_type value = ``['implementation-defined]``; };
+
+[endsect]
+
+*[*Requires: ] `T` must be an integral type. Both `IC1` and `IC2` must be `mpl::integral_c<>` types.
+*[*Returns: ]
+ * Runtime version: returns `abs(x)` if `y` is greater than or equal 0 and `-abs(x)` if `y` is negative.
+
+ * MPL version: the member `value` will be `abs(IC1::value)` if `IC2` holds an value greater than or
+ equal 0, or `-abs(IC1::value)` if `IC2` holds a negative value.
+
+ * `static_isign<T, Value1, Value2>::value` will be `abs(Value1)` if Value2 is greater than or equal 0, or
+ `-abs(Value1)` if Value2 is negative.
+
+[endsect]
+
+[section Absolute Value in Compile-Time ]
+The static metafunctions defined on [@../../../../boost/integer/static_abs.hpp <boost/integer/static_abs.hpp>]
+calculates the absolute value of integral constants.
+
+`mpl::abs<>` version returns the absolute value of a `mpl::integral_c<>`
+and the `static_abs<>` version returns the absolute value from an integral value.
+
+[section Synopsis]
+
+ template <typename IC>
+ struct mpl::abs { static const typename IC::value_type value = ``['implementation-defined]``; };
+
+ template <typename T, T Value>
+ struct static_abs { static const T value = ``['implementation-defined]``; };
+
+[endsect]
+
+*[*Requires: ] `T` must be an integral type. `IC` a `mpl::integral_c<>` type.
+
+*[*Results: ] The member `value ` in `mpl::abs<>` will be the absolute value of `IC::value`.
+In `static_abs<>`, `value` will be the absolute value of `Value`.
+
+[endsect]
+
+[section MPL Least Common Multiple ]
+This header defines mpl::lcm<> metafunction wich calculates the
+ least common multiple from two given `mpl::integral_c<>`.
+
+This static metafunction is defined on [@../../../../boost/integer/static_lcm.hpp <boost/integer/static_lcm.hpp>].
+
+[section Synopsis]
+
+ template <typename ICT1, typename ICT2>
+ struct mpl::lcm { static const uintmax_t value = ``['implementation-defined]``; };
+
+[endsect]
+
+*[*Requires: ] `ICT1` and `ICT2` must be `mpl::integral_c<>` types.
+
+*[*Results: ] The member `value ` will be the least common multiple from `IC1` and `IC2`.
+
+[endsect]
+
+[section MPL Greatest Common Divisor ]
+The header file [@../../../../boost/integer/static_gcd.hpp <boost/integer/static_gcd.hpp>] defines `mpl::gcd<>`
+metafunction wich calculates the greatest common divisor of two given `mpl::integral_c<>`.
+
+[section Synopsis]
+
+ template <typename ICT1, typename ICT2>
+ struct mpl::gcd { static const uintmax_t value = ``['implementation-defined]``; };
+
+[endsect]
+
+*[*Requires: ] `ICT1` and `ICT2` must be `mpl::integral_c<>` types.
+
+*[*Results: ] The member `value ` will be the greatest commom divisor from `IC1` and `IC2`.
[endsect]
@@ -415,43 +602,50 @@
// Sets the bit `pos' in data
template <typename T, T data, unsigned char pos>
- struct set_bit
- {
- static const T value = ``['implementation-defined]``;
- }; // set_bit
+ struct static_set_bit { static const T value = ``['implementation-defined]``; };
-
// Clear the bit `pos' in data
template <typename T, T data, unsigned char pos>
- struct clear_bit
- {
- static const T value = ``['implementation-defined]``;
- }; // clear_bit
+ struct static_clear_bit { static const T value = ``['implementation-defined]``; };
// If the bit `pos' is 1 then it will be 0 if not the bit will be 1
template <typename T, T data, unsigned char pos>
- struct flip_bit
- {
- static const T value = ``['implementation-defined]``;
- }; // flip_bit
+ struct static_flip_bit{ static const T value = ``['implementation-defined]``; };
// Test if the bit in `pos' positon is set or not
template <typename T, T data, unsigned char pos>
- struct test_bit
- {
- static const bool value = ``['implementation-defined]``;
- }; // test_bit
+ struct static_test_bit { static const bool value = ``['implementation-defined]``; };
+
+ namespace mpl {
+
+ template <typename IC, unsigned char pos>
+ struct set_bit { static const typename IC::value_type value = ``['implementation-defined]``; };
+
+ template <typename IC, unsigned char pos>
+ struct clear_bit { static const typename IC::value_type value = ``['implementation-defined]``; };
+
+ template <typename IC, unsigned char pos>
+ struct flip_bit{ static const typename IC::value_type value = ``['implementation-defined]``; };
+
+ template <typename IC, unsigned char pos>
+ struct test_bit { static const bool value = ``['implementation-defined]``; };
+
+ } // mpl
} // boost
[endsect]
-[section Template Class `set_bit<>`]
-Sets the bit `pos` active in `data`.
+[section Template Class `static_set_bit<>` and `mpl::set_bit`]
+Sets the bit `pos` active in `value`.
-*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type`.
+*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type` for `static_set_bit<>` and smaller than IC::value_type
+ for `mpl::static_set_bit<>`.
+
+*[*Remarks: ]
+ * `T` must be an integral type. If this constraint is not met, `static_set_bit<>` do not participate in overload resolution.
-*[*Remarks: ] `T` must be an integral type. If this constraint is not met, this metafunction do not participate in overload resolution.
+ * `IC` must be a `mpl::integral_c<>` type. If this constraint is not met, `mpl::set_bit<>` metafunction do not participate in overload resolution.
*[*Example:]
@@ -460,13 +654,17 @@
[endsect]
-[section Template Class `clear_bit<>`]
+[section Template Class `mpl::clear_bit<>` and `static_clear_bit<>`]
Sets the bit `pos` inactive in `data`.
-*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type`.
+*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type` for `static_clear_bit<>` and smaller than IC::value_type
+ for `mpl::static_clear_bit<>`.
-*[*Remarks: ] `T` must be an integral type. If this constraint is not met, this metafunction do not participate in overload resolution.
+*[*Remarks: ]
+ * `T` must be an integral type. If this constraint is not met, `static_clear_bit<>` do not participate in overload resolution.
+
+ * `IC` must be a `mpl::integral_c<>` type. If this constraint is not met, `mpl::clear_bit<>` metafunction do not participate in overload resolution.
*[*Example:]
@@ -475,13 +673,17 @@
[endsect]
-[section Template Class `test_bit<>`]
+[section Template Class `mpl::test_bit` and `static_test_bit<>`]
Test if the bit `pos` in `data` is active or not.
-*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type`.
+*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type` for `static_test_bit<>` and smaller than IC::value_type
+ for `mpl::static_test_bit<>`.
+
+*[*Remarks: ]
+ * `T` must be an integral type. If this constraint is not met, `static_test_bit<>` do not participate in overload resolution.
-*[*Remarks: ] `T` must be an integral type. If this constraint is not met, this metafunction do not participate in overload resolution.
+ * `IC` must be a `mpl::integral_c<>` type. If this constraint is not met, `mpl::test_bit<>` metafunction do not participate in overload resolution.
*[*Example:]
@@ -490,12 +692,16 @@
[endsect]
-[section Template Class `flip_bit<>`]
+[section Template Class `mpl::flip_bit<>` and `static_flip_bit<>`]
Invert the value of the bit `pos` in `data`
-*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type`.
+*[*Requires: ] `pos` must be smaller than the size (in bits) of `Type` for `static_flip_bit<>` and smaller than IC::value_type
+ for `mpl::static_flip_bit<>`.
+
+*[*Remarks: ]
+ * `T` must be an integral type. If this constraint is not met, `static_flip_bit<>` do not participate in overload resolution.
-*[*Remarks: ] `T` must be an integral type. If this constraint is not met, this metafunction do not participate in overload resolution.
+ * `IC` must be a `mpl::integral_c<>` type. If this constraint is not met, `mpl::flip_bit<>` metafunction do not participate in overload resolution.
*[*Example:]
Modified: sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/bits_and_ints.html
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/bits_and_ints.html (original)
+++ sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/bits_and_ints.html 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -39,6 +39,17 @@
Least Bit Set</a></span></dt>
<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.count_trailing_zeros">Count
Trailing Zeros</a></span></dt>
+<dt><span class="section">Safe Average</span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.round_to_power_of_2_functions">Round
+ to Power of 2 functions</a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.transfer_of_sign__isign__functions_">Transfer
+ of Sign (isign) functions </a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.absolute_value_in_compile_time_">Absolute
+ Value in Compile-Time </a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.mpl_least_common_multiple_">MPL
+ Least Common Multiple </a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.mpl_greatest_common_divisor_">MPL
+ Greatest Common Divisor </a></span></dt>
<dt><span class="section"> Binary Utilities</span></dt>
</dl></div>
<div class="section" title="Overview">
@@ -633,6 +644,8 @@
<div class="toc"><dl>
<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.sign.non_member_function__sign_">Non-Member
Function <code class="computeroutput"><span class="identifier">sign</span></code></a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.sign.static_functions__mpl__sign__and__static_sign_">Static
+ Functions <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">sign</span></code> and <code class="computeroutput"><span class="identifier">static_sign</span></code></a></span></dt>
<dt><span class="section">Examples</span></dt>
</dl></div>
<p>
@@ -746,6 +759,84 @@
do not participate in overload resolution.
</li></ul></div>
</div>
+<div class="section" title="Static Functions mpl::sign and static_sign">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_integer.bits_and_ints.sign.static_functions__mpl__sign__and__static_sign_"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.sign.static_functions__mpl__sign__and__static_sign_" title="Static Functions mpl::sign and static_sign">Static
+ Functions <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">sign</span></code> and <code class="computeroutput"><span class="identifier">static_sign</span></code></a>
+</h4></div></div></div>
+<p>
+ The compile-time versions can be included via <boost/integer/static_sign.hpp>.
+ </p>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">sign</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">template</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">Value</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">static_same_sign</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+</pre>
+<div class="informaltable"><table class="table">
+<colgroup>
+<col>
+<col>
+</colgroup>
+<thead><tr>
+<th>
+ <p>
+ Parameter
+ </p>
+ </th>
+<th>
+ <p>
+ Description
+ </p>
+ </th>
+</tr></thead>
+<tbody>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">IC</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ A <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">T</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The value type. Must be an integral type.
+ </p>
+ </td>
+</tr>
+<tr>
+<td>
+ <p>
+ <code class="computeroutput"><span class="identifier">Value</span></code>
+ </p>
+ </td>
+<td>
+ <p>
+ The value to be checked.
+ </p>
+ </td>
+</tr>
+</tbody>
+</table></div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
+ to be an integral type and <code class="computeroutput"><span class="identifier">IC</span></code>
+ to be an <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type.
+ </li></ul></div>
+</div>
<div class="section" title="Examples">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_integer.bits_and_ints.sign.examples"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.sign.examples" title="Examples">Examples</a>
@@ -876,11 +967,25 @@
<a name="boost_integer.bits_and_ints.population_count__count_bits_set_.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.population_count__count_bits_set_.synopsis" title="Synopsis">Synopsis</a>
</h4></div></div></div>
<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">pop_count</span><span class="special">(</span><span class="identifier">uintmax_t</span> <span class="identifier">value</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="identifier">uintmax_t</span> <span class="identifier">Value</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">static_pop_count</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">pop_count</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
</pre>
</div>
-<p>
- <span class="bold"><strong>Returns: </strong></span> The number of bits set in <code class="computeroutput"><span class="identifier">value</span></code>.
- </p>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">IC</span></code>
+ must be an <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Returns: </strong></span> The number of bits set in <code class="computeroutput"><span class="identifier">value</span></code>. For the compile-time versions,
+ the result will be on member <code class="computeroutput"><span class="identifier">value</span></code>.
+ </li>
+</ul></div>
</div>
<div class="section" title="Clear Least Bit Set">
<div class="titlepage"><div><div><h3 class="title">
@@ -895,13 +1000,22 @@
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_integer.bits_and_ints.clear_least_bit_set.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.clear_least_bit_set.synopsis" title="Synopsis">Synopsis</a>
</h4></div></div></div>
-<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">clear_least_bit_set</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">value</span><span class="special">);</span>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+<span class="identifier">T</span> <span class="identifier">clear_least_bit_set</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">value</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">clear_least_bit_set</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">Value</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">static_clear_least_bit_set</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
</pre>
</div>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
-<span class="bold"><strong>Remarks: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
- must be an integral type.
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
+ must be an integral type. <code class="computeroutput"><span class="identifier">IC</span></code>
+ must be an <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type.
</li>
<li class="listitem">
<span class="bold"><strong>Returns: </strong></span><code class="computeroutput"><span class="identifier">value</span></code>
@@ -916,21 +1030,293 @@
</h3></div></div></div>
<div class="toc"><dl><dt><span class="section">Synopsis</span></dt></dl></div>
<p>
- The <code class="computeroutput"><span class="identifier">count_trailing_zeros</span><span class="special">()</span></code> function counts the number of consecutive
- 0's from the least significant bit of an integral value. This function is
- defined on <boost/integer/count_trailing_zeros.hpp>
+ The <code class="computeroutput"><span class="identifier">count_trailing_zeros</span></code>
+ function and metafunctions counts the number of consecutive 0's from the
+ least significant bit of an integral value. The runtime function is defined
+ on <boost/integer/count_trailing_zeros.hpp>
+ and the compile-time metafunctions are defined on <boost/integer/static_count_trailing_zeros.hpp>
</p>
<div class="section" title="Synopsis">
<div class="titlepage"><div><div><h4 class="title">
<a name="boost_integer.bits_and_ints.count_trailing_zeros.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.count_trailing_zeros.synopsis" title="Synopsis">Synopsis</a>
</h4></div></div></div>
<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">count_trailing_zeros</span><span class="special">(</span><span class="identifier">uintmax_t</span> <span class="identifier">value</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">count_trailing_zeros</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="identifier">uintmax_t</span> <span class="identifier">Value</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">static_count_trailing_zeros</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
</pre>
</div>
-<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
-<span class="bold"><strong>Returns: </strong></span> The number of consecutive zeros
- from the least significant bit.
- </li></ul></div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span> For the <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">count_trailing_zeros</span><span class="special"><></span></code> version, <code class="computeroutput"><span class="identifier">IC</span></code>
+ must be an mpl::integral_c<> type.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Returns: </strong></span> For the runtime version, the
+ number of consecutive zeros from the least significant bit. In the compile-time
+ versions, the number of consecutive zeros in the <code class="computeroutput"><span class="identifier">value</span></code>
+ static member.
+ </li>
+</ul></div>
+</div>
+<div class="section" title="Safe Average">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_integer.bits_and_ints.safe_average"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.safe_average" title="Safe Average">Safe Average</a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Synopsis</span></dt></dl></div>
+<p>
+ Given two integer values x and y, the (floor of the) average normally would
+ be computed by <code class="computeroutput"><span class="special">(</span><span class="identifier">x</span><span class="special">+</span><span class="identifier">y</span><span class="special">)/</span><span class="number">2</span></code> unfortunately, this can yield incorrect results
+ due to overflow. Safe average ensures that no overflow will happen even if
+ <code class="computeroutput"><span class="special">(</span><span class="identifier">x</span><span class="special">+</span><span class="identifier">y</span><span class="special">)</span></code>
+ overflows the range of T. The runtime version is defined on <boost/integer/safe_avg.hpp>
+ and the compile-time metafunctions are defined on <boost/integer/static_safe_avg.hpp>
+ </p>
+<div class="section" title="Synopsis">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_integer.bits_and_ints.safe_average.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.safe_average.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+<span class="identifier">T</span> <span class="identifier">safe_avg</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">y</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ICT1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ICT2</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">safe_avg</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">Value1</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">Value2</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">static_safe_avg</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+</pre>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span> For the <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">safe_avg</span><span class="special"><></span></code> version, both <code class="computeroutput"><span class="identifier">ICT1</span></code>
+ and <code class="computeroutput"><span class="identifier">ICT2</span></code> must be mpl::integral_c<>
+ types. For the <code class="computeroutput"><span class="identifier">static_safe_avg</span><span class="special"><></span></code> and the runtime version, <code class="computeroutput"><span class="identifier">T</span></code> must be an integral type.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Returns: </strong></span> The average of the sum between
+ two integrals rounded down. Overflow is ensured to not happen.
+ </li>
+</ul></div>
+</div>
+<div class="section" title="Round to Power of 2 functions">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_integer.bits_and_ints.round_to_power_of_2_functions"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.round_to_power_of_2_functions" title="Round to Power of 2 functions">Round
+ to Power of 2 functions</a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Synopsis</span></dt></dl></div>
+<p>
+ This function rounds up and down integral values to the next power of 2.
+ The <code class="computeroutput"><span class="identifier">ceil_pow2</span></code> function rounds
+ up and <code class="computeroutput"><span class="identifier">floor_pow2</span></code> function
+ rounds down. These functions are defined on <boost/integer/round_power_2.hpp>
+ </p>
+<div class="section" title="Synopsis">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_integer.bits_and_ints.round_to_power_of_2_functions.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.round_to_power_of_2_functions.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="identifier">T</span> <span class="identifier">ceil_pow2</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">value</span><span class="special">);</span>
+<span class="identifier">T</span> <span class="identifier">floor_pow2</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">value</span><span class="special">);</span>
+</pre>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
+ must be convertible to <code class="computeroutput"><span class="identifier">uint8_t</span></code>
+ or <code class="computeroutput"><span class="identifier">uint16_t</span></code> or <code class="computeroutput"><span class="identifier">uint32_t</span></code> or <code class="computeroutput"><span class="identifier">uint64_t</span></code>.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Returns: </strong></span><div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">ceil_pow2</span><span class="special">()</span></code>
+ returns <code class="computeroutput"><span class="identifier">value</span></code> rounded
+ <span class="bold"><strong>up</strong></span> to the lesser power of two greater
+ than or equal to `value.
+ </li>
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">floor_pow2</span><span class="special">()</span></code>
+ returns <code class="computeroutput"><span class="identifier">value</span></code> rounded
+ <span class="bold"><strong>down</strong></span> to the greater power of two lesser
+ or equal <code class="computeroutput"><span class="identifier">value</span></code>.
+ </li>
+</ul></div>
+</li>
+</ul></div>
+</div>
+<div class="section" title="Transfer of Sign (isign) functions">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_integer.bits_and_ints.transfer_of_sign__isign__functions_"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.transfer_of_sign__isign__functions_" title="Transfer of Sign (isign) functions">Transfer
+ of Sign (isign) functions </a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Synopsis</span></dt></dl></div>
+<p>
+ isign or transfer of sign function is defined by:
+</p>
+<pre class="programlisting"><span class="identifier">isign</span><span class="special">(</span><span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span><span class="special">)</span> <span class="special">=</span>
+ <span class="identifier">abs</span><span class="special">(</span><span class="identifier">x</span><span class="special">),</span> <span class="keyword">if</span> <span class="identifier">y</span> <span class="identifier">is</span> <span class="identifier">greater</span> <span class="identifier">than</span> <span class="keyword">or</span> <span class="identifier">equal</span> <span class="number">0</span><span class="special">,</span>
+<span class="special">-</span><span class="identifier">abs</span><span class="special">(</span><span class="identifier">x</span><span class="special">),</span> <span class="keyword">if</span> <span class="identifier">y</span> <span class="identifier">is</span> <span class="identifier">less</span> <span class="identifier">than</span> <span class="number">0</span>
+</pre>
+<p>
+ </p>
+<p>
+ The runtime functions are defined on <boost/integer/isign.hpp>
+ and the static metafunctions are defined on <boost/integer/static_isign.hpp>
+ </p>
+<div class="section" title="Synopsis">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_integer.bits_and_ints.transfer_of_sign__isign__functions_.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.transfer_of_sign__isign__functions_.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
+<span class="identifier">T</span> <span class="identifier">isign</span><span class="special">(</span><span class="identifier">T</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">y</span><span class="special">);</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">Value1</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">Value2</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">static_isign</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">IC2</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">isign</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> <span class="identifier">IC1</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+</pre>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
+ must be an integral type. Both <code class="computeroutput"><span class="identifier">IC1</span></code>
+ and <code class="computeroutput"><span class="identifier">IC2</span></code> must be <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ types.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Returns: </strong></span><div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem">
+ Runtime version: returns <code class="computeroutput"><span class="identifier">abs</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code> if <code class="computeroutput"><span class="identifier">y</span></code>
+ is greater than or equal 0 and <code class="computeroutput"><span class="special">-</span><span class="identifier">abs</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span></code>
+ if <code class="computeroutput"><span class="identifier">y</span></code> is negative.
+ </li>
+<li class="listitem">
+ MPL version: the member <code class="computeroutput"><span class="identifier">value</span></code>
+ will be <code class="computeroutput"><span class="identifier">abs</span><span class="special">(</span><span class="identifier">IC1</span><span class="special">::</span><span class="identifier">value</span><span class="special">)</span></code>
+ if <code class="computeroutput"><span class="identifier">IC2</span></code> holds an value
+ greater than or equal 0, or <code class="computeroutput"><span class="special">-</span><span class="identifier">abs</span><span class="special">(</span><span class="identifier">IC1</span><span class="special">::</span><span class="identifier">value</span><span class="special">)</span></code>
+ if <code class="computeroutput"><span class="identifier">IC2</span></code> holds a negative
+ value.
+ </li>
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">static_isign</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">Value1</span><span class="special">,</span>
+ <span class="identifier">Value2</span><span class="special">>::</span><span class="identifier">value</span></code> will be <code class="computeroutput"><span class="identifier">abs</span><span class="special">(</span><span class="identifier">Value1</span><span class="special">)</span></code> if Value2 is greater than or equal
+ 0, or <code class="computeroutput"><span class="special">-</span><span class="identifier">abs</span><span class="special">(</span><span class="identifier">Value1</span><span class="special">)</span></code> if Value2 is negative.
+ </li>
+</ul></div>
+</li>
+</ul></div>
+</div>
+<div class="section" title="Absolute Value in Compile-Time">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_integer.bits_and_ints.absolute_value_in_compile_time_"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.absolute_value_in_compile_time_" title="Absolute Value in Compile-Time">Absolute
+ Value in Compile-Time </a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Synopsis</span></dt></dl></div>
+<p>
+ The static metafunctions defined on <boost/integer/static_abs.hpp>
+ calculates the absolute value of integral constants.
+ </p>
+<p>
+ <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">abs</span><span class="special"><></span></code>
+ version returns the absolute value of a <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code> and the <code class="computeroutput"><span class="identifier">static_abs</span><span class="special"><></span></code> version returns the absolute value
+ from an integral value.
+ </p>
+<div class="section" title="Synopsis">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_integer.bits_and_ints.absolute_value_in_compile_time_.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.absolute_value_in_compile_time_.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">abs</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">Value</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">static_abs</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+</pre>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
+ must be an integral type. <code class="computeroutput"><span class="identifier">IC</span></code>
+ a <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Results: </strong></span> The member <code class="computeroutput"><span class="identifier">value</span>
+ </code> in <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">abs</span><span class="special"><></span></code>
+ will be the absolute value of <code class="computeroutput"><span class="identifier">IC</span><span class="special">::</span><span class="identifier">value</span></code>.
+ In <code class="computeroutput"><span class="identifier">static_abs</span><span class="special"><></span></code>,
+ <code class="computeroutput"><span class="identifier">value</span></code> will be the absolute
+ value of <code class="computeroutput"><span class="identifier">Value</span></code>.
+ </li>
+</ul></div>
+</div>
+<div class="section" title="MPL Least Common Multiple">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_integer.bits_and_ints.mpl_least_common_multiple_"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.mpl_least_common_multiple_" title="MPL Least Common Multiple">MPL
+ Least Common Multiple </a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Synopsis</span></dt></dl></div>
+<p>
+ This header defines mpl::lcm<> metafunction wich calculates the least
+ common multiple from two given <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>.
+ </p>
+<p>
+ This static metafunction is defined on <boost/integer/static_lcm.hpp>.
+ </p>
+<div class="section" title="Synopsis">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_integer.bits_and_ints.mpl_least_common_multiple_.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.mpl_least_common_multiple_.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ICT1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ICT2</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lcm</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">uintmax_t</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+</pre>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">ICT1</span></code>
+ and <code class="computeroutput"><span class="identifier">ICT2</span></code> must be <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ types.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Results: </strong></span> The member <code class="computeroutput"><span class="identifier">value</span>
+ </code> will be the least common multiple from <code class="computeroutput"><span class="identifier">IC1</span></code>
+ and <code class="computeroutput"><span class="identifier">IC2</span></code>.
+ </li>
+</ul></div>
+</div>
+<div class="section" title="MPL Greatest Common Divisor">
+<div class="titlepage"><div><div><h3 class="title">
+<a name="boost_integer.bits_and_ints.mpl_greatest_common_divisor_"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.mpl_greatest_common_divisor_" title="MPL Greatest Common Divisor">MPL
+ Greatest Common Divisor </a>
+</h3></div></div></div>
+<div class="toc"><dl><dt><span class="section">Synopsis</span></dt></dl></div>
+<p>
+ The header file <boost/integer/static_gcd.hpp>
+ defines <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">gcd</span><span class="special"><></span></code>
+ metafunction wich calculates the greatest common divisor of two given <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>.
+ </p>
+<div class="section" title="Synopsis">
+<div class="titlepage"><div><div><h4 class="title">
+<a name="boost_integer.bits_and_ints.mpl_greatest_common_divisor_.synopsis"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.mpl_greatest_common_divisor_.synopsis" title="Synopsis">Synopsis</a>
+</h4></div></div></div>
+<pre class="programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">ICT1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ICT2</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">gcd</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">uintmax_t</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+</pre>
+</div>
+<div class="itemizedlist"><ul class="itemizedlist" type="disc">
+<li class="listitem">
+<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">ICT1</span></code>
+ and <code class="computeroutput"><span class="identifier">ICT2</span></code> must be <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ types.
+ </li>
+<li class="listitem">
+<span class="bold"><strong>Results: </strong></span> The member <code class="computeroutput"><span class="identifier">value</span>
+ </code> will be the greatest commom divisor from <code class="computeroutput"><span class="identifier">IC1</span></code>
+ and <code class="computeroutput"><span class="identifier">IC2</span></code>.
+ </li>
+</ul></div>
</div>
<div class="section" title="Binary Utilities">
<div class="titlepage"><div><div><h3 class="title">
@@ -938,14 +1324,17 @@
</h3></div></div></div>
<div class="toc"><dl>
<dt><span class="section">Synopsis</span></dt>
-<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__set_bit___">Template
- Class <code class="computeroutput"><span class="identifier">set_bit</span><span class="special"><></span></code></a></span></dt>
-<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__clear_bit___">Template
- Class <code class="computeroutput"><span class="identifier">clear_bit</span><span class="special"><></span></code></a></span></dt>
-<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__test_bit___">Template
- Class <code class="computeroutput"><span class="identifier">test_bit</span><span class="special"><></span></code></a></span></dt>
-<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__flip_bit___">Template
- Class <code class="computeroutput"><span class="identifier">flip_bit</span><span class="special"><></span></code></a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__static_set_bit____and__mpl__set_bit_">Template
+ Class <code class="computeroutput"><span class="identifier">static_set_bit</span><span class="special"><></span></code>
+ and <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">set_bit</span></code></a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__mpl__clear_bit____and__static_clear_bit___">Template
+ Class <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">clear_bit</span><span class="special"><></span></code>
+ and <code class="computeroutput"><span class="identifier">static_clear_bit</span><span class="special"><></span></code></a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__mpl__test_bit__and__static_test_bit___">Template
+ Class <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">test_bit</span></code> and <code class="computeroutput"><span class="identifier">static_test_bit</span><span class="special"><></span></code></a></span></dt>
+<dt><span class="section"><a href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__mpl__flip_bit____and__static_flip_bit___">Template
+ Class <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">flip_bit</span><span class="special"><></span></code>
+ and <code class="computeroutput"><span class="identifier">static_flip_bit</span><span class="special"><></span></code></a></span></dt>
</dl></div>
<p>
The header <boost/integer/bin_utils.hpp>
@@ -962,65 +1351,81 @@
<span class="comment">// Sets the bit `pos' in data
</span><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">data</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
-<span class="keyword">struct</span> <span class="identifier">set_bit</span>
-<span class="special">{</span>
- <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
-<span class="special">};</span> <span class="comment">// set_bit
-</span>
-
+<span class="keyword">struct</span> <span class="identifier">static_set_bit</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
<span class="comment">// Clear the bit `pos' in data
</span><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">data</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
-<span class="keyword">struct</span> <span class="identifier">clear_bit</span>
-<span class="special">{</span>
- <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
-<span class="special">};</span> <span class="comment">// clear_bit
-</span>
+<span class="keyword">struct</span> <span class="identifier">static_clear_bit</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
<span class="comment">// If the bit `pos' is 1 then it will be 0 if not the bit will be 1
</span><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">data</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
-<span class="keyword">struct</span> <span class="identifier">flip_bit</span>
-<span class="special">{</span>
- <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
-<span class="special">};</span> <span class="comment">// flip_bit
-</span>
+<span class="keyword">struct</span> <span class="identifier">static_flip_bit</span><span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="identifier">T</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
<span class="comment">// Test if the bit in `pos' positon is set or not
</span><span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">data</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
-<span class="keyword">struct</span> <span class="identifier">test_bit</span>
-<span class="special">{</span>
- <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span>
-<span class="special">};</span> <span class="comment">// test_bit
+<span class="keyword">struct</span> <span class="identifier">static_test_bit</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">namespace</span> <span class="identifier">mpl</span> <span class="special">{</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">set_bit</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">clear_bit</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">flip_bit</span><span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">::</span><span class="identifier">value_type</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">IC</span><span class="special">,</span> <span class="keyword">unsigned</span> <span class="keyword">char</span> <span class="identifier">pos</span><span class="special">></span>
+<span class="keyword">struct</span> <span class="identifier">test_bit</span> <span class="special">{</span> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="emphasis"><em>implementation-defined</em></span><span class="special">;</span> <span class="special">};</span>
+
+<span class="special">}</span> <span class="comment">// mpl
</span>
<span class="special">}</span> <span class="comment">// boost
</span></pre>
</div>
-<div class="section" title="Template Class set_bit<>">
+<div class="section" title="Template Class static_set_bit<> and mpl::set_bit">
<div class="titlepage"><div><div><h4 class="title">
-<a name="boost_integer.bits_and_ints.bin_utils.template_class__set_bit___"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__set_bit___" title="Template Class set_bit<>">Template
- Class <code class="computeroutput"><span class="identifier">set_bit</span><span class="special"><></span></code></a>
+<a name="boost_integer.bits_and_ints.bin_utils.template_class__static_set_bit____and__mpl__set_bit_"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__static_set_bit____and__mpl__set_bit_" title="Template Class static_set_bit<> and mpl::set_bit">Template
+ Class <code class="computeroutput"><span class="identifier">static_set_bit</span><span class="special"><></span></code>
+ and <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">set_bit</span></code></a>
</h4></div></div></div>
<p>
Sets the bit <code class="computeroutput"><span class="identifier">pos</span></code> active
- in <code class="computeroutput"><span class="identifier">data</span></code>.
+ in <code class="computeroutput"><span class="identifier">value</span></code>.
</p>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">pos</span></code>
- must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>.
+ must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>
+ for <code class="computeroutput"><span class="identifier">static_set_bit</span><span class="special"><></span></code>
+ and smaller than IC::value_type for <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">static_set_bit</span><span class="special"><></span></code>.
</li>
<li class="listitem">
-<span class="bold"><strong>Remarks: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
- must be an integral type. If this constraint is not met, this metafunction
- do not participate in overload resolution.
- </li>
+<span class="bold"><strong>Remarks: </strong></span><div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">T</span></code> must be an integral
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">static_set_bit</span><span class="special"><></span></code> do not participate in overload
+ resolution.
+ </li>
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">IC</span></code> must be a <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">set_bit</span><span class="special"><></span></code> metafunction do not participate
+ in overload resolution.
+ </li>
+</ul></div>
+</li>
<li class="listitem"><span class="bold"><strong>Example:</strong></span></li>
</ul></div>
<pre class="programlisting"><span class="comment">// `new_value' becomes 101
</span><span class="keyword">int</span> <span class="identifier">new_value</span> <span class="special">=</span> <span class="identifier">set_bit</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">100</span><span class="special">,</span> <span class="number">0</span><span class="special">>::</span><span class="identifier">value</span><span class="special">;</span>
</pre>
</div>
-<div class="section" title="Template Class clear_bit<>">
+<div class="section" title="Template Class mpl::clear_bit<> and static_clear_bit<>">
<div class="titlepage"><div><div><h4 class="title">
-<a name="boost_integer.bits_and_ints.bin_utils.template_class__clear_bit___"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__clear_bit___" title="Template Class clear_bit<>">Template
- Class <code class="computeroutput"><span class="identifier">clear_bit</span><span class="special"><></span></code></a>
+<a name="boost_integer.bits_and_ints.bin_utils.template_class__mpl__clear_bit____and__static_clear_bit___"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__mpl__clear_bit____and__static_clear_bit___" title="Template Class mpl::clear_bit<> and static_clear_bit<>">Template
+ Class <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">clear_bit</span><span class="special"><></span></code>
+ and <code class="computeroutput"><span class="identifier">static_clear_bit</span><span class="special"><></span></code></a>
</h4></div></div></div>
<p>
Sets the bit <code class="computeroutput"><span class="identifier">pos</span></code> inactive
@@ -1029,23 +1434,34 @@
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">pos</span></code>
- must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>.
+ must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>
+ for <code class="computeroutput"><span class="identifier">static_clear_bit</span><span class="special"><></span></code> and smaller than IC::value_type
+ for <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">static_clear_bit</span><span class="special"><></span></code>.
</li>
<li class="listitem">
-<span class="bold"><strong>Remarks: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
- must be an integral type. If this constraint is not met, this metafunction
- do not participate in overload resolution.
- </li>
+<span class="bold"><strong>Remarks: </strong></span><div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">T</span></code> must be an integral
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">static_clear_bit</span><span class="special"><></span></code> do not participate in overload
+ resolution.
+ </li>
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">IC</span></code> must be a <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">clear_bit</span><span class="special"><></span></code> metafunction do not participate
+ in overload resolution.
+ </li>
+</ul></div>
+</li>
<li class="listitem"><span class="bold"><strong>Example:</strong></span></li>
</ul></div>
<pre class="programlisting"><span class="comment">// `new_value' becomes 1
</span><span class="keyword">int</span> <span class="identifier">new_value</span> <span class="special">=</span> <span class="identifier">set_bit</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">2</span><span class="special">>::</span><span class="identifier">value</span><span class="special">;</span>
</pre>
</div>
-<div class="section" title="Template Class test_bit<>">
+<div class="section" title="Template Class mpl::test_bit and static_test_bit<>">
<div class="titlepage"><div><div><h4 class="title">
-<a name="boost_integer.bits_and_ints.bin_utils.template_class__test_bit___"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__test_bit___" title="Template Class test_bit<>">Template
- Class <code class="computeroutput"><span class="identifier">test_bit</span><span class="special"><></span></code></a>
+<a name="boost_integer.bits_and_ints.bin_utils.template_class__mpl__test_bit__and__static_test_bit___"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__mpl__test_bit__and__static_test_bit___" title="Template Class mpl::test_bit and static_test_bit<>">Template
+ Class <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">test_bit</span></code> and <code class="computeroutput"><span class="identifier">static_test_bit</span><span class="special"><></span></code></a>
</h4></div></div></div>
<p>
Test if the bit <code class="computeroutput"><span class="identifier">pos</span></code> in
@@ -1054,23 +1470,35 @@
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">pos</span></code>
- must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>.
+ must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>
+ for <code class="computeroutput"><span class="identifier">static_test_bit</span><span class="special"><></span></code>
+ and smaller than IC::value_type for <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">static_test_bit</span><span class="special"><></span></code>.
</li>
<li class="listitem">
-<span class="bold"><strong>Remarks: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
- must be an integral type. If this constraint is not met, this metafunction
- do not participate in overload resolution.
- </li>
+<span class="bold"><strong>Remarks: </strong></span><div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">T</span></code> must be an integral
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">static_test_bit</span><span class="special"><></span></code> do not participate in overload
+ resolution.
+ </li>
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">IC</span></code> must be a <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">test_bit</span><span class="special"><></span></code> metafunction do not participate
+ in overload resolution.
+ </li>
+</ul></div>
+</li>
<li class="listitem"><span class="bold"><strong>Example:</strong></span></li>
</ul></div>
<pre class="programlisting"><span class="comment">// `is_set' becomes true
</span><span class="keyword">bool</span> <span class="identifier">is_set</span> <span class="special">=</span> <span class="identifier">test_bit</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3982</span><span class="special">,</span> <span class="number">11</span><span class="special">>::</span><span class="identifier">value</span><span class="special">;</span>
</pre>
</div>
-<div class="section" title="Template Class flip_bit<>">
+<div class="section" title="Template Class mpl::flip_bit<> and static_flip_bit<>">
<div class="titlepage"><div><div><h4 class="title">
-<a name="boost_integer.bits_and_ints.bin_utils.template_class__flip_bit___"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__flip_bit___" title="Template Class flip_bit<>">Template
- Class <code class="computeroutput"><span class="identifier">flip_bit</span><span class="special"><></span></code></a>
+<a name="boost_integer.bits_and_ints.bin_utils.template_class__mpl__flip_bit____and__static_flip_bit___"></a><a class="link" href="bits_and_ints.html#boost_integer.bits_and_ints.bin_utils.template_class__mpl__flip_bit____and__static_flip_bit___" title="Template Class mpl::flip_bit<> and static_flip_bit<>">Template
+ Class <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">flip_bit</span><span class="special"><></span></code>
+ and <code class="computeroutput"><span class="identifier">static_flip_bit</span><span class="special"><></span></code></a>
</h4></div></div></div>
<p>
Invert the value of the bit <code class="computeroutput"><span class="identifier">pos</span></code>
@@ -1079,13 +1507,24 @@
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
<li class="listitem">
<span class="bold"><strong>Requires: </strong></span><code class="computeroutput"><span class="identifier">pos</span></code>
- must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>.
+ must be smaller than the size (in bits) of <code class="computeroutput"><span class="identifier">Type</span></code>
+ for <code class="computeroutput"><span class="identifier">static_flip_bit</span><span class="special"><></span></code>
+ and smaller than IC::value_type for <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">static_flip_bit</span><span class="special"><></span></code>.
</li>
<li class="listitem">
-<span class="bold"><strong>Remarks: </strong></span><code class="computeroutput"><span class="identifier">T</span></code>
- must be an integral type. If this constraint is not met, this metafunction
- do not participate in overload resolution.
- </li>
+<span class="bold"><strong>Remarks: </strong></span><div class="itemizedlist"><ul class="itemizedlist" type="circle">
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">T</span></code> must be an integral
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">static_flip_bit</span><span class="special"><></span></code> do not participate in overload
+ resolution.
+ </li>
+<li class="listitem">
+<code class="computeroutput"><span class="identifier">IC</span></code> must be a <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">integral_c</span><span class="special"><></span></code>
+ type. If this constraint is not met, <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">flip_bit</span><span class="special"><></span></code> metafunction do not participate
+ in overload resolution.
+ </li>
+</ul></div>
+</li>
<li class="listitem"><span class="bold"><strong>Example:</strong></span></li>
</ul></div>
<pre class="programlisting"><span class="comment">// `new_value' becomes 14
Modified: sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/history.html
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/history.html (original)
+++ sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/boost_integer/history.html 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -26,7 +26,7 @@
<a name="boost_integer.history"></a><a class="link" href="history.html" title="History"> History</a>
</h2></div></div></div>
<a name="boost_integer.history.1_42_0"></a><h5>
-<a name="id560880"></a>
+<a name="id36200325"></a>
<a class="link" href="history.html#boost_integer.history.1_42_0">1.42.0</a>
</h5>
<div class="itemizedlist"><ul class="itemizedlist" type="disc">
@@ -55,7 +55,7 @@
</li>
</ul></div>
<a name="boost_integer.history.1_32_0"></a><h5>
-<a name="id560998"></a>
+<a name="id36200445"></a>
<a class="link" href="history.html#boost_integer.history.1_32_0">1.32.0</a>
</h5>
<div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem">
Modified: sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/index.html
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/index.html (original)
+++ sandbox/SOC/2010/bits_and_ints/libs/integer/doc/html/index.html 2010-07-11 13:26:34 EDT (Sun, 11 Jul 2010)
@@ -255,7 +255,7 @@
</div>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
-<td align="left"><p><small>Last revised: June 21, 2010 at 20:43:18 GMT</small></p></td>
+<td align="left"><p><small>Last revised: July 11, 2010 at 17:24:10 GMT</small></p></td>
<td align="right"><div class="copyright-footer"></div></td>
</tr></table>
<hr>
Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk