comparison DEPENDENCIES/generic/include/boost/fusion/sequence/intrinsic/at.hpp @ 101:c530137014c0

Update Boost headers (1.58.0)
author Chris Cannam
date Mon, 07 Sep 2015 11:12:49 +0100
parents 2665513ce2d3
children
comparison
equal deleted inserted replaced
100:793467b5e61c 101:c530137014c0
5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 5 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 ==============================================================================*/ 6 ==============================================================================*/
7 #if !defined(FUSION_AT_05042005_0722) 7 #if !defined(FUSION_AT_05042005_0722)
8 #define FUSION_AT_05042005_0722 8 #define FUSION_AT_05042005_0722
9 9
10 #include <boost/fusion/support/config.hpp>
10 #include <boost/mpl/int.hpp> 11 #include <boost/mpl/int.hpp>
12 #include <boost/mpl/if.hpp>
13 #include <boost/mpl/less.hpp>
14 #include <boost/mpl/empty_base.hpp>
11 #include <boost/type_traits/is_const.hpp> 15 #include <boost/type_traits/is_const.hpp>
12 #include <boost/fusion/sequence/intrinsic_fwd.hpp> 16 #include <boost/fusion/sequence/intrinsic_fwd.hpp>
13 #include <boost/fusion/support/tag_of.hpp> 17 #include <boost/fusion/support/tag_of.hpp>
14 #include <boost/fusion/support/detail/access.hpp> 18 #include <boost/fusion/support/detail/access.hpp>
15 19
53 57
54 template <> 58 template <>
55 struct at_impl<std_tuple_tag>; 59 struct at_impl<std_tuple_tag>;
56 } 60 }
57 61
62 namespace detail
63 {
64 template <typename Sequence, typename N, typename Tag>
65 struct at_impl
66 : mpl::if_<
67 mpl::less<N, typename extension::size_impl<Tag>::template apply<Sequence>::type>
68 , typename extension::at_impl<Tag>::template apply<Sequence, N>
69 , mpl::empty_base
70 >::type
71 {};
72 }
73
58 namespace result_of 74 namespace result_of
59 { 75 {
60 template <typename Sequence, typename N> 76 template <typename Sequence, typename N>
61 struct at 77 struct at
62 : extension::at_impl<typename detail::tag_of<Sequence>::type>:: 78 : detail::at_impl<Sequence, N, typename detail::tag_of<Sequence>::type>
63 template apply<Sequence, N>
64 {}; 79 {};
65 80
66 template <typename Sequence, int N> 81 template <typename Sequence, int N>
67 struct at_c 82 struct at_c
68 : at<Sequence, mpl::int_<N> > 83 : at<Sequence, mpl::int_<N> >
69 {}; 84 {};
70 } 85 }
71 86
72 87
73 template <typename N, typename Sequence> 88 template <typename N, typename Sequence>
89 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
74 inline typename 90 inline typename
75 lazy_disable_if< 91 lazy_disable_if<
76 is_const<Sequence> 92 is_const<Sequence>
77 , result_of::at<Sequence, N> 93 , result_of::at<Sequence, N>
78 >::type 94 >::type
80 { 96 {
81 return result_of::at<Sequence, N>::call(seq); 97 return result_of::at<Sequence, N>::call(seq);
82 } 98 }
83 99
84 template <typename N, typename Sequence> 100 template <typename N, typename Sequence>
101 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
85 inline typename result_of::at<Sequence const, N>::type 102 inline typename result_of::at<Sequence const, N>::type
86 at(Sequence const& seq) 103 at(Sequence const& seq)
87 { 104 {
88 return result_of::at<Sequence const, N>::call(seq); 105 return result_of::at<Sequence const, N>::call(seq);
89 } 106 }
90 107
91 template <int N, typename Sequence> 108 template <int N, typename Sequence>
109 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
92 inline typename 110 inline typename
93 lazy_disable_if< 111 lazy_disable_if<
94 is_const<Sequence> 112 is_const<Sequence>
95 , result_of::at_c<Sequence, N> 113 , result_of::at_c<Sequence, N>
96 >::type 114 >::type
98 { 116 {
99 return fusion::at<mpl::int_<N> >(seq); 117 return fusion::at<mpl::int_<N> >(seq);
100 } 118 }
101 119
102 template <int N, typename Sequence> 120 template <int N, typename Sequence>
121 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
103 inline typename result_of::at_c<Sequence const, N>::type 122 inline typename result_of::at_c<Sequence const, N>::type
104 at_c(Sequence const& seq) 123 at_c(Sequence const& seq)
105 { 124 {
106 return fusion::at<mpl::int_<N> >(seq); 125 return fusion::at<mpl::int_<N> >(seq);
107 } 126 }