|
Boost-Commit : |
Subject: [Boost-commit] svn:boost r63968 - sandbox/SOC/2010/bits_and_ints/boost/integer
From: muriloufg_at_[hidden]
Date: 2010-07-13 12:50:20
Author: murilov
Date: 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
New Revision: 63968
URL: http://svn.boost.org/trac/boost/changeset/63968
Log:
Removed enable_if<>'s from static metafunctions and replaced with BOOST_STATIC_ASSERT()
Text files modified:
sandbox/SOC/2010/bits_and_ints/boost/integer/same_sign.hpp | 7 ++++---
sandbox/SOC/2010/bits_and_ints/boost/integer/static_bit_reversal.hpp | 17 +++++++++++------
sandbox/SOC/2010/bits_and_ints/boost/integer/static_clear_least_bit_set.hpp | 20 +++++++++++++-------
sandbox/SOC/2010/bits_and_ints/boost/integer/static_count_trailing_zeros.hpp | 9 +++++----
sandbox/SOC/2010/bits_and_ints/boost/integer/static_isign.hpp | 24 ++++++++++--------------
sandbox/SOC/2010/bits_and_ints/boost/integer/static_pop_count.hpp | 10 ++++++----
sandbox/SOC/2010/bits_and_ints/boost/integer/static_safe_avg.hpp | 24 ++++++++++--------------
sandbox/SOC/2010/bits_and_ints/boost/integer/static_same_sign.hpp | 15 ++++++++++-----
sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign.hpp | 25 +++++++++++--------------
sandbox/SOC/2010/bits_and_ints/boost/integer/static_sign_extend.hpp | 18 ++++++++++++------
10 files changed, 92 insertions(+), 77 deletions(-)
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/same_sign.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/same_sign.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/same_sign.hpp 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -7,8 +7,8 @@
// See http://www.boost.org for updates, documentation, and revision history.
+#include <boost/static_assert.hpp>
#include <boost/type_traits/is_integral.hpp>
-#include <boost/utility/enable_if.hpp>
namespace boost {
@@ -22,9 +22,10 @@
*/
template <typename T>
-inline typename enable_if<is_integral<T>, bool>::type
-same_sign(T first, T second)
+bool same_sign(T first, T second)
{
+ BOOST_STATIC_ASSERT((is_integral<T>::value));
+
T temp = first ^ second;
temp = temp >> ((sizeof(T) * 8) - 1);
temp = temp & T(1);
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_bit_reversal.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_bit_reversal.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_bit_reversal.hpp 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -10,10 +10,11 @@
#ifndef BOOST_STATIC_BIT_REVERSAL_INCLUDED
#define BOOST_STATIC_BIT_REVERSAL_INCLUDED
-#include <boost/utility/enable_if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/integral_c.hpp>
#include <boost/type_traits/is_integral.hpp>
+#include <boost/integer/is_integral_constant.hpp>
#include <boost/integer/detail/static_bit_reversal.hpp>
-#include <boost/mpl/integral_c.hpp>
/*
* Reverses the bits in data in compile-time
@@ -37,15 +38,19 @@
typename IC::value_type,
IC::value, sizeof(typename IC::value_type) * 8
>
-{}; // struct bit_reversal
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC>::value));
+}; // struct bit_reversal
} // namespace mpl
// If T is an integral type, static_bit_reversal<T, data>::value will
// be `data' with the bits reversed
-template <typename T, T data, class Enable = typename enable_if< is_integral<T> >::type>
-struct static_bit_reversal : mpl::bit_reversal< mpl::integral_c<T, data> >
-{}; // struct static_bit_reversal<>
+template <typename T, T Value>
+struct static_bit_reversal : mpl::bit_reversal< mpl::integral_c<T, Value> >
+{
+ BOOST_STATIC_ASSERT((is_integral<T>::value));
+}; // struct static_bit_reversal<>
} // namespace 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-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -10,8 +10,9 @@
#ifndef BOOST_STATIC_CLEAR_LEAST_BIT_SET
#define BOOST_STATIC_CLEAR_LEAST_BIT_SET
+#include <boost/static_assert.hpp>
#include <boost/mpl/integral_c.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <boost/type_traits/is_integral.hpp>
#include <boost/integer/is_integral_constant.hpp>
/*
@@ -36,10 +37,12 @@
/*
* Requires IC to be a mpl::integral_c<> type
*/
-template <typename IC,
- class Enable = typename enable_if< is_integral_constant<IC> >::type>
-struct clear_least_bit_set : integral_c<typename IC::value_type, (IC::value & (IC::value - 1))>
-{};
+template <typename IC>
+struct clear_least_bit_set :
+ integral_c<typename IC::value_type, (IC::value & (IC::value - 1))>
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC>::value));
+};
}
@@ -47,8 +50,11 @@
* 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> >
-{};
+struct static_clear_least_bit_set :
+ mpl::clear_least_bit_set< mpl::integral_c<T, Value> >
+{
+ BOOST_STATIC_ASSERT((is_integral<T>::value));
+};
}
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_count_trailing_zeros.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_count_trailing_zeros.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_count_trailing_zeros.hpp 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -11,8 +11,8 @@
#define BOOST_STATIC_COUNT_TRAILING_ZEROS_INCLUDED
#include <boost/cstdint.hpp>
+#include <boost/static_assert.hpp>
#include <boost/mpl/integral_c.hpp>
-#include <boost/utility/enable_if.hpp>
#include <boost/integer/static_pop_count.hpp>
#include <boost/integer/is_integral_constant.hpp>
@@ -39,10 +39,11 @@
/*
* MPL integral_c<> compatible version
*/
-template <typename IC,
- class Enable = typename enable_if< is_integral_constant<IC> >::type>
+template <typename IC>
struct count_trailing_zeros : pop_count< integral_c<uintmax_t, ~IC::value & (IC::value - 1)> >
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC>::value));
+};
}
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_isign.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_isign.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_isign.hpp 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -10,9 +10,8 @@
#ifndef BOOST_STATIC_ISIGN_INCLUDED
#define BOOST_STATIC_ISIGN_INCLUDED
-#include <boost/mpl/and.hpp>
+#include <boost/static_assert.hpp>
#include <boost/mpl/integral_c.hpp>
-#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/integer/is_integral_constant.hpp>
@@ -28,32 +27,29 @@
/*
* This metafunction requires IC1 and IC2 to be mpl::integral_c<> types
*/
-template <typename IC1, typename IC2,
- class Enable = typename enable_if<
- and_<
- is_integral_constant<IC1>,
- is_integral_constant<IC2>
- >
- >::type
->
+template <typename IC1, typename IC2>
struct isign : integral_c<typename IC1::value_type,
((IC1::value ^ ((IC1::value ^ IC2::value) >> (sizeof(typename IC1::value_type) * 8 - 1)))
- ((IC1::value ^ IC2::value) >> (sizeof(typename IC1::value_type) * 8 - 1)))
>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC1>::value));
+ BOOST_STATIC_ASSERT((is_integral_constant<IC2>::value));
+};
} // mpl
/*
* This metafunction requires T to be an integral type
*/
-template <typename T, T Value1, T Value2,
- class Enable = typename enable_if< is_integral<T> >::type>
+template <typename T, T Value1, T Value2>
struct static_isign : mpl::isign<
mpl::integral_c<T, Value1>,
mpl::integral_c<T, Value2>
>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral<T>::value));
+};
} // boost
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_pop_count.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_pop_count.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_pop_count.hpp 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -10,9 +10,9 @@
#ifndef BOOST_STATIC_POP_COUNT
#define BOOST_STATIC_POP_COUNT
-#include <boost/mpl/integral_c.hpp>
#include <boost/config/suffix.hpp>
-#include <boost/utility/enable_if.hpp>
+#include <boost/static_assert.hpp>
+#include <boost/mpl/integral_c.hpp>
#include <boost/integer/is_integral_constant.hpp>
namespace boost {
@@ -59,9 +59,11 @@
namespace mpl {
-template <typename IC, class Enable = typename enable_if< is_integral_constant<IC> >::type>
+template <typename IC>
struct pop_count : integral_c<int, static_pop_count<IC::value>::value>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC>::value));
+};
}
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_safe_avg.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_safe_avg.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_safe_avg.hpp 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -10,9 +10,8 @@
#ifndef BOOST_STATIC_SAFE_AVG_INCLUDED
#define BOOST_STATIC_SAFE_AVG_INCLUDED
-#include <boost/mpl/and.hpp>
+#include <boost/static_assert.hpp>
#include <boost/mpl/integral_c.hpp>
-#include <boost/utility/enable_if.hpp>
#include <boost/type_traits/is_integral.hpp>
#include <boost/integer/is_integral_constant.hpp>
@@ -29,29 +28,26 @@
namespace mpl {
-template <typename IC1, typename IC2,
- class Enable = typename enable_if<
- and_<
- is_integral_constant<IC1>,
- is_integral_constant<IC2>
- >
- >::type
->
+template <typename IC1, typename IC2>
struct safe_avg : integral_c<
typename IC1::value_type,
((IC1::value & IC2::value) + ((IC1::value ^ IC2::value) >> 1))
>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC1>::value));
+ BOOST_STATIC_ASSERT((is_integral_constant<IC2>::value));
+};
}
-template <typename T, T Value1, T Value2,
- class Enable = typename enable_if< is_integral<T> >::type>
+template <typename T, T Value1, T Value2>
struct static_safe_avg : mpl::safe_avg<
mpl::integral_c<T, Value1>,
mpl::integral_c<T, Value2>
>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral<T>::value));
+};
} // boost
Modified: sandbox/SOC/2010/bits_and_ints/boost/integer/static_same_sign.hpp
==============================================================================
--- sandbox/SOC/2010/bits_and_ints/boost/integer/static_same_sign.hpp (original)
+++ sandbox/SOC/2010/bits_and_ints/boost/integer/static_same_sign.hpp 2010-07-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -10,10 +10,10 @@
#ifndef BOOST_STATIC_SAME_SIGN_INCLUDED
#define BOOST_STATIC_SAME_SIGN_INCLUDED
-#include <boost/mpl/integral_c.hpp>
#include <boost/mpl/bool.hpp>
+#include <boost/mpl/integral_c.hpp>
+#include <boost/static_assert.hpp>
#include <boost/type_traits/is_integral.hpp>
-#include <boost/utility/enable_if.hpp>
#include <boost/integer/static_sign.hpp>
namespace boost {
@@ -39,7 +39,10 @@
struct same_sign : bool_<
sign<IC1>::value == sign<IC2>::value
>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC1>::value));
+ BOOST_STATIC_ASSERT((is_integral_constant<IC2>::value));
+};
}
@@ -48,9 +51,11 @@
* - false: if the signs of FIRST and SECOND are different
* - true: if the signs are equal
*/
-template <typename T, T first, T second, class Enable = typename enable_if<is_integral<T> >::type>
+template <typename T, T first, T second>
struct static_same_sign : mpl::same_sign< mpl::integral_c<T, first>, mpl::integral_c<T, second> >
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral<T>::value));
+};
}
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-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -11,12 +11,13 @@
#ifndef BOOST_STATIC_SIGN_INCLUDED
#define BOOST_STATIC_SIGN_INCLUDED
-#include <boost/utility/enable_if.hpp>
-#include <boost/integer/is_integral_constant.hpp>
#include <boost/mpl/if.hpp>
+#include <boost/static_assert.hpp>
#include <boost/mpl/integral_c.hpp>
+#include <boost/type_traits/is_integral.hpp>
#include <boost/type_traits/is_unsigned.hpp>
#include <boost/type_traits/make_signed.hpp>
+#include <boost/integer/is_integral_constant.hpp>
namespace boost {
@@ -26,11 +27,7 @@
namespace mpl {
-template <typename IC
- , class Enable = typename enable_if<
- is_integral_constant<IC>
- >::type
->
+template <typename IC>
struct sign :
integral_c<
typename make_signed<
@@ -38,17 +35,17 @@
>::type,
(IC::value == 0 ? 0 : (IC::value > 0 ? 1 : -1))
>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC>::value));
+};
}
-template <typename T, T Value
- , class Enable = typename enable_if<
- is_integral<T>
- >::type
->
+template <typename T, T Value>
struct static_sign : mpl::sign<mpl::integral_c<T, Value> >
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral<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-13 12:50:18 EDT (Tue, 13 Jul 2010)
@@ -10,9 +10,10 @@
#ifndef BOOST_STATIC_SIGN_EXTEND_INCLUDED
#define BOOST_STATIC_SIGN_EXTEND_INCLUDED
-#include <boost/utility/enable_if.hpp>
-#include <boost/type_traits/is_integral.hpp>
+#include <boost/static_assert.hpp>
#include <boost/mpl/integral_c.hpp>
+#include <boost/type_traits/is_integral.hpp>
+#include <boost/integer/is_integral_constant.hpp>
/*
* Extend `data' represented in `Bits' bits to sizeof(T) * 8
@@ -49,15 +50,20 @@
^ (typename IC::value_type(1) << (Bits - 1)))
- (typename IC::value_type(1) << (Bits - 1)))
>
-{};
+{
+ BOOST_STATIC_ASSERT((is_integral_constant<IC>::value));
+ BOOST_STATIC_ASSERT((Bits > 0 && Bits < (sizeof(typename IC::value_type) * 8)));
+};
}
// Compile-time version of sign_extend
-template<typename T, T data, std::size_t Bits,
- class Enable = typename enable_if< is_integral<T> >::type>
+template<typename T, T data, std::size_t Bits>
struct static_sign_extend : mpl::sign_extend<mpl::integral_c<T, data>, Bits>
-{}; // boost::static_sign_extend
+{
+ BOOST_STATIC_ASSERT((is_integral<T>::value));
+ BOOST_STATIC_ASSERT((Bits > 0 && Bits < (sizeof(T) * 8)));
+}; // boost::static_sign_extend
} // boost
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