]> AND Private Git Repository - canny.git/blob - stc/exp/ml_stc_linux_make_v1.0/include/boost/mpl/aux_/preprocessed/dmc/fold_impl.hpp
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
6d94f48f79635c708e03789da0b0586ba48d9fe3
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / preprocessed / dmc / fold_impl.hpp
1 \r
2 // Copyright Aleksey Gurtovoy 2000-2004\r
3 //\r
4 // Distributed under the Boost Software License, Version 1.0. \r
5 // (See accompanying file LICENSE_1_0.txt or copy at \r
6 // http://www.boost.org/LICENSE_1_0.txt)\r
7 //\r
8 \r
9 // Preprocessed version of "boost/mpl/aux_/fold_impl.hpp" header\r
10 // -- DO NOT modify by hand!\r
11 \r
12 namespace boost { namespace mpl { namespace aux {\r
13 \r
14 /// forward declaration\r
15 \r
16 template<\r
17       int N\r
18     , typename First\r
19     , typename Last\r
20     , typename State\r
21     , typename ForwardOp\r
22     >\r
23 struct fold_impl;\r
24 \r
25 template<\r
26       typename First\r
27     , typename Last\r
28     , typename State\r
29     , typename ForwardOp\r
30     >\r
31 struct fold_impl< 0,First,Last,State,ForwardOp >\r
32 {\r
33     typedef First iter0;\r
34     typedef State state0;\r
35     typedef state0 state;\r
36     typedef iter0 iterator;\r
37 };\r
38 \r
39 template<\r
40       typename First\r
41     , typename Last\r
42     , typename State\r
43     , typename ForwardOp\r
44     >\r
45 struct fold_impl< 1,First,Last,State,ForwardOp >\r
46 {\r
47     typedef First iter0;\r
48     typedef State state0;\r
49     typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\r
50     typedef typename mpl::next<iter0>::type iter1;\r
51     \r
52 \r
53     typedef state1 state;\r
54     typedef iter1 iterator;\r
55 };\r
56 \r
57 template<\r
58       typename First\r
59     , typename Last\r
60     , typename State\r
61     , typename ForwardOp\r
62     >\r
63 struct fold_impl< 2,First,Last,State,ForwardOp >\r
64 {\r
65     typedef First iter0;\r
66     typedef State state0;\r
67     typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\r
68     typedef typename mpl::next<iter0>::type iter1;\r
69     typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\r
70     typedef typename mpl::next<iter1>::type iter2;\r
71     \r
72 \r
73     typedef state2 state;\r
74     typedef iter2 iterator;\r
75 };\r
76 \r
77 template<\r
78       typename First\r
79     , typename Last\r
80     , typename State\r
81     , typename ForwardOp\r
82     >\r
83 struct fold_impl< 3,First,Last,State,ForwardOp >\r
84 {\r
85     typedef First iter0;\r
86     typedef State state0;\r
87     typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\r
88     typedef typename mpl::next<iter0>::type iter1;\r
89     typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\r
90     typedef typename mpl::next<iter1>::type iter2;\r
91     typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\r
92     typedef typename mpl::next<iter2>::type iter3;\r
93     \r
94 \r
95     typedef state3 state;\r
96     typedef iter3 iterator;\r
97 };\r
98 \r
99 template<\r
100       typename First\r
101     , typename Last\r
102     , typename State\r
103     , typename ForwardOp\r
104     >\r
105 struct fold_impl< 4,First,Last,State,ForwardOp >\r
106 {\r
107     typedef First iter0;\r
108     typedef State state0;\r
109     typedef typename apply2< ForwardOp, state0, typename deref<iter0>::type >::type state1;\r
110     typedef typename mpl::next<iter0>::type iter1;\r
111     typedef typename apply2< ForwardOp, state1, typename deref<iter1>::type >::type state2;\r
112     typedef typename mpl::next<iter1>::type iter2;\r
113     typedef typename apply2< ForwardOp, state2, typename deref<iter2>::type >::type state3;\r
114     typedef typename mpl::next<iter2>::type iter3;\r
115     typedef typename apply2< ForwardOp, state3, typename deref<iter3>::type >::type state4;\r
116     typedef typename mpl::next<iter3>::type iter4;\r
117     \r
118 \r
119     typedef state4 state;\r
120     typedef iter4 iterator;\r
121 };\r
122 \r
123 template<\r
124       int N\r
125     , typename First\r
126     , typename Last\r
127     , typename State\r
128     , typename ForwardOp\r
129     >\r
130 struct fold_impl\r
131 {\r
132     typedef fold_impl<\r
133           4\r
134         , First\r
135         , Last\r
136         , State\r
137         , ForwardOp\r
138         > chunk_;\r
139 \r
140     typedef fold_impl<\r
141           ( (N - 4) < 0 ? 0 : N - 4 )\r
142         , typename chunk_::iterator\r
143         , Last\r
144         , typename chunk_::state\r
145         , ForwardOp\r
146         > res_;\r
147 \r
148     typedef typename res_::state state;\r
149     typedef typename res_::iterator iterator;\r
150 };\r
151 \r
152 template<\r
153       typename First\r
154     , typename Last\r
155     , typename State\r
156     , typename ForwardOp\r
157     >\r
158 struct fold_impl< -1,First,Last,State,ForwardOp >\r
159     : fold_impl<\r
160           -1\r
161         , typename mpl::next<First>::type\r
162         , Last\r
163         , typename apply2<ForwardOp,State, typename deref<First>::type>::type\r
164         , ForwardOp\r
165         >\r
166 {\r
167 };\r
168 \r
169 template<\r
170       typename Last\r
171     , typename State\r
172     , typename ForwardOp\r
173     >\r
174 struct fold_impl< -1,Last,Last,State,ForwardOp >\r
175 {\r
176     typedef State state;\r
177     typedef Last iterator;\r
178 };\r
179 \r
180 }}}\r