]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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_/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 | int N | |
18 | , typename First | |
19 | , typename Last | |
20 | , typename State | |
21 | , typename ForwardOp | |
22 | > | |
23 | struct fold_impl; | |
24 | ||
25 | template< int N > | |
26 | struct fold_chunk; | |
27 | ||
28 | template<> struct fold_chunk<0> | |
29 | { | |
30 | template< | |
31 | typename First | |
32 | , typename Last | |
33 | , typename State | |
34 | , typename ForwardOp | |
35 | > | |
36 | struct result_ | |
37 | { | |
38 | typedef First iter0; | |
39 | typedef State state0; | |
40 | typedef state0 state; | |
41 | typedef iter0 iterator; | |
42 | }; | |
43 | ||
44 | /// ETI workaround | |
45 | template<> struct result_< int,int,int,int > | |
46 | { | |
47 | typedef int state; | |
48 | typedef int iterator; | |
49 | }; | |
50 | ||
51 | }; | |
52 | ||
53 | template<> struct fold_chunk<1> | |
54 | { | |
55 | template< | |
56 | typename First | |
57 | , typename Last | |
58 | , typename State | |
59 | , typename ForwardOp | |
60 | > | |
61 | struct result_ | |
62 | { | |
63 | typedef First iter0; | |
64 | typedef State state0; | |
65 | typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1; | |
66 | typedef typename mpl::next<iter0>::type iter1; | |
67 | ||
68 | ||
69 | typedef state1 state; | |
70 | typedef iter1 iterator; | |
71 | }; | |
72 | ||
73 | /// ETI workaround | |
74 | template<> struct result_< int,int,int,int > | |
75 | { | |
76 | typedef int state; | |
77 | typedef int iterator; | |
78 | }; | |
79 | ||
80 | }; | |
81 | ||
82 | template<> struct fold_chunk<2> | |
83 | { | |
84 | template< | |
85 | typename First | |
86 | , typename Last | |
87 | , typename State | |
88 | , typename ForwardOp | |
89 | > | |
90 | struct result_ | |
91 | { | |
92 | typedef First iter0; | |
93 | typedef State state0; | |
94 | typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1; | |
95 | typedef typename mpl::next<iter0>::type iter1; | |
96 | typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2; | |
97 | typedef typename mpl::next<iter1>::type iter2; | |
98 | ||
99 | ||
100 | typedef state2 state; | |
101 | typedef iter2 iterator; | |
102 | }; | |
103 | ||
104 | /// ETI workaround | |
105 | template<> struct result_< int,int,int,int > | |
106 | { | |
107 | typedef int state; | |
108 | typedef int iterator; | |
109 | }; | |
110 | ||
111 | }; | |
112 | ||
113 | template<> struct fold_chunk<3> | |
114 | { | |
115 | template< | |
116 | typename First | |
117 | , typename Last | |
118 | , typename State | |
119 | , typename ForwardOp | |
120 | > | |
121 | struct result_ | |
122 | { | |
123 | typedef First iter0; | |
124 | typedef State state0; | |
125 | typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1; | |
126 | typedef typename mpl::next<iter0>::type iter1; | |
127 | typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2; | |
128 | typedef typename mpl::next<iter1>::type iter2; | |
129 | typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3; | |
130 | typedef typename mpl::next<iter2>::type iter3; | |
131 | ||
132 | ||
133 | typedef state3 state; | |
134 | typedef iter3 iterator; | |
135 | }; | |
136 | ||
137 | /// ETI workaround | |
138 | template<> struct result_< int,int,int,int > | |
139 | { | |
140 | typedef int state; | |
141 | typedef int iterator; | |
142 | }; | |
143 | ||
144 | }; | |
145 | ||
146 | template<> struct fold_chunk<4> | |
147 | { | |
148 | template< | |
149 | typename First | |
150 | , typename Last | |
151 | , typename State | |
152 | , typename ForwardOp | |
153 | > | |
154 | struct result_ | |
155 | { | |
156 | typedef First iter0; | |
157 | typedef State state0; | |
158 | typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1; | |
159 | typedef typename mpl::next<iter0>::type iter1; | |
160 | typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2; | |
161 | typedef typename mpl::next<iter1>::type iter2; | |
162 | typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3; | |
163 | typedef typename mpl::next<iter2>::type iter3; | |
164 | typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4; | |
165 | typedef typename mpl::next<iter3>::type iter4; | |
166 | ||
167 | ||
168 | typedef state4 state; | |
169 | typedef iter4 iterator; | |
170 | }; | |
171 | ||
172 | /// ETI workaround | |
173 | template<> struct result_< int,int,int,int > | |
174 | { | |
175 | typedef int state; | |
176 | typedef int iterator; | |
177 | }; | |
178 | ||
179 | }; | |
180 | ||
181 | template< int N > | |
182 | struct fold_chunk | |
183 | { | |
184 | template< | |
185 | typename First | |
186 | , typename Last | |
187 | , typename State | |
188 | , typename ForwardOp | |
189 | > | |
190 | struct result_ | |
191 | { | |
192 | typedef fold_impl< | |
193 | 4 | |
194 | , First | |
195 | , Last | |
196 | , State | |
197 | , ForwardOp | |
198 | > chunk_; | |
199 | ||
200 | typedef fold_impl< | |
201 | ( (N - 4) < 0 ? 0 : N - 4 ) | |
202 | , typename chunk_::iterator | |
203 | , Last | |
204 | , typename chunk_::state | |
205 | , ForwardOp | |
206 | > res_; | |
207 | ||
208 | typedef typename res_::state state; | |
209 | typedef typename res_::iterator iterator; | |
210 | }; | |
211 | }; | |
212 | ||
213 | template< | |
214 | typename First | |
215 | , typename Last | |
216 | , typename State | |
217 | , typename ForwardOp | |
218 | > | |
219 | struct fold_step; | |
220 | ||
221 | template< | |
222 | typename Last | |
223 | , typename State | |
224 | > | |
225 | struct fold_null_step | |
226 | { | |
227 | typedef Last iterator; | |
228 | typedef State state; | |
229 | }; | |
230 | ||
231 | template<> | |
232 | struct fold_chunk< -1 > | |
233 | { | |
234 | template< | |
235 | typename First | |
236 | , typename Last | |
237 | , typename State | |
238 | , typename ForwardOp | |
239 | > | |
240 | struct result_ | |
241 | { | |
242 | typedef typename if_< | |
243 | typename is_same< First,Last >::type | |
244 | , fold_null_step< Last,State > | |
245 | , fold_step< First,Last,State,ForwardOp > | |
246 | >::type res_; | |
247 | ||
248 | typedef typename res_::state state; | |
249 | typedef typename res_::iterator iterator; | |
250 | }; | |
251 | ||
252 | /// ETI workaround | |
253 | template<> struct result_< int,int,int,int > | |
254 | { | |
255 | typedef int state; | |
256 | typedef int iterator; | |
257 | }; | |
258 | ||
259 | }; | |
260 | ||
261 | template< | |
262 | typename First | |
263 | , typename Last | |
264 | , typename State | |
265 | , typename ForwardOp | |
266 | > | |
267 | struct fold_step | |
268 | { | |
269 | typedef fold_chunk< -1 >::template result_< | |
270 | typename mpl::next<First>::type | |
271 | , Last | |
272 | , typename apply2<ForwardOp,State, typename deref<First>::type>::type | |
273 | , ForwardOp | |
274 | > chunk_; | |
275 | ||
276 | typedef typename chunk_::state state; | |
277 | typedef typename chunk_::iterator iterator; | |
278 | }; | |
279 | ||
280 | template< | |
281 | int N | |
282 | , typename First | |
283 | , typename Last | |
284 | , typename State | |
285 | , typename ForwardOp | |
286 | > | |
287 | struct fold_impl | |
288 | : fold_chunk<N> | |
289 | ::template result_< First,Last,State,ForwardOp > | |
290 | { | |
291 | }; | |
292 | ||
293 | }}} |