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