summaryrefslogtreecommitdiff
path: root/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp')
-rw-r--r--boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp447
1 files changed, 114 insertions, 333 deletions
diff --git a/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp b/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp
index bf1edca53d..10bd9c7d3b 100644
--- a/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp
+++ b/boost/fusion/algorithm/iteration/detail/preprocessed/reverse_iter_fold.hpp
@@ -7,345 +7,138 @@
This is an auto-generated file. Do not edit!
==============================================================================*/
+# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
+# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) void
+# else
+# define BOOST_FUSION_FOLD_IMPL_ENABLER(T) typename T::type
+# endif
namespace boost { namespace fusion
{
namespace detail
{
- template<typename State, typename It, typename F>
- struct reverse_iter_fold_lvalue_state
- : fusion::detail::result_of_with_decltype<
- F(
- typename add_reference<typename add_const<State>::type>::type,
- It&)
- >
- {};
- template<typename Result,int N>
- struct unrolled_reverse_iter_fold
- {
- template<typename State3, typename It3, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call_3(State3 const& state3,It3 const& it3,F& f)
- {
- return unrolled_reverse_iter_fold<
- Result
- , N-4
- >::call(
- f(state3,it3),
- fusion::prior(it3),
- f);
- }
- template<typename State2, typename It2, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call_2(State2 const& state2,It2 const& it2,F& f)
- {
- return call_3(
- f(state2,it2),
- fusion::prior(it2),
- f);
- }
- template<typename State1, typename It1, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call_1(State1 const& state1,It1 const& it1,F& f)
- {
- return call_2(
- f(state1,it1),
- fusion::prior(it1),
- f);
- }
- template<typename State, typename It0, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call(State const& state,It0 const& it0,F f)
- {
- return call_1(
- f(state,it0),
- fusion::prior(it0),
- f);
- }
- };
- template<typename Result>
- struct unrolled_reverse_iter_fold<Result,3>
- {
- template<typename State2, typename It2, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call_2(State2 const& state2,It2 const& it2,F& f)
- {
- return f(state2,it2);
- }
- template<typename State1, typename It1, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call_1(State1 const& state1,It1 const& it1,F& f)
- {
- return call_2(
- f(state1,it1),
- fusion::prior(it1),
- f);
- }
- template<typename State, typename It0, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call(State const& state,It0 const& it0,F f)
- {
- return call_1(
- f(state,it0),
- fusion::prior(it0),
- f);
- }
- };
- template<typename Result>
- struct unrolled_reverse_iter_fold<Result,2>
- {
- template<typename State1, typename It1, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call_1(State1 const& state1,It1 const& it1,F& f)
- {
- return f(state1,it1);
- }
- template<typename State, typename It0, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call(State const& state,It0 const& it0,F f)
- {
- return call_1(
- f(state,it0),
- fusion::prior(it0),
- f);
- }
- };
- template<typename Result>
- struct unrolled_reverse_iter_fold<Result,1>
- {
- template<typename State, typename It0, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call(State const& state,It0 const& it0,F f)
- {
- return f(state,
- it0);
- }
- };
- template<typename Result>
- struct unrolled_reverse_iter_fold<Result,0>
- {
- template<typename State, typename It0, typename F>
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static Result
- call(State const& state,It0 const&, F)
- {
- return static_cast<Result>(state);
- }
- };
- template<typename StateRef, typename It0, typename F, int N>
- struct result_of_unrolled_reverse_iter_fold
- {
- typedef typename
- reverse_iter_fold_lvalue_state<
- StateRef
- , It0 const
- , F
- >::type
- rest1;
- typedef typename
- result_of::prior<
- It0 const
- >::type
- it1;
- typedef typename
- reverse_iter_fold_lvalue_state<
- rest1
- , it1
- , F
- >::type
- rest2;
- typedef typename
- result_of::prior<it1>::type
- it2;
- typedef typename
- reverse_iter_fold_lvalue_state<
- rest2
- , it2
- , F
- >::type
- rest3;
- typedef typename
- result_of::prior<it2>::type
- it3;
- typedef typename
- result_of_unrolled_reverse_iter_fold<
- typename reverse_iter_fold_lvalue_state<
- rest3
- , it3
- , F
- >::type
- , typename result_of::prior<
- it3
- >::type
- , F
- , N-4
- >::type
- type;
- };
- template<typename StateRef, typename It0, typename F>
- struct result_of_unrolled_reverse_iter_fold<
- StateRef
- , It0
- , F
- , 3
+ template<int SeqSize, typename It, typename State, typename F, typename = void
+# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
+
+ , bool = SeqSize == 0
+# endif
>
+ struct result_of_it_reverse_iter_fold
+ {};
+ template<typename It, typename State, typename F>
+ struct result_of_it_reverse_iter_fold<0,It,State,F
+ , typename boost::enable_if_has_type<BOOST_FUSION_FOLD_IMPL_ENABLER(State)>::type
+# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
+ , true
+# endif
+ >
{
- typedef typename
- reverse_iter_fold_lvalue_state<
- StateRef
- , It0 const
- , F
- >::type
- rest1;
- typedef typename
- result_of::prior<
- It0 const
- >::type
- it1;
- typedef typename
- reverse_iter_fold_lvalue_state<
- typename reverse_iter_fold_lvalue_state<
- rest1
- , it1
- , F
- >::type
- , typename result_of::prior<
- it1 const
- >::type const
- , F
- >::type
- type;
+ typedef typename State::type type;
};
- template<typename StateRef, typename It0, typename F>
- struct result_of_unrolled_reverse_iter_fold<
- StateRef
- , It0
- , F
- , 2
- >
- : reverse_iter_fold_lvalue_state<
- typename reverse_iter_fold_lvalue_state<
- StateRef
- , It0 const
- , F
- >::type
- , typename result_of::prior<
- It0 const
- >::type const
+ template<int SeqSize, typename It, typename State, typename F>
+ struct result_of_it_reverse_iter_fold<SeqSize,It,State,F
+ , typename boost::enable_if_has_type<
+# if BOOST_WORKAROUND (BOOST_MSVC, >= 1500)
+
+
+
+ typename boost::disable_if_c<SeqSize == 0, State>::type::type
+# else
+ BOOST_FUSION_FOLD_IMPL_ENABLER(State)
+# endif
+ >::type
+# if BOOST_WORKAROUND (BOOST_MSVC, < 1500)
+ , false
+# endif
+ >
+ : result_of_it_reverse_iter_fold<
+ SeqSize-1
+ , typename result_of::prior<It>::type
+ , boost::result_of<
+ F(
+ typename add_reference<typename State::type>::type,
+ It const&
+ )
+ >
, F
>
{};
- template<typename StateRef, typename It0, typename F>
- struct result_of_unrolled_reverse_iter_fold<
- StateRef
- , It0
+ template<typename It, typename State, typename F>
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ inline typename result_of_it_reverse_iter_fold<
+ 0
+ , It
+ , State
, F
- , 1
- >
- : reverse_iter_fold_lvalue_state<
- StateRef
- , It0 const
+ >::type
+ it_reverse_iter_fold(mpl::int_<0>, It const&, typename State::type state, F&)
+ {
+ return state;
+ }
+ template<typename It, typename State, typename F, int SeqSize>
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ inline typename lazy_enable_if_c<
+ SeqSize != 0
+ , result_of_it_reverse_iter_fold<
+ SeqSize
+ , It
+ , State
, F
>
- {};
- template<typename StateRef, typename It0, typename F>
- struct result_of_unrolled_reverse_iter_fold<
- StateRef
- , It0
- , F
- , 0
- >
+ >::type
+ it_reverse_iter_fold(mpl::int_<SeqSize>, It const& it, typename State::type state, F& f)
{
- typedef StateRef type;
- };
- template<typename StateRef, typename It0, typename F, int SeqSize>
- struct result_of_first_unrolledreverse_iter_fold
- {
- typedef typename
- result_of_unrolled_reverse_iter_fold<
- typename fusion::detail::result_of_with_decltype<
- F(
- StateRef,
- It0 const&
- )
- >::type
- , typename result_of::prior<
- It0 const
- >::type
- , F
- , SeqSize-1
- >::type
- type;
- };
- template<int SeqSize, typename StateRef, typename Seq, typename F>
- struct reverse_iter_fold_impl
- {
- typedef typename
- result_of_first_unrolledreverse_iter_fold<
- StateRef
- , typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
- , F
- , SeqSize
- >::type
- type;
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static type
- call(StateRef state, Seq& seq, F f)
- {
- typedef
- unrolled_reverse_iter_fold<
- type
- , SeqSize
- >
- unrolled_impl;
- return unrolled_impl::call(
- state,
- fusion::prior( fusion::end(seq)),
- f);
- }
- };
- template<typename StateRef, typename Seq, typename F>
- struct reverse_iter_fold_impl<0,StateRef,Seq,F>
- {
- typedef StateRef type;
- BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
- static StateRef
- call(StateRef state, Seq&, F)
- {
- return static_cast<StateRef>(state);
- }
- };
- template<typename Seq, typename State, typename F, bool IsSegmented>
+ return it_reverse_iter_fold<
+ typename result_of::prior<It>::type
+ , boost::result_of<
+ F(
+ typename add_reference<typename State::type>::type,
+ It const&
+ )
+ >
+ , F
+ >(
+ mpl::int_<SeqSize-1>()
+ , fusion::prior(it)
+ , f(state, it)
+ , f
+ );
+ }
+ template<typename Seq, typename State, typename F
+ , bool = traits::is_sequence<Seq>::value
+ , bool = traits::is_segmented<Seq>::value>
struct result_of_reverse_iter_fold
- : reverse_iter_fold_impl<
+ {};
+ template<typename Seq, typename State, typename F>
+ struct result_of_reverse_iter_fold<Seq, State, F, true, false>
+ : result_of_it_reverse_iter_fold<
result_of::size<Seq>::value
- , typename add_reference<
- typename add_const<State>::type
- >::type
- , Seq
+ , typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
+ , add_reference<State>
, F
>
{};
+ template<typename Seq, typename State, typename F>
+ BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
+ inline typename result_of_reverse_iter_fold<Seq, State, F>::type
+ reverse_iter_fold(Seq& seq, State& state, F& f)
+ {
+ return it_reverse_iter_fold<
+ typename fusion::result_of::prior< typename result_of::end<Seq>::type >::type
+ , add_reference<State>
+ , F
+ >(
+ typename result_of::size<Seq>::type()
+ , fusion::prior( fusion::end(seq) )
+ , state
+ , f
+ );
+ }
}
namespace result_of
{
template<typename Seq, typename State, typename F>
struct reverse_iter_fold
- : detail::result_of_reverse_iter_fold<
- Seq
- , State
- , F
- , traits::is_segmented<Seq>::type::value
- >
+ : detail::result_of_reverse_iter_fold<Seq, State, F>
{};
}
template<typename Seq, typename State, typename F>
@@ -357,10 +150,7 @@ namespace boost { namespace fusion
>::type
reverse_iter_fold(Seq& seq, State const& state, F f)
{
- return result_of::reverse_iter_fold<Seq,State const,F>::call(
- state,
- seq,
- f);
+ return detail::reverse_iter_fold<Seq, State const, F>(seq, state, f);
}
template<typename Seq, typename State, typename F>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
@@ -371,37 +161,28 @@ namespace boost { namespace fusion
>::type
reverse_iter_fold(Seq const& seq, State const& state, F f)
{
- return result_of::reverse_iter_fold<Seq const,State const,F>::call(
- state,
- seq,
- f);
+ return detail::reverse_iter_fold<Seq const, State const, F>(seq, state, f);
}
template<typename Seq, typename State, typename F>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_iter_fold<
Seq
- , State const
+ , State
, F
>::type
reverse_iter_fold(Seq& seq, State& state, F f)
{
- return result_of::reverse_iter_fold<Seq,State,F>::call(
- state,
- seq,
- f);
+ return detail::reverse_iter_fold<Seq, State, F>(seq, state, f);
}
template<typename Seq, typename State, typename F>
BOOST_CONSTEXPR BOOST_FUSION_GPU_ENABLED
inline typename result_of::reverse_iter_fold<
Seq const
- , State const
+ , State
, F
>::type
reverse_iter_fold(Seq const& seq, State& state, F f)
{
- return result_of::reverse_iter_fold<Seq const,State,F>::call(
- state,
- seq,
- f);
+ return detail::reverse_iter_fold<Seq const, State, F>(seq, state, f);
}
}}