]> git.donarmstrong.com Git - rsem.git/blob - boost/mpl/aux_/preprocessed/no_ctps/fold_impl.hpp
RSEM Source Codes
[rsem.git] / boost / mpl / aux_ / preprocessed / no_ctps / fold_impl.hpp
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
45 template<> struct fold_chunk<1>
46 {
47     template<
48           typename First
49         , typename Last
50         , typename State
51         , typename ForwardOp
52         >
53     struct result_
54     {
55         typedef First iter0;
56         typedef State state0;
57         typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
58         typedef typename mpl::next<iter0>::type iter1;
59         
60
61         typedef state1 state;
62         typedef iter1 iterator;
63     };
64 };
65
66 template<> struct fold_chunk<2>
67 {
68     template<
69           typename First
70         , typename Last
71         , typename State
72         , typename ForwardOp
73         >
74     struct result_
75     {
76         typedef First iter0;
77         typedef State state0;
78         typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
79         typedef typename mpl::next<iter0>::type iter1;
80         typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
81         typedef typename mpl::next<iter1>::type iter2;
82         
83
84         typedef state2 state;
85         typedef iter2 iterator;
86     };
87 };
88
89 template<> struct fold_chunk<3>
90 {
91     template<
92           typename First
93         , typename Last
94         , typename State
95         , typename ForwardOp
96         >
97     struct result_
98     {
99         typedef First iter0;
100         typedef State state0;
101         typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
102         typedef typename mpl::next<iter0>::type iter1;
103         typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
104         typedef typename mpl::next<iter1>::type iter2;
105         typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
106         typedef typename mpl::next<iter2>::type iter3;
107         
108
109         typedef state3 state;
110         typedef iter3 iterator;
111     };
112 };
113
114 template<> struct fold_chunk<4>
115 {
116     template<
117           typename First
118         , typename Last
119         , typename State
120         , typename ForwardOp
121         >
122     struct result_
123     {
124         typedef First iter0;
125         typedef State state0;
126         typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;
127         typedef typename mpl::next<iter0>::type iter1;
128         typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;
129         typedef typename mpl::next<iter1>::type iter2;
130         typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;
131         typedef typename mpl::next<iter2>::type iter3;
132         typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;
133         typedef typename mpl::next<iter3>::type iter4;
134         
135
136         typedef state4 state;
137         typedef iter4 iterator;
138     };
139 };
140
141 template< int N >
142 struct fold_chunk
143 {
144     template<
145           typename First
146         , typename Last
147         , typename State
148         , typename ForwardOp
149         >
150     struct result_
151     {
152         typedef fold_impl<
153               4
154             , First
155             , Last
156             , State
157             , ForwardOp
158             > chunk_;
159
160         typedef fold_impl<
161               ( (N - 4) < 0 ? 0 : N - 4 )
162             , typename chunk_::iterator
163             , Last
164             , typename chunk_::state
165             , ForwardOp
166             > res_;
167
168         typedef typename res_::state state;
169         typedef typename res_::iterator iterator;
170     };
171 };
172
173 template<
174       typename First
175     , typename Last
176     , typename State
177     , typename ForwardOp
178     >
179 struct fold_step;
180
181 template<
182       typename Last
183     , typename State
184     >
185 struct fold_null_step
186 {
187     typedef Last iterator;
188     typedef State state;
189 };
190
191 template<>
192 struct fold_chunk< -1 >
193 {
194     template<
195           typename First
196         , typename Last
197         , typename State
198         , typename ForwardOp
199         >
200     struct result_
201     {
202         typedef typename if_<
203               typename is_same< First,Last >::type
204             , fold_null_step< Last,State >
205             , fold_step< First,Last,State,ForwardOp >
206             >::type 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     typedef fold_chunk< -1 >::template result_<
222           typename mpl::next<First>::type
223         , Last
224         , typename apply2<ForwardOp,State, typename deref<First>::type>::type
225         , ForwardOp
226         > chunk_;
227
228     typedef typename chunk_::state state;
229     typedef typename chunk_::iterator iterator;
230 };
231
232 template<
233       int N
234     , typename First
235     , typename Last
236     , typename State
237     , typename ForwardOp
238     >
239 struct fold_impl
240     : fold_chunk<N>
241         ::template result_< First,Last,State,ForwardOp >
242 {
243 };
244
245 }}}