| |
| // Copyright Aleksey Gurtovoy 2000-2004 |
| // |
| // Distributed under the Boost Software License, Version 1.0. |
| // (See accompanying file LICENSE_1_0.txt or copy at |
| // http://www.boost.org/LICENSE_1_0.txt) |
| // |
| |
| // *Preprocessed* version of the main "reverse_iter_fold_impl.hpp" header |
| // -- DO NOT modify by hand! |
| |
| namespace ndnboost { namespace mpl { namespace aux { |
| |
| /// forward declaration |
| |
| template< |
| long N |
| , typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct reverse_iter_fold_impl; |
| |
| template< long N > |
| struct reverse_iter_fold_chunk; |
| |
| template<> struct reverse_iter_fold_chunk<0> |
| { |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct result_ |
| { |
| typedef First iter0; |
| typedef State fwd_state0; |
| typedef fwd_state0 bkwd_state0; |
| typedef bkwd_state0 state; |
| typedef iter0 iterator; |
| }; |
| }; |
| |
| template<> struct reverse_iter_fold_chunk<1> |
| { |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct result_ |
| { |
| typedef First iter0; |
| typedef State fwd_state0; |
| typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; |
| typedef typename mpl::next<iter0>::type iter1; |
| |
| |
| typedef fwd_state1 bkwd_state1; |
| typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; |
| typedef bkwd_state0 state; |
| typedef iter1 iterator; |
| }; |
| }; |
| |
| template<> struct reverse_iter_fold_chunk<2> |
| { |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct result_ |
| { |
| typedef First iter0; |
| typedef State fwd_state0; |
| typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; |
| typedef typename mpl::next<iter0>::type iter1; |
| typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; |
| typedef typename mpl::next<iter1>::type iter2; |
| |
| |
| typedef fwd_state2 bkwd_state2; |
| typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; |
| typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; |
| |
| |
| typedef bkwd_state0 state; |
| typedef iter2 iterator; |
| }; |
| }; |
| |
| template<> struct reverse_iter_fold_chunk<3> |
| { |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct result_ |
| { |
| typedef First iter0; |
| typedef State fwd_state0; |
| typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; |
| typedef typename mpl::next<iter0>::type iter1; |
| typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; |
| typedef typename mpl::next<iter1>::type iter2; |
| typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; |
| typedef typename mpl::next<iter2>::type iter3; |
| |
| |
| typedef fwd_state3 bkwd_state3; |
| typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; |
| typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; |
| typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; |
| |
| |
| typedef bkwd_state0 state; |
| typedef iter3 iterator; |
| }; |
| }; |
| |
| template<> struct reverse_iter_fold_chunk<4> |
| { |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct result_ |
| { |
| typedef First iter0; |
| typedef State fwd_state0; |
| typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; |
| typedef typename mpl::next<iter0>::type iter1; |
| typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; |
| typedef typename mpl::next<iter1>::type iter2; |
| typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; |
| typedef typename mpl::next<iter2>::type iter3; |
| typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; |
| typedef typename mpl::next<iter3>::type iter4; |
| |
| |
| typedef fwd_state4 bkwd_state4; |
| typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; |
| typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; |
| typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; |
| typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; |
| |
| |
| typedef bkwd_state0 state; |
| typedef iter4 iterator; |
| }; |
| }; |
| |
| template< long N > |
| struct reverse_iter_fold_chunk |
| { |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct result_ |
| { |
| typedef First iter0; |
| typedef State fwd_state0; |
| typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1; |
| typedef typename mpl::next<iter0>::type iter1; |
| typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2; |
| typedef typename mpl::next<iter1>::type iter2; |
| typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3; |
| typedef typename mpl::next<iter2>::type iter3; |
| typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4; |
| typedef typename mpl::next<iter3>::type iter4; |
| |
| |
| typedef reverse_iter_fold_impl< |
| ( (N - 4) < 0 ? 0 : N - 4 ) |
| , iter4 |
| , Last |
| , fwd_state4 |
| , BackwardOp |
| , ForwardOp |
| > nested_chunk; |
| |
| typedef typename nested_chunk::state bkwd_state4; |
| typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3; |
| typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2; |
| typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1; |
| typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0; |
| |
| |
| typedef bkwd_state0 state; |
| typedef typename nested_chunk::iterator iterator; |
| }; |
| }; |
| |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct reverse_iter_fold_step; |
| |
| template< |
| typename Last |
| , typename State |
| > |
| struct reverse_iter_fold_null_step |
| { |
| typedef Last iterator; |
| typedef State state; |
| }; |
| |
| template<> |
| struct reverse_iter_fold_chunk< -1 > |
| { |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct result_ |
| { |
| typedef typename if_< |
| typename is_same< First,Last >::type |
| , reverse_iter_fold_null_step< Last,State > |
| , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp > |
| >::type res_; |
| |
| typedef typename res_::state state; |
| typedef typename res_::iterator iterator; |
| }; |
| }; |
| |
| template< |
| typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct reverse_iter_fold_step |
| { |
| typedef reverse_iter_fold_chunk< -1 >::template result_< |
| typename mpl::next<First>::type |
| , Last |
| , typename apply2< ForwardOp,State,First >::type |
| , BackwardOp |
| , ForwardOp |
| > nested_step; |
| |
| typedef typename apply2< |
| BackwardOp |
| , typename nested_step::state |
| , First |
| >::type state; |
| |
| typedef typename nested_step::iterator iterator; |
| }; |
| |
| template< |
| long N |
| , typename First |
| , typename Last |
| , typename State |
| , typename BackwardOp |
| , typename ForwardOp |
| > |
| struct reverse_iter_fold_impl |
| : reverse_iter_fold_chunk<N> |
| ::template result_< First,Last,State,BackwardOp,ForwardOp > |
| { |
| }; |
| |
| }}} |