2 // Copyright Aleksey Gurtovoy 2000-2004
4 // Distributed under the Boost Software License, Version 1.0.
5 // (See accompanying file LICENSE_1_0.txt or copy at
6 // http://www.boost.org/LICENSE_1_0.txt)
9 // Preprocessed version of "boost/mpl/aux_/reverse_fold_impl.hpp" header
10 // -- DO NOT modify by hand!
12 namespace boost { namespace mpl { namespace aux {
14 /// forward declaration
24 struct reverse_fold_impl;
27 struct reverse_fold_chunk;
29 template<> struct reverse_fold_chunk<0>
41 typedef State fwd_state0;
42 typedef fwd_state0 bkwd_state0;
43 typedef bkwd_state0 state;
44 typedef iter0 iterator;
48 template<> struct result_< int,int,int,int,int >
56 template<> struct reverse_fold_chunk<1>
68 typedef State fwd_state0;
69 typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
70 typedef typename mpl::next<iter0>::type iter1;
73 typedef fwd_state1 bkwd_state1;
74 typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
75 typedef bkwd_state0 state;
76 typedef iter1 iterator;
80 template<> struct result_< int,int,int,int,int >
88 template<> struct reverse_fold_chunk<2>
100 typedef State fwd_state0;
101 typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
102 typedef typename mpl::next<iter0>::type iter1;
103 typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
104 typedef typename mpl::next<iter1>::type iter2;
107 typedef fwd_state2 bkwd_state2;
108 typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
109 typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
112 typedef bkwd_state0 state;
113 typedef iter2 iterator;
117 template<> struct result_< int,int,int,int,int >
120 typedef int iterator;
125 template<> struct reverse_fold_chunk<3>
131 , typename BackwardOp
137 typedef State fwd_state0;
138 typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
139 typedef typename mpl::next<iter0>::type iter1;
140 typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
141 typedef typename mpl::next<iter1>::type iter2;
142 typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
143 typedef typename mpl::next<iter2>::type iter3;
146 typedef fwd_state3 bkwd_state3;
147 typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
148 typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
149 typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
152 typedef bkwd_state0 state;
153 typedef iter3 iterator;
157 template<> struct result_< int,int,int,int,int >
160 typedef int iterator;
165 template<> struct reverse_fold_chunk<4>
171 , typename BackwardOp
177 typedef State fwd_state0;
178 typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
179 typedef typename mpl::next<iter0>::type iter1;
180 typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
181 typedef typename mpl::next<iter1>::type iter2;
182 typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
183 typedef typename mpl::next<iter2>::type iter3;
184 typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
185 typedef typename mpl::next<iter3>::type iter4;
188 typedef fwd_state4 bkwd_state4;
189 typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
190 typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
191 typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
192 typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
195 typedef bkwd_state0 state;
196 typedef iter4 iterator;
200 template<> struct result_< int,int,int,int,int >
203 typedef int iterator;
209 struct reverse_fold_chunk
215 , typename BackwardOp
221 typedef State fwd_state0;
222 typedef typename apply2< ForwardOp, fwd_state0, typename deref<iter0>::type >::type fwd_state1;
223 typedef typename mpl::next<iter0>::type iter1;
224 typedef typename apply2< ForwardOp, fwd_state1, typename deref<iter1>::type >::type fwd_state2;
225 typedef typename mpl::next<iter1>::type iter2;
226 typedef typename apply2< ForwardOp, fwd_state2, typename deref<iter2>::type >::type fwd_state3;
227 typedef typename mpl::next<iter2>::type iter3;
228 typedef typename apply2< ForwardOp, fwd_state3, typename deref<iter3>::type >::type fwd_state4;
229 typedef typename mpl::next<iter3>::type iter4;
232 typedef reverse_fold_impl<
233 ( (N - 4) < 0 ? 0 : N - 4 )
241 typedef typename nested_chunk::state bkwd_state4;
242 typedef typename apply2< BackwardOp, bkwd_state4, typename deref<iter3>::type >::type bkwd_state3;
243 typedef typename apply2< BackwardOp, bkwd_state3, typename deref<iter2>::type >::type bkwd_state2;
244 typedef typename apply2< BackwardOp, bkwd_state2, typename deref<iter1>::type >::type bkwd_state1;
245 typedef typename apply2< BackwardOp, bkwd_state1, typename deref<iter0>::type >::type bkwd_state0;
248 typedef bkwd_state0 state;
249 typedef typename nested_chunk::iterator iterator;
257 , typename BackwardOp
260 struct reverse_fold_step;
266 struct reverse_fold_null_step
268 typedef Last iterator;
273 struct reverse_fold_chunk< -1 >
279 , typename BackwardOp
284 typedef typename if_<
285 typename is_same< First,Last >::type
286 , reverse_fold_null_step< Last,State >
287 , reverse_fold_step< First,Last,State,BackwardOp,ForwardOp >
290 typedef typename res_::state state;
291 typedef typename res_::iterator iterator;
295 template<> struct result_< int,int,int,int,int >
298 typedef int iterator;
307 , typename BackwardOp
310 struct reverse_fold_step
312 typedef reverse_fold_chunk< -1 >::template result_<
313 typename mpl::next<First>::type
315 , typename apply2<ForwardOp,State, typename deref<First>::type>::type
320 typedef typename apply2<
322 , typename nested_step::state
323 , typename deref<First>::type
326 typedef typename nested_step::iterator iterator;
334 , typename BackwardOp
337 struct reverse_fold_impl
338 : reverse_fold_chunk<N>
339 ::template result_< First,Last,State,BackwardOp,ForwardOp >