diff options
Diffstat (limited to 'boost/fusion/sequence/intrinsic')
-rw-r--r-- | boost/fusion/sequence/intrinsic/at.hpp | 26 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/at_key.hpp | 6 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/back.hpp | 4 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/begin.hpp | 8 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/detail/segmented_begin.hpp | 2 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/detail/segmented_begin_impl.hpp | 6 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/detail/segmented_end.hpp | 2 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/detail/segmented_end_impl.hpp | 13 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/empty.hpp | 2 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/end.hpp | 8 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/front.hpp | 4 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/has_key.hpp | 2 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/segments.hpp | 4 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/size.hpp | 18 | ||||
-rw-r--r-- | boost/fusion/sequence/intrinsic/swap.hpp | 16 |
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; |