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