1 
2 // Copyright Aleksey Gurtovoy 2000-2004
3 //
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)
7 //
8 
9 // Preprocessed version of "boost/mpl/aux_/reverse_iter_fold_impl.hpp" header
10 // -- DO NOT modify by hand!
11 
12 namespace boost { namespace mpl { namespace aux {
13 
14 /// forward declaration
15 
16 template<
17       long N
18     , typename First
19     , typename Last
20     , typename State
21     , typename BackwardOp
22     , typename ForwardOp
23     >
24 struct reverse_iter_fold_impl;
25 
26 template< long N >
27 struct reverse_iter_fold_chunk;
28 
29 template<> struct reverse_iter_fold_chunk<0>
30 {
31     template<
32           typename First
33         , typename Last
34         , typename State
35         , typename BackwardOp
36         , typename ForwardOp
37         >
38     struct result_
39     {
40         typedef First iter0;
41         typedef State fwd_state0;
42         typedef fwd_state0 bkwd_state0;
43         typedef bkwd_state0 state;
44         typedef iter0 iterator;
45     };
46 
47     /// ETI workaround
48     template<> struct result_< int,int,int,int,int >
49     {
50         typedef int state;
51         typedef int iterator;
52     };
53 
54 };
55 
56 template<> struct reverse_iter_fold_chunk<1>
57 {
58     template<
59           typename First
60         , typename Last
61         , typename State
62         , typename BackwardOp
63         , typename ForwardOp
64         >
65     struct result_
66     {
67         typedef First iter0;
68         typedef State fwd_state0;
69         typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
70         typedef typename mpl::next<iter0>::type iter1;
71 
72 
73         typedef fwd_state1 bkwd_state1;
74         typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
75         typedef bkwd_state0 state;
76         typedef iter1 iterator;
77     };
78 
79     /// ETI workaround
80     template<> struct result_< int,int,int,int,int >
81     {
82         typedef int state;
83         typedef int iterator;
84     };
85 
86 };
87 
88 template<> struct reverse_iter_fold_chunk<2>
89 {
90     template<
91           typename First
92         , typename Last
93         , typename State
94         , typename BackwardOp
95         , typename ForwardOp
96         >
97     struct result_
98     {
99         typedef First iter0;
100         typedef State fwd_state0;
101         typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
102         typedef typename mpl::next<iter0>::type iter1;
103         typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
104         typedef typename mpl::next<iter1>::type iter2;
105 
106 
107         typedef fwd_state2 bkwd_state2;
108         typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
109         typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
110 
111 
112         typedef bkwd_state0 state;
113         typedef iter2 iterator;
114     };
115 
116     /// ETI workaround
117     template<> struct result_< int,int,int,int,int >
118     {
119         typedef int state;
120         typedef int iterator;
121     };
122 
123 };
124 
125 template<> struct reverse_iter_fold_chunk<3>
126 {
127     template<
128           typename First
129         , typename Last
130         , typename State
131         , typename BackwardOp
132         , typename ForwardOp
133         >
134     struct result_
135     {
136         typedef First iter0;
137         typedef State fwd_state0;
138         typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
139         typedef typename mpl::next<iter0>::type iter1;
140         typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
141         typedef typename mpl::next<iter1>::type iter2;
142         typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
143         typedef typename mpl::next<iter2>::type iter3;
144 
145 
146         typedef fwd_state3 bkwd_state3;
147         typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
148         typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
149         typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
150 
151 
152         typedef bkwd_state0 state;
153         typedef iter3 iterator;
154     };
155 
156     /// ETI workaround
157     template<> struct result_< int,int,int,int,int >
158     {
159         typedef int state;
160         typedef int iterator;
161     };
162 
163 };
164 
165 template<> struct reverse_iter_fold_chunk<4>
166 {
167     template<
168           typename First
169         , typename Last
170         , typename State
171         , typename BackwardOp
172         , typename ForwardOp
173         >
174     struct result_
175     {
176         typedef First iter0;
177         typedef State fwd_state0;
178         typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
179         typedef typename mpl::next<iter0>::type iter1;
180         typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
181         typedef typename mpl::next<iter1>::type iter2;
182         typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
183         typedef typename mpl::next<iter2>::type iter3;
184         typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
185         typedef typename mpl::next<iter3>::type iter4;
186 
187 
188         typedef fwd_state4 bkwd_state4;
189         typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
190         typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
191         typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
192         typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
193 
194 
195         typedef bkwd_state0 state;
196         typedef iter4 iterator;
197     };
198 
199     /// ETI workaround
200     template<> struct result_< int,int,int,int,int >
201     {
202         typedef int state;
203         typedef int iterator;
204     };
205 
206 };
207 
208 template< long N >
209 struct reverse_iter_fold_chunk
210 {
211     template<
212           typename First
213         , typename Last
214         , typename State
215         , typename BackwardOp
216         , typename ForwardOp
217         >
218     struct result_
219     {
220         typedef First iter0;
221         typedef State fwd_state0;
222         typedef typename apply2< ForwardOp,fwd_state0,iter0 >::type fwd_state1;
223         typedef typename mpl::next<iter0>::type iter1;
224         typedef typename apply2< ForwardOp,fwd_state1,iter1 >::type fwd_state2;
225         typedef typename mpl::next<iter1>::type iter2;
226         typedef typename apply2< ForwardOp,fwd_state2,iter2 >::type fwd_state3;
227         typedef typename mpl::next<iter2>::type iter3;
228         typedef typename apply2< ForwardOp,fwd_state3,iter3 >::type fwd_state4;
229         typedef typename mpl::next<iter3>::type iter4;
230 
231 
232         typedef reverse_iter_fold_impl<
233               ( (N - 4) < 0 ? 0 : N - 4 )
234             , iter4
235             , Last
236             , fwd_state4
237             , BackwardOp
238             , ForwardOp
239             > nested_chunk;
240 
241         typedef typename nested_chunk::state bkwd_state4;
242         typedef typename apply2< BackwardOp,bkwd_state4,iter3 >::type bkwd_state3;
243         typedef typename apply2< BackwardOp,bkwd_state3,iter2 >::type bkwd_state2;
244         typedef typename apply2< BackwardOp,bkwd_state2,iter1 >::type bkwd_state1;
245         typedef typename apply2< BackwardOp,bkwd_state1,iter0 >::type bkwd_state0;
246 
247 
248         typedef bkwd_state0 state;
249         typedef typename nested_chunk::iterator iterator;
250     };
251 };
252 
253 template<
254       typename First
255     , typename Last
256     , typename State
257     , typename BackwardOp
258     , typename ForwardOp
259     >
260 struct reverse_iter_fold_step;
261 
262 template<
263       typename Last
264     , typename State
265     >
266 struct reverse_iter_fold_null_step
267 {
268     typedef Last iterator;
269     typedef State state;
270 };
271 
272 template<>
273 struct reverse_iter_fold_chunk< -1 >
274 {
275     template<
276           typename First
277         , typename Last
278         , typename State
279         , typename BackwardOp
280         , typename ForwardOp
281         >
282     struct result_
283     {
284         typedef typename if_<
285               typename is_same< First,Last >::type
286             , reverse_iter_fold_null_step< Last,State >
287             , reverse_iter_fold_step< First,Last,State,BackwardOp,ForwardOp >
288             >::type res_;
289 
290         typedef typename res_::state state;
291         typedef typename res_::iterator iterator;
292     };
293 
294     /// ETI workaround
295     template<> struct result_< int,int,int,int,int >
296     {
297         typedef int state;
298         typedef int iterator;
299     };
300 
301 };
302 
303 template<
304       typename First
305     , typename Last
306     , typename State
307     , typename BackwardOp
308     , typename ForwardOp
309     >
310 struct reverse_iter_fold_step
311 {
312     typedef reverse_iter_fold_chunk< -1 >::template result_<
313           typename mpl::next<First>::type
314         , Last
315         , typename apply2< ForwardOp,State,First >::type
316         , BackwardOp
317         , ForwardOp
318         > nested_step;
319 
320     typedef typename apply2<
321           BackwardOp
322         , typename nested_step::state
323         , First
324         >::type state;
325 
326     typedef typename nested_step::iterator iterator;
327 };
328 
329 template<
330       long N
331     , typename First
332     , typename Last
333     , typename State
334     , typename BackwardOp
335     , typename ForwardOp
336     >
337 struct reverse_iter_fold_impl
338     : reverse_iter_fold_chunk<N>
339         ::template result_< First,Last,State,BackwardOp,ForwardOp >
340 {
341 };
342 
343 }}}
344