2 // Copyright Aleksey Gurtovoy 2000-2004
\r
4 // Distributed under the Boost Software License, Version 1.0.
\r
5 // (See accompanying file LICENSE_1_0.txt or copy at
\r
6 // http://www.boost.org/LICENSE_1_0.txt)
\r
9 // Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header
\r
10 // -- DO NOT modify by hand!
\r
12 namespace boost { namespace mpl { namespace aux {
\r
14 /// forward declaration
\r
21 , typename ForwardOp
\r
28 template<> struct fold_chunk<0>
\r
34 , typename ForwardOp
\r
38 typedef First iter0;
\r
39 typedef State state0;
\r
40 typedef state0 state;
\r
41 typedef iter0 iterator;
\r
45 template<> struct fold_chunk<1>
\r
51 , typename ForwardOp
\r
55 typedef First iter0;
\r
56 typedef State state0;
\r
57 typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
\r
58 typedef typename mpl::next<iter0>::type iter1;
\r
61 typedef state1 state;
\r
62 typedef iter1 iterator;
\r
66 template<> struct fold_chunk<2>
\r
72 , typename ForwardOp
\r
76 typedef First iter0;
\r
77 typedef State state0;
\r
78 typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
\r
79 typedef typename mpl::next<iter0>::type iter1;
\r
80 typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
\r
81 typedef typename mpl::next<iter1>::type iter2;
\r
84 typedef state2 state;
\r
85 typedef iter2 iterator;
\r
89 template<> struct fold_chunk<3>
\r
95 , typename ForwardOp
\r
99 typedef First iter0;
\r
100 typedef State state0;
\r
101 typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
\r
102 typedef typename mpl::next<iter0>::type iter1;
\r
103 typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
\r
104 typedef typename mpl::next<iter1>::type iter2;
\r
105 typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
\r
106 typedef typename mpl::next<iter2>::type iter3;
\r
109 typedef state3 state;
\r
110 typedef iter3 iterator;
\r
114 template<> struct fold_chunk<4>
\r
120 , typename ForwardOp
\r
124 typedef First iter0;
\r
125 typedef State state0;
\r
126 typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
\r
127 typedef typename mpl::next<iter0>::type iter1;
\r
128 typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
\r
129 typedef typename mpl::next<iter1>::type iter2;
\r
130 typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
\r
131 typedef typename mpl::next<iter2>::type iter3;
\r
132 typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
\r
133 typedef typename mpl::next<iter3>::type iter4;
\r
136 typedef state4 state;
\r
137 typedef iter4 iterator;
\r
148 , typename ForwardOp
\r
161 ( (N - 4) < 0 ? 0 : N - 4 )
\r
162 , typename chunk_::iterator
\r
164 , typename chunk_::state
\r
168 typedef typename res_::state state;
\r
169 typedef typename res_::iterator iterator;
\r
177 , typename ForwardOp
\r
185 struct fold_null_step
\r
187 typedef Last iterator;
\r
188 typedef State state;
\r
192 struct fold_chunk< -1 >
\r
198 , typename ForwardOp
\r
202 typedef typename if_<
\r
203 typename is_same< First,Last >::type
\r
204 , fold_null_step< Last,State >
\r
205 , fold_step< First,Last,State,ForwardOp >
\r
208 typedef typename res_::state state;
\r
209 typedef typename res_::iterator iterator;
\r
217 , typename ForwardOp
\r
221 typedef fold_chunk< -1 >::template result_<
\r
222 typename mpl::next<First>::type
\r
224 , typename apply2<ForwardOp,State, typename deref<First>::type>::type
\r
228 typedef typename chunk_::state state;
\r
229 typedef typename chunk_::iterator iterator;
\r
237 , typename ForwardOp
\r
241 ::template result_< First,Last,State,ForwardOp >
\r