1 /*=============================================================================
2 Copyright (c) 2001-2011 Joel de Guzman
3 Copyright (c) 2007 Dan Marsden
4 Copyright (c) 2009-2010 Christopher Schmidt
6 Distributed under the Boost Software License, Version 1.0. (See accompanying
7 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9 This is an auto-generated file. Do not edit!
10 ==============================================================================*/
11 # if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
12 # define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
14 # define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
16 namespace boost { namespace fusion
20 template<int SeqSize, typename It, typename State, typename F, typename = void
21 # if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
26 struct result_of_it_fold
28 template<typename It, typename State, typename F>
29 struct result_of_it_fold<0,It,State,F
30 , typename boost::enable_if_has_type<BOOST_FUSION_FOLD_IMPL_ENABLER(State)>::type
31 # if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
36 typedef typename State::type type;
38 template<int SeqSize, typename It, typename State, typename F>
39 struct result_of_it_fold<SeqSize,It,State,F
40 , typename boost::enable_if_has_type<
41 # if BOOST_WORKAROUND (BOOST_MSVC, >= 1500)
45 typename boost::disable_if_c<SeqSize == 0, State>::type::type
47 BOOST_FUSION_FOLD_IMPL_ENABLER(State)
50 # if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
56 , typename result_of::next<It>::type
59 typename add_reference<typename State::type>::type,
60 typename fusion::result_of::deref<It const>::type
66 template<typename It, typename State, typename F>
67 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
68 inline typename result_of_it_fold<
74 it_fold(mpl::int_<0>, It const&, typename State::type state, F&)
78 template<typename It, typename State, typename F, int SeqSize>
79 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
80 inline typename lazy_enable_if_c<
89 it_fold(mpl::int_<SeqSize>, It const& it, typename State::type state, F& f)
92 typename result_of::next<It>::type
95 typename add_reference<typename State::type>::type,
96 typename fusion::result_of::deref<It const>::type
101 mpl::int_<SeqSize-1>()
103 , f(state, fusion::deref(it))
107 template<typename Seq, typename State, typename F
108 , bool = traits::is_sequence<Seq>::value
109 , bool = traits::is_segmented<Seq>::value>
110 struct result_of_fold
112 template<typename Seq, typename State, typename F>
113 struct result_of_fold<Seq, State, F, true, false>
115 result_of::size<Seq>::value
116 , typename result_of::begin<Seq>::type
117 , add_reference<State>
121 template<typename Seq, typename State, typename F>
122 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
123 inline typename result_of_fold<Seq, State, F>::type
124 fold(Seq& seq, State& state, F& f)
127 typename result_of::begin<Seq>::type
128 , add_reference<State>
131 typename result_of::size<Seq>::type()
140 template<typename Seq, typename State, typename F>
142 : detail::result_of_fold<Seq, State, F>
145 template<typename Seq, typename State, typename F>
146 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
147 inline typename result_of::fold<
152 fold(Seq& seq, State const& state, F f)
154 return detail::fold<Seq, State const, F>(seq, state, f);
156 template<typename Seq, typename State, typename F>
157 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
158 inline typename result_of::fold<
163 fold(Seq const& seq, State const& state, F f)
165 return detail::fold<Seq const, State const, F>(seq, state, f);
167 template<typename Seq, typename State, typename F>
168 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
169 inline typename result_of::fold<
174 fold(Seq& seq, State& state, F f)
176 return detail::fold<Seq, State, F>(seq, state, f);
178 template<typename Seq, typename State, typename F>
179 BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
180 inline typename result_of::fold<
185 fold(Seq const& seq, State& state, F f)
187 return detail::fold<Seq const, State, F>(seq, state, f);