]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/aux_/preprocessed/msvc70/fold_impl.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
07659ae242c5a8143fc33d3735991a4e5357afde
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / preprocessed / msvc70 / 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 "boost/mpl/aux_/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       int N\r
18     , typename First\r
19     , typename Last\r
20     , typename State\r
21     , typename ForwardOp\r
22     >\r
23 struct fold_impl;\r
24 \r
25 template< int N >\r
26 struct fold_chunk;\r
27 \r
28 template<> struct fold_chunk<0>\r
29 {\r
30     template<\r
31           typename First\r
32         , typename Last\r
33         , typename State\r
34         , typename ForwardOp\r
35         >\r
36     struct result_\r
37     {\r
38         typedef First iter0;\r
39         typedef State state0;\r
40         typedef state0 state;\r
41         typedef iter0 iterator;\r
42     };\r
43 };\r
44 \r
45 template<> struct fold_chunk<1>\r
46 {\r
47     template<\r
48           typename First\r
49         , typename Last\r
50         , typename State\r
51         , typename ForwardOp\r
52         >\r
53     struct result_\r
54     {\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
59         \r
60 \r
61         typedef state1 state;\r
62         typedef iter1 iterator;\r
63     };\r
64 };\r
65 \r
66 template<> struct fold_chunk<2>\r
67 {\r
68     template<\r
69           typename First\r
70         , typename Last\r
71         , typename State\r
72         , typename ForwardOp\r
73         >\r
74     struct result_\r
75     {\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
82         \r
83 \r
84         typedef state2 state;\r
85         typedef iter2 iterator;\r
86     };\r
87 };\r
88 \r
89 template<> struct fold_chunk<3>\r
90 {\r
91     template<\r
92           typename First\r
93         , typename Last\r
94         , typename State\r
95         , typename ForwardOp\r
96         >\r
97     struct result_\r
98     {\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
107         \r
108 \r
109         typedef state3 state;\r
110         typedef iter3 iterator;\r
111     };\r
112 };\r
113 \r
114 template<> struct fold_chunk<4>\r
115 {\r
116     template<\r
117           typename First\r
118         , typename Last\r
119         , typename State\r
120         , typename ForwardOp\r
121         >\r
122     struct result_\r
123     {\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
134         \r
135 \r
136         typedef state4 state;\r
137         typedef iter4 iterator;\r
138     };\r
139 };\r
140 \r
141 template< int N >\r
142 struct fold_chunk\r
143 {\r
144     template<\r
145           typename First\r
146         , typename Last\r
147         , typename State\r
148         , typename ForwardOp\r
149         >\r
150     struct result_\r
151     {\r
152         typedef fold_impl<\r
153               4\r
154             , First\r
155             , Last\r
156             , State\r
157             , ForwardOp\r
158             > chunk_;\r
159 \r
160         typedef fold_impl<\r
161               ( (N - 4) < 0 ? 0 : N - 4 )\r
162             , typename chunk_::iterator\r
163             , Last\r
164             , typename chunk_::state\r
165             , ForwardOp\r
166             > res_;\r
167 \r
168         typedef typename res_::state state;\r
169         typedef typename res_::iterator iterator;\r
170     };\r
171 };\r
172 \r
173 template<\r
174       typename First\r
175     , typename Last\r
176     , typename State\r
177     , typename ForwardOp\r
178     >\r
179 struct fold_step;\r
180 \r
181 template<\r
182       typename Last\r
183     , typename State\r
184     >\r
185 struct fold_null_step\r
186 {\r
187     typedef Last iterator;\r
188     typedef State state;\r
189 };\r
190 \r
191 template<>\r
192 struct fold_chunk< -1 >\r
193 {\r
194     template<\r
195           typename First\r
196         , typename Last\r
197         , typename State\r
198         , typename ForwardOp\r
199         >\r
200     struct result_\r
201     {\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
206             >::type res_;\r
207 \r
208         typedef typename res_::state state;\r
209         typedef typename res_::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 ForwardOp\r
218     >\r
219 struct fold_step\r
220 {\r
221     typedef fold_chunk< -1 >::template result_<\r
222           typename mpl::next<First>::type\r
223         , Last\r
224         , typename apply2<ForwardOp,State, typename deref<First>::type>::type\r
225         , ForwardOp\r
226         > chunk_;\r
227 \r
228     typedef typename chunk_::state state;\r
229     typedef typename chunk_::iterator iterator;\r
230 };\r
231 \r
232 template<\r
233       int N\r
234     , typename First\r
235     , typename Last\r
236     , typename State\r
237     , typename ForwardOp\r
238     >\r
239 struct fold_impl\r
240     : fold_chunk<N>\r
241         ::template result_< First,Last,State,ForwardOp >\r
242 {\r
243 };\r
244 \r
245 }}}\r