~ubuntu-branches/ubuntu/warty/aqsis/warty

« back to all changes in this revision

Viewing changes to boost/boost/mpl/aux_/preprocessed/no_ctps/fold_backward_impl.hpp

  • Committer: Bazaar Package Importer
  • Author(s): LaMont Jones
  • Date: 2004-08-24 07:25:04 UTC
  • Revision ID: james.westby@ubuntu.com-20040824072504-zf993vnevvisdsvb
Tags: upstream-0.9.1
ImportĀ upstreamĀ versionĀ 0.9.1

Show diffs side-by-side

added added

removed removed

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