summaryrefslogtreecommitdiff
path: root/boost/fusion/sequence/intrinsic
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/sequence/intrinsic')
-rw-r--r--boost/fusion/sequence/intrinsic/at.hpp26
-rw-r--r--boost/fusion/sequence/intrinsic/at_key.hpp6
-rw-r--r--boost/fusion/sequence/intrinsic/back.hpp4
-rw-r--r--boost/fusion/sequence/intrinsic/begin.hpp8
-rw-r--r--boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp2
-rw-r--r--boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp6
-rw-r--r--boost/fusion/sequence/intrinsic/detail/segmented_end.hpp2
-rw-r--r--boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp13
-rw-r--r--boost/fusion/sequence/intrinsic/empty.hpp2
-rw-r--r--boost/fusion/sequence/intrinsic/end.hpp8
-rw-r--r--boost/fusion/sequence/intrinsic/front.hpp4
-rw-r--r--boost/fusion/sequence/intrinsic/has_key.hpp2
-rw-r--r--boost/fusion/sequence/intrinsic/segments.hpp4
-rw-r--r--boost/fusion/sequence/intrinsic/size.hpp18
-rw-r--r--boost/fusion/sequence/intrinsic/swap.hpp16
15 files changed, 70 insertions, 51 deletions
diff --git a/boost/fusion/sequence/intrinsic/at.hpp b/boost/fusion/sequence/intrinsic/at.hpp
index aa0d97445d..fdfa72a60a 100644
--- a/boost/fusion/sequence/intrinsic/at.hpp
+++ b/boost/fusion/sequence/intrinsic/at.hpp
@@ -9,6 +9,9 @@
#include <boost/fusion/support/config.hpp>
#include <boost/mpl/int.hpp>
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/less.hpp>
+#include <boost/mpl/empty_base.hpp>
#include <boost/type_traits/is_const.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/support/tag_of.hpp>
@@ -56,12 +59,23 @@ namespace boost { namespace fusion
struct at_impl<std_tuple_tag>;
}
+ namespace detail
+ {
+ template <typename Sequence, typename N, typename Tag>
+ struct at_impl
+ : mpl::if_<
+ mpl::less<N, typename extension::size_impl<Tag>::template apply<Sequence>::type>
+ , typename extension::at_impl<Tag>::template apply<Sequence, N>
+ , mpl::empty_base
+ >::type
+ {};
+ }
+
namespace result_of
{
template <typename Sequence, typename N>
struct at
- : extension::at_impl<typename detail::tag_of<Sequence>::type>::
- template apply<Sequence, N>
+ : detail::at_impl<Sequence, N, typename detail::tag_of<Sequence>::type>
{};
template <typename Sequence, int N>
@@ -72,7 +86,7 @@ namespace boost { namespace fusion
template <typename N, typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -84,7 +98,7 @@ namespace boost { namespace fusion
}
template <typename N, typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::at<Sequence const, N>::type
at(Sequence const& seq)
{
@@ -92,7 +106,7 @@ namespace boost { namespace fusion
}
template <int N, typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -104,7 +118,7 @@ namespace boost { namespace fusion
}
template <int N, typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_c<Sequence const, N>::type
at_c(Sequence const& seq)
{
diff --git a/boost/fusion/sequence/intrinsic/at_key.hpp b/boost/fusion/sequence/intrinsic/at_key.hpp
index 844de840e4..4693a90553 100644
--- a/boost/fusion/sequence/intrinsic/at_key.hpp
+++ b/boost/fusion/sequence/intrinsic/at_key.hpp
@@ -38,7 +38,7 @@ namespace boost { namespace fusion
>::type
type;
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type
call(Seq& seq)
{
@@ -74,7 +74,7 @@ namespace boost { namespace fusion
}
template <typename Key, typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -86,7 +86,7 @@ namespace boost { namespace fusion
}
template <typename Key, typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::at_key<Sequence const, Key>::type
at_key(Sequence const& seq)
{
diff --git a/boost/fusion/sequence/intrinsic/back.hpp b/boost/fusion/sequence/intrinsic/back.hpp
index f934355381..3f998a7d9a 100644
--- a/boost/fusion/sequence/intrinsic/back.hpp
+++ b/boost/fusion/sequence/intrinsic/back.hpp
@@ -27,7 +27,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::back<Sequence>::type
back(Sequence& seq)
{
@@ -35,7 +35,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::back<Sequence const>::type
back(Sequence const& seq)
{
diff --git a/boost/fusion/sequence/intrinsic/begin.hpp b/boost/fusion/sequence/intrinsic/begin.hpp
index af4e31225d..79c14d74ab 100644
--- a/boost/fusion/sequence/intrinsic/begin.hpp
+++ b/boost/fusion/sequence/intrinsic/begin.hpp
@@ -8,8 +8,8 @@
#define FUSION_BEGIN_04052005_1132
#include <boost/fusion/support/config.hpp>
-#include <boost/blank.hpp>
#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/empty_base.hpp>
#include <boost/mpl/if.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/support/tag_of.hpp>
@@ -36,7 +36,7 @@ namespace boost { namespace fusion
: mpl::if_<
traits::is_segmented<Sequence>
, detail::segmented_begin<Sequence>
- , blank
+ , mpl::empty_base
>::type
{};
};
@@ -71,7 +71,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -83,7 +83,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
diff --git a/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp b/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
index 81d09660b1..ec20ac414d 100644
--- a/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
+++ b/boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp
@@ -32,7 +32,7 @@ namespace boost { namespace fusion { namespace detail
>
type;
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq)
{
return type(
diff --git a/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp b/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
index 2ab462702d..12d9e24c47 100644
--- a/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
+++ b/boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp
@@ -38,7 +38,7 @@ namespace boost { namespace fusion { namespace detail
typedef cons<range_type, Context> type;
typedef mpl::false_ continue_type;
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, State const&, Context const& context, segmented_begin_fun)
{
return type(range_type(fusion::begin(seq), fusion::end(seq)), context);
@@ -64,7 +64,7 @@ namespace boost { namespace fusion { namespace detail
typedef typename fold_impl::type type;
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, Stack const& stack)
{
return fold_impl::call(seq, end_impl::call(seq, stack), stack, segmented_begin_fun());
@@ -79,7 +79,7 @@ namespace boost { namespace fusion { namespace detail
typedef iterator_range<begin_type, end_type> pair_type;
typedef cons<pair_type, Stack> type;
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Sequence& seq, Stack stack)
{
return type(pair_type(fusion::begin(seq), fusion::end(seq)), stack);
diff --git a/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp b/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
index c26865a671..55419ed80d 100644
--- a/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
+++ b/boost/fusion/sequence/intrinsic/detail/segmented_end.hpp
@@ -28,7 +28,7 @@ namespace boost { namespace fusion { namespace detail
>
type;
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Sequence & seq)
{
return type(
diff --git a/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp b/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
index 9be150433a..da48649a24 100644
--- a/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
+++ b/boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp
@@ -48,11 +48,18 @@ namespace boost { namespace fusion { namespace detail
typedef iterator_range<end_type, end_type> pair_type;
typedef cons<pair_type, Stack> type;
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ static pair_type make_pair(end_type end)
+ {
+ return pair_type(end, end);
+ }
+
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
static type call(Sequence & seq, Stack stack)
{
- end_type end = fusion::end(fusion::segments(seq));
- return type(pair_type(end, end), stack);
+ return type(
+ make_pair(fusion::end(fusion::segments(seq))),
+ stack);
}
};
diff --git a/boost/fusion/sequence/intrinsic/empty.hpp b/boost/fusion/sequence/intrinsic/empty.hpp
index 3c8666abd4..6a0dbe74a5 100644
--- a/boost/fusion/sequence/intrinsic/empty.hpp
+++ b/boost/fusion/sequence/intrinsic/empty.hpp
@@ -51,7 +51,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::empty<Sequence>::type
empty(Sequence const&)
{
diff --git a/boost/fusion/sequence/intrinsic/end.hpp b/boost/fusion/sequence/intrinsic/end.hpp
index 3e69518efa..b342468f0e 100644
--- a/boost/fusion/sequence/intrinsic/end.hpp
+++ b/boost/fusion/sequence/intrinsic/end.hpp
@@ -8,8 +8,8 @@
#define FUSION_END_04052005_1141
#include <boost/fusion/support/config.hpp>
-#include <boost/blank.hpp>
#include <boost/utility/enable_if.hpp>
+#include <boost/mpl/empty_base.hpp>
#include <boost/mpl/if.hpp>
#include <boost/fusion/sequence/intrinsic_fwd.hpp>
#include <boost/fusion/support/tag_of.hpp>
@@ -36,7 +36,7 @@ namespace boost { namespace fusion
: mpl::if_<
traits::is_segmented<Sequence>
, detail::segmented_end<Sequence>
- , blank
+ , mpl::empty_base
>::type
{};
};
@@ -71,7 +71,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
@@ -83,7 +83,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_enable_if<
traits::is_sequence<Sequence>
diff --git a/boost/fusion/sequence/intrinsic/front.hpp b/boost/fusion/sequence/intrinsic/front.hpp
index 6d939da3d3..8971298ac8 100644
--- a/boost/fusion/sequence/intrinsic/front.hpp
+++ b/boost/fusion/sequence/intrinsic/front.hpp
@@ -26,7 +26,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::front<Sequence>::type
front(Sequence& seq)
{
@@ -34,7 +34,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::front<Sequence const>::type
front(Sequence const& seq)
{
diff --git a/boost/fusion/sequence/intrinsic/has_key.hpp b/boost/fusion/sequence/intrinsic/has_key.hpp
index bba2c695b3..d69a82fbff 100644
--- a/boost/fusion/sequence/intrinsic/has_key.hpp
+++ b/boost/fusion/sequence/intrinsic/has_key.hpp
@@ -68,7 +68,7 @@ namespace boost { namespace fusion
}
template <typename Key, typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::has_key<Sequence, Key>::type
has_key(Sequence const&)
{
diff --git a/boost/fusion/sequence/intrinsic/segments.hpp b/boost/fusion/sequence/intrinsic/segments.hpp
index a1bbacaf06..41501a9643 100644
--- a/boost/fusion/sequence/intrinsic/segments.hpp
+++ b/boost/fusion/sequence/intrinsic/segments.hpp
@@ -54,7 +54,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename
lazy_disable_if<
is_const<Sequence>
@@ -67,7 +67,7 @@ namespace boost { namespace fusion
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::segments<Sequence const>::type
segments(Sequence const& seq)
{
diff --git a/boost/fusion/sequence/intrinsic/size.hpp b/boost/fusion/sequence/intrinsic/size.hpp
index 51e613f693..97aa3ef9ec 100644
--- a/boost/fusion/sequence/intrinsic/size.hpp
+++ b/boost/fusion/sequence/intrinsic/size.hpp
@@ -49,10 +49,10 @@ namespace boost { namespace fusion
template <typename Sequence>
struct apply : Sequence::template size<Sequence> {};
};
-
+
template <>
struct size_impl<boost_tuple_tag>;
-
+
template <>
struct size_impl<boost_array_tag>;
@@ -67,18 +67,14 @@ namespace boost { namespace fusion
{
template <typename Sequence>
struct size
- : extension::size_impl<typename detail::tag_of<Sequence>::type>::
- template apply<Sequence>
-
- {
- typedef typename extension::size_impl<typename detail::tag_of<Sequence>::type>::
- template apply<Sequence>::type size_application;
- BOOST_STATIC_CONSTANT(int, value = size_application::value);
- };
+ : mpl::int_<
+ extension::size_impl<typename detail::tag_of<Sequence>::type>
+ ::template apply<Sequence>::type::value
+ > {};
}
template <typename Sequence>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::size<Sequence>::type
size(Sequence const&)
{
diff --git a/boost/fusion/sequence/intrinsic/swap.hpp b/boost/fusion/sequence/intrinsic/swap.hpp
index 05ce9b44b1..8c49dc4896 100644
--- a/boost/fusion/sequence/intrinsic/swap.hpp
+++ b/boost/fusion/sequence/intrinsic/swap.hpp
@@ -14,19 +14,21 @@
#include <boost/fusion/support/is_sequence.hpp>
#include <boost/fusion/view/zip_view.hpp>
#include <boost/fusion/algorithm/iteration/for_each.hpp>
-#include <boost/utility/enable_if.hpp>
#include <boost/fusion/sequence/intrinsic/front.hpp>
#include <boost/fusion/sequence/intrinsic/back.hpp>
+#include <boost/core/enable_if.hpp>
#include <boost/mpl/and.hpp>
namespace boost { namespace fusion {
+
namespace result_of
{
template<typename Seq1, typename Seq2>
struct swap
- {
- typedef void type;
- };
+ : enable_if<mpl::and_<
+ traits::is_sequence<Seq1>,
+ traits::is_sequence<Seq2>
+ > > {};
}
namespace detail
@@ -40,7 +42,7 @@ namespace boost { namespace fusion {
};
template<typename Elem>
- BOOST_FUSION_GPU_ENABLED
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
void operator()(Elem const& e) const
{
using std::swap;
@@ -50,8 +52,8 @@ namespace boost { namespace fusion {
}
template<typename Seq1, typename Seq2>
- BOOST_FUSION_GPU_ENABLED
- typename enable_if<mpl::and_<traits::is_sequence<Seq1>, traits::is_sequence<Seq2> >, void>::type
+ BOOST_CXX14_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ inline typename result_of::swap<Seq1, Seq2>::type
swap(Seq1& lhs, Seq2& rhs)
{
typedef vector<Seq1&, Seq2&> references;