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

« back to all changes in this revision

Viewing changes to boost/boost/mpl/aux_/preprocessed/msvc70/fold_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_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 ForwardOp
 
15
    > 
 
16
struct fold_impl;
 
17
 
 
18
template< long N >
 
19
struct fold_chunk;
 
20
 
 
21
template<>
 
22
struct fold_chunk<0>
 
23
{
 
24
    template<
 
25
          typename First
 
26
        , typename Last
 
27
        , typename State
 
28
        , typename ForwardOp
 
29
        >
 
30
    struct result_
 
31
    {
 
32
        typedef First iter0;
 
33
        typedef State state0;
 
34
        typedef state0 state;
 
35
        typedef iter0 iterator;
 
36
    };
 
37
 
 
38
};
 
39
 
 
40
template<>
 
41
struct fold_chunk<1>
 
42
{
 
43
    template<
 
44
          typename First
 
45
        , typename Last
 
46
        , typename State
 
47
        , typename ForwardOp
 
48
        >
 
49
    struct result_
 
50
    {
 
51
        typedef First iter0;
 
52
        typedef State state0;
 
53
        typedef typename apply2<ForwardOp, state0, typename iter0::type>::type state1;
 
54
        typedef typename iter0::next iter1;
 
55
        
 
56
 
 
57
        typedef state1 state;
 
58
        typedef iter1 iterator;
 
59
    };
 
60
 
 
61
};
 
62
 
 
63
template<>
 
64
struct fold_chunk<2>
 
65
{
 
66
    template<
 
67
          typename First
 
68
        , typename Last
 
69
        , typename State
 
70
        , typename ForwardOp
 
71
        >
 
72
    struct result_
 
73
    {
 
74
        typedef First iter0;
 
75
        typedef State state0;
 
76
        typedef typename apply2<ForwardOp, state0, typename iter0::type>::type state1;
 
77
        typedef typename iter0::next iter1;
 
78
        typedef typename apply2<ForwardOp, state1, typename iter1::type>::type state2;
 
79
        typedef typename iter1::next iter2;
 
80
        
 
81
 
 
82
        typedef state2 state;
 
83
        typedef iter2 iterator;
 
84
    };
 
85
 
 
86
};
 
87
 
 
88
template<>
 
89
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 iter0::type>::type state1;
 
102
        typedef typename iter0::next iter1;
 
103
        typedef typename apply2<ForwardOp, state1, typename iter1::type>::type state2;
 
104
        typedef typename iter1::next iter2;
 
105
        typedef typename apply2<ForwardOp, state2, typename iter2::type>::type state3;
 
106
        typedef typename iter2::next iter3;
 
107
        
 
108
 
 
109
        typedef state3 state;
 
110
        typedef iter3 iterator;
 
111
    };
 
112
 
 
113
};
 
114
 
 
115
template<>
 
116
struct fold_chunk<4>
 
117
{
 
118
    template<
 
119
          typename First
 
120
        , typename Last
 
121
        , typename State
 
122
        , typename ForwardOp
 
123
        >
 
124
    struct result_
 
125
    {
 
126
        typedef First iter0;
 
127
        typedef State state0;
 
128
        typedef typename apply2<ForwardOp, state0, typename iter0::type>::type state1;
 
129
        typedef typename iter0::next iter1;
 
130
        typedef typename apply2<ForwardOp, state1, typename iter1::type>::type state2;
 
131
        typedef typename iter1::next iter2;
 
132
        typedef typename apply2<ForwardOp, state2, typename iter2::type>::type state3;
 
133
        typedef typename iter2::next iter3;
 
134
        typedef typename apply2<ForwardOp, state3, typename iter3::type>::type state4;
 
135
        typedef typename iter3::next iter4;
 
136
        
 
137
 
 
138
        typedef state4 state;
 
139
        typedef iter4 iterator;
 
140
    };
 
141
 
 
142
};
 
143
 
 
144
template< long N > 
 
145
struct fold_chunk
 
146
{
 
147
    template<
 
148
          typename First
 
149
        , typename Last
 
150
        , typename State
 
151
        , typename ForwardOp
 
152
        > 
 
153
    struct result_
 
154
    {
 
155
        typedef fold_impl<
 
156
              4
 
157
            , First
 
158
            , Last
 
159
            , State
 
160
            , ForwardOp
 
161
            > chunk_;
 
162
 
 
163
        typedef fold_impl<
 
164
              ( (N - 4) < 0 ? 0 : N - 4 )
 
165
            , typename chunk_::iterator
 
166
            , Last
 
167
            , typename chunk_::state
 
168
            , ForwardOp
 
169
            > res_;
 
170
 
 
171
        typedef typename res_::state state;
 
172
        typedef typename res_::iterator iterator;
 
173
    };
 
174
};
 
175
 
 
176
template<
 
177
      typename First
 
178
    , typename Last
 
179
    , typename State
 
180
    , typename ForwardOp
 
181
    > 
 
182
struct fold_step;
 
183
 
 
184
template<
 
185
      typename Last
 
186
    , typename State
 
187
    >
 
188
struct fold_null_step
 
189
{
 
190
    typedef Last iterator;
 
191
    typedef State state;
 
192
};
 
193
 
 
194
template<> 
 
195
struct fold_chunk< -1 >
 
196
{
 
197
    template<
 
198
          typename First
 
199
        , typename Last
 
200
        , typename State
 
201
        , typename ForwardOp
 
202
        > 
 
203
    struct result_
 
204
    {
 
205
        typedef typename if_<
 
206
              typename is_same< First,Last >::type
 
207
            , fold_null_step< Last,State >
 
208
            , fold_step< First,Last,State,ForwardOp >
 
209
            >::type res_;
 
210
 
 
211
        typedef typename res_::state state;
 
212
        typedef typename res_::iterator iterator;
 
213
    };
 
214
 
 
215
};
 
216
 
 
217
template<
 
218
      typename First
 
219
    , typename Last
 
220
    , typename State
 
221
    , typename ForwardOp
 
222
    > 
 
223
struct fold_step
 
224
{
 
225
    typedef fold_chunk< -1 >::template result_<
 
226
          typename First::next
 
227
        , Last
 
228
        , typename apply2<ForwardOp, State, typename First::type>::type
 
229
        , ForwardOp
 
230
        > chunk_;
 
231
 
 
232
    typedef typename chunk_::state state;
 
233
    typedef typename chunk_::iterator iterator;
 
234
};
 
235
 
 
236
template<
 
237
      long N
 
238
    , typename First
 
239
    , typename Last
 
240
    , typename State
 
241
    , typename ForwardOp
 
242
    > 
 
243
struct fold_impl
 
244
    : fold_chunk<N>
 
245
        ::template result_< First,Last,State,ForwardOp >
 
246
{
 
247
};
 
248
 
 
249
} // namespace aux
 
250
} // namespace mpl
 
251
} // namespace boost
 
252