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

« back to all changes in this revision

Viewing changes to boost/boost/mpl/aux_/preprocessed/mwcw/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<
 
19
      typename First
 
20
    , typename Last
 
21
    , typename State
 
22
    , typename ForwardOp
 
23
    >
 
24
struct fold_impl< 0,First,Last,State,ForwardOp >
 
25
{
 
26
    typedef First iter0;
 
27
    typedef State state0;
 
28
    typedef state0 state;
 
29
    typedef iter0 iterator;
 
30
};
 
31
 
 
32
template<
 
33
      typename First
 
34
    , typename Last
 
35
    , typename State
 
36
    , typename ForwardOp
 
37
    >
 
38
struct fold_impl< 1,First,Last,State,ForwardOp >
 
39
{
 
40
    typedef First iter0;
 
41
    typedef State state0;
 
42
    typedef typename apply2<ForwardOp, state0, typename iter0::type>::type state1;
 
43
    typedef typename iter0::next iter1;
 
44
    
 
45
 
 
46
    typedef state1 state;
 
47
    typedef iter1 iterator;
 
48
};
 
49
 
 
50
template<
 
51
      typename First
 
52
    , typename Last
 
53
    , typename State
 
54
    , typename ForwardOp
 
55
    >
 
56
struct fold_impl< 2,First,Last,State,ForwardOp >
 
57
{
 
58
    typedef First iter0;
 
59
    typedef State state0;
 
60
    typedef typename apply2<ForwardOp, state0, typename iter0::type>::type state1;
 
61
    typedef typename iter0::next iter1;
 
62
    typedef typename apply2<ForwardOp, state1, typename iter1::type>::type state2;
 
63
    typedef typename iter1::next iter2;
 
64
    
 
65
 
 
66
    typedef state2 state;
 
67
    typedef iter2 iterator;
 
68
};
 
69
 
 
70
template<
 
71
      typename First
 
72
    , typename Last
 
73
    , typename State
 
74
    , typename ForwardOp
 
75
    >
 
76
struct fold_impl< 3,First,Last,State,ForwardOp >
 
77
{
 
78
    typedef First iter0;
 
79
    typedef State state0;
 
80
    typedef typename apply2<ForwardOp, state0, typename iter0::type>::type state1;
 
81
    typedef typename iter0::next iter1;
 
82
    typedef typename apply2<ForwardOp, state1, typename iter1::type>::type state2;
 
83
    typedef typename iter1::next iter2;
 
84
    typedef typename apply2<ForwardOp, state2, typename iter2::type>::type state3;
 
85
    typedef typename iter2::next iter3;
 
86
    
 
87
 
 
88
    typedef state3 state;
 
89
    typedef iter3 iterator;
 
90
};
 
91
 
 
92
template<
 
93
      typename First
 
94
    , typename Last
 
95
    , typename State
 
96
    , typename ForwardOp
 
97
    >
 
98
struct fold_impl< 4,First,Last,State,ForwardOp >
 
99
{
 
100
    typedef First iter0;
 
101
    typedef State state0;
 
102
    typedef typename apply2<ForwardOp, state0, typename iter0::type>::type state1;
 
103
    typedef typename iter0::next iter1;
 
104
    typedef typename apply2<ForwardOp, state1, typename iter1::type>::type state2;
 
105
    typedef typename iter1::next iter2;
 
106
    typedef typename apply2<ForwardOp, state2, typename iter2::type>::type state3;
 
107
    typedef typename iter2::next iter3;
 
108
    typedef typename apply2<ForwardOp, state3, typename iter3::type>::type state4;
 
109
    typedef typename iter3::next iter4;
 
110
    
 
111
 
 
112
    typedef state4 state;
 
113
    typedef iter4 iterator;
 
114
};
 
115
 
 
116
template<
 
117
      long N
 
118
    , typename First
 
119
    , typename Last
 
120
    , typename State
 
121
    , typename ForwardOp
 
122
    > 
 
123
struct fold_impl
 
124
{
 
125
    typedef fold_impl<
 
126
          4
 
127
        , First
 
128
        , Last
 
129
        , State
 
130
        , ForwardOp
 
131
        > chunk_;
 
132
 
 
133
    typedef fold_impl<
 
134
          ( (N - 4) < 0 ? 0 : N - 4 )
 
135
        , typename chunk_::iterator
 
136
        , Last
 
137
        , typename chunk_::state
 
138
        , ForwardOp
 
139
        > res_;
 
140
        
 
141
    typedef typename res_::state state;
 
142
    typedef typename res_::iterator iterator;
 
143
};
 
144
 
 
145
template<
 
146
      typename First
 
147
    , typename Last
 
148
    , typename State
 
149
    , typename ForwardOp
 
150
    > 
 
151
struct fold_impl< -1,First,Last,State,ForwardOp >
 
152
    : fold_impl<
 
153
          -1
 
154
        , typename First::next
 
155
        , Last
 
156
        , typename apply2<ForwardOp, State, typename First::type>::type
 
157
        , ForwardOp
 
158
        >
 
159
{
 
160
};
 
161
 
 
162
template<
 
163
      typename Last
 
164
    , typename State
 
165
    , typename ForwardOp
 
166
    > 
 
167
struct fold_impl< -1,Last,Last,State,ForwardOp >
 
168
{
 
169
    typedef State state;
 
170
    typedef Last iterator;
 
171
};
 
172
 
 
173
} // namespace aux
 
174
} // namespace mpl
 
175
} // namespace boost
 
176