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

Private GIT Repository
cde921edf30af32dff04e5254800047767ca8f51
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / sequence_wrapper.hpp
1 \r
2 // NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION\r
3 \r
4 #if !defined(BOOST_PP_IS_ITERATING)\r
5 \r
6 ///// header body\r
7 \r
8 // Copyright Aleksey Gurtovoy 2000-2008\r
9 //\r
10 // Distributed under the Boost Software License, Version 1.0. \r
11 // (See accompanying file LICENSE_1_0.txt or copy at \r
12 // http://www.boost.org/LICENSE_1_0.txt)\r
13 //\r
14 // See http://www.boost.org/libs/mpl for documentation.\r
15 \r
16 // $Id: sequence_wrapper.hpp 49271 2008-10-11 06:46:00Z agurtovoy $\r
17 // $Date: 2008-10-11 02:46:00 -0400 (Sat, 11 Oct 2008) $\r
18 // $Revision: 49271 $\r
19 \r
20 #   include <boost/mpl/aux_/config/ctps.hpp>\r
21 #   include <boost/mpl/aux_/config/static_constant.hpp>\r
22 #   include <boost/mpl/aux_/nttp_decl.hpp>\r
23 \r
24 #   include <boost/preprocessor/arithmetic/sub.hpp>\r
25 #   include <boost/preprocessor/tuple/elem.hpp>\r
26 #   include <boost/preprocessor/enum_params_with_a_default.hpp>\r
27 #   include <boost/preprocessor/enum_params.hpp>\r
28 #   include <boost/preprocessor/enum.hpp>\r
29 #   include <boost/preprocessor/repeat.hpp>\r
30 #   include <boost/preprocessor/comma_if.hpp>\r
31 #   include <boost/preprocessor/iterate.hpp>\r
32 \r
33 #if defined(BOOST_MPL_PREPROCESSING_MODE)\r
34 #   undef LONG_MAX\r
35 #endif\r
36 \r
37 namespace boost { namespace mpl {\r
38 \r
39 #if !defined(AUX778076_SEQUENCE_BASE_NAME)\r
40 #   define AUX778076_SEQUENCE_BASE_NAME AUX778076_SEQUENCE_NAME\r
41 #endif\r
42 \r
43 #if !defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)\r
44 \r
45 #   define AUX778076_SEQUENCE_PARAM_NAME T\r
46 #   define AUX778076_SEQUENCE_TEMPLATE_PARAM typename T\r
47 #   define AUX778076_SEQUENCE_DEFAULT na\r
48 \r
49 #   define AUX778076_SEQUENCE_NAME_N(n) \\r
50     BOOST_PP_CAT(AUX778076_SEQUENCE_BASE_NAME,n) \\r
51     /**/\r
52 \r
53 #   define AUX778076_SEQUENCE_PARAMS() \\r
54     BOOST_PP_ENUM_PARAMS( \\r
55           AUX778076_SEQUENCE_LIMIT \\r
56         , AUX778076_SEQUENCE_TEMPLATE_PARAM \\r
57         ) \\r
58     /**/\r
59 \r
60 #   define AUX778076_SEQUENCE_ARGS() \\r
61     BOOST_PP_ENUM_PARAMS( \\r
62           AUX778076_SEQUENCE_LIMIT \\r
63         , T \\r
64         ) \\r
65     /**/\r
66 \r
67 #   define AUX778076_SEQUENCE_DEFAULT_PARAMS() \\r
68      BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \\r
69           AUX778076_SEQUENCE_LIMIT \\r
70         , AUX778076_SEQUENCE_TEMPLATE_PARAM \\r
71         , AUX778076_SEQUENCE_DEFAULT \\r
72         ) \\r
73     /**/\r
74 \r
75 #   define AUX778076_SEQUENCE_N_PARAMS(n) \\r
76     BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \\r
77     /**/\r
78 \r
79 #   define AUX778076_SEQUENCE_N_ARGS(n) \\r
80     BOOST_PP_ENUM_PARAMS(n, T) \\r
81     /**/\r
82 \r
83 #   define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \\r
84     BOOST_PP_ENUM_PARAMS(n, T) \\r
85     BOOST_PP_COMMA_IF(n) \\r
86     BOOST_PP_ENUM( \\r
87           BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \\r
88         , BOOST_PP_TUPLE_ELEM_3_2 \\r
89         , AUX778076_SEQUENCE_DEFAULT \\r
90         ) \\r
91     /**/\r
92 \r
93 #else // AUX778076_SEQUENCE_INTEGRAL_WRAPPER\r
94 \r
95 #   define AUX778076_SEQUENCE_PARAM_NAME C\r
96 #   define AUX778076_SEQUENCE_TEMPLATE_PARAM BOOST_MPL_AUX_NTTP_DECL(long, C)\r
97 #   define AUX778076_SEQUENCE_DEFAULT LONG_MAX\r
98 \r
99 #   define AUX778076_SEQUENCE_PARAMS() \\r
100     typename T, BOOST_PP_ENUM_PARAMS( \\r
101           AUX778076_SEQUENCE_LIMIT \\r
102         , AUX778076_SEQUENCE_TEMPLATE_PARAM \\r
103         ) \\r
104     /**/\r
105 \r
106 #   define AUX778076_SEQUENCE_ARGS() \\r
107     T, BOOST_PP_ENUM_PARAMS( \\r
108           AUX778076_SEQUENCE_LIMIT \\r
109         , C \\r
110         ) \\r
111     /**/\r
112 \r
113 #   define AUX778076_SEQUENCE_DEFAULT_PARAMS() \\r
114     typename T, \\r
115     BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( \\r
116           AUX778076_SEQUENCE_LIMIT \\r
117         , AUX778076_SEQUENCE_TEMPLATE_PARAM \\r
118         , AUX778076_SEQUENCE_DEFAULT \\r
119         ) \\r
120     /**/\r
121 \r
122 #   define AUX778076_SEQUENCE_N_PARAMS(n) \\r
123     typename T BOOST_PP_COMMA_IF(n) \\r
124     BOOST_PP_ENUM_PARAMS(n, AUX778076_SEQUENCE_TEMPLATE_PARAM) \\r
125     /**/\r
126 \r
127 #   if !defined(AUX778076_SEQUENCE_CONVERT_CN_TO)\r
128 #       define AUX778076_SEQUENCE_CONVERT_CN_TO(z,n,TARGET) BOOST_PP_CAT(C,n)\r
129 #   endif\r
130 \r
131 #   define AUX778076_SEQUENCE_N_ARGS(n) \\r
132     T BOOST_PP_COMMA_IF(n) \\r
133     BOOST_PP_ENUM(n,AUX778076_SEQUENCE_CONVERT_CN_TO,T) \\r
134     /**/\r
135 \r
136 #   define AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(n) \\r
137     T, BOOST_PP_ENUM_PARAMS(n, C) \\r
138     BOOST_PP_COMMA_IF(n) \\r
139     BOOST_PP_ENUM( \\r
140           BOOST_PP_SUB_D(1,AUX778076_SEQUENCE_LIMIT,n) \\r
141         , BOOST_PP_TUPLE_ELEM_3_2 \\r
142         , AUX778076_SEQUENCE_DEFAULT \\r
143         ) \\r
144     /**/\r
145 \r
146 #endif // AUX778076_SEQUENCE_INTEGRAL_WRAPPER\r
147 \r
148 \r
149 #if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
150 // forward declaration\r
151 template<\r
152       AUX778076_SEQUENCE_DEFAULT_PARAMS()\r
153     >\r
154 struct AUX778076_SEQUENCE_NAME;\r
155 #else\r
156 namespace aux {\r
157 template< BOOST_MPL_AUX_NTTP_DECL(int, N) > \r
158 struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser);\r
159 }\r
160 #endif\r
161 \r
162 #define BOOST_PP_ITERATION_PARAMS_1 \\r
163     (3,(0, AUX778076_SEQUENCE_LIMIT, <boost/mpl/aux_/sequence_wrapper.hpp>))\r
164 #include BOOST_PP_ITERATE()\r
165 \r
166 // real C++ version is already taken care of\r
167 #if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
168 \r
169 namespace aux {\r
170 // ???_count_args\r
171 #define AUX778076_COUNT_ARGS_PREFIX         AUX778076_SEQUENCE_NAME\r
172 #define AUX778076_COUNT_ARGS_DEFAULT        AUX778076_SEQUENCE_DEFAULT\r
173 #define AUX778076_COUNT_ARGS_PARAM_NAME     AUX778076_SEQUENCE_PARAM_NAME\r
174 #define AUX778076_COUNT_ARGS_TEMPLATE_PARAM AUX778076_SEQUENCE_TEMPLATE_PARAM\r
175 #define AUX778076_COUNT_ARGS_ARITY          AUX778076_SEQUENCE_LIMIT\r
176 #define AUX778076_COUNT_ARGS_USE_STANDARD_PP_PRIMITIVES\r
177 #include <boost/mpl/aux_/count_args.hpp>\r
178 \r
179 template<\r
180       AUX778076_SEQUENCE_PARAMS()\r
181     >\r
182 struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)\r
183 {\r
184     typedef aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_count_args)<\r
185           BOOST_PP_ENUM_PARAMS(AUX778076_SEQUENCE_LIMIT, AUX778076_SEQUENCE_PARAM_NAME)\r
186         > arg_num_;\r
187     \r
188     typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)< arg_num_::value >\r
189         ::template result_< AUX778076_SEQUENCE_ARGS() >::type type;\r
190 };\r
191 \r
192 } // namespace aux\r
193 \r
194 template<\r
195       AUX778076_SEQUENCE_DEFAULT_PARAMS()\r
196     >\r
197 struct AUX778076_SEQUENCE_NAME\r
198     : aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<\r
199           AUX778076_SEQUENCE_ARGS()\r
200         >::type\r
201 {\r
202     typedef typename aux::BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_impl)<\r
203           AUX778076_SEQUENCE_ARGS()\r
204         >::type type;\r
205 };\r
206 \r
207 #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
208 \r
209 #   undef AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS\r
210 #   undef AUX778076_SEQUENCE_N_ARGS\r
211 #   undef AUX778076_SEQUENCE_CONVERT_CN_TO\r
212 #   undef AUX778076_SEQUENCE_N_PARAMS\r
213 #   undef AUX778076_SEQUENCE_DEFAULT_PARAMS\r
214 #   undef AUX778076_SEQUENCE_ARGS\r
215 #   undef AUX778076_SEQUENCE_PARAMS\r
216 #   undef AUX778076_SEQUENCE_NAME_N\r
217 #   undef AUX778076_SEQUENCE_DEFAULT\r
218 #   undef AUX778076_SEQUENCE_TEMPLATE_PARAM\r
219 #   undef AUX778076_SEQUENCE_PARAM_NAME\r
220 #   undef AUX778076_SEQUENCE_LIMIT\r
221 #   undef AUX778076_SEQUENCE_BASE_NAME\r
222 #   undef AUX778076_SEQUENCE_NAME\r
223 #   undef AUX778076_SEQUENCE_INTEGRAL_WRAPPER\r
224 \r
225 }}\r
226 \r
227 ///// iteration\r
228 \r
229 #else\r
230 #define i_ BOOST_PP_FRAME_ITERATION(1)\r
231 \r
232 #   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)\r
233 \r
234 #if i_ == AUX778076_SEQUENCE_LIMIT\r
235 \r
236 /// primary template (not a specialization!)\r
237 template<\r
238       AUX778076_SEQUENCE_N_PARAMS(i_)\r
239     >\r
240 struct AUX778076_SEQUENCE_NAME\r
241     : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >\r
242 {\r
243     typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;\r
244 };\r
245 \r
246 #else\r
247 \r
248 template<\r
249       AUX778076_SEQUENCE_N_PARAMS(i_)\r
250     >\r
251 struct AUX778076_SEQUENCE_NAME< AUX778076_SEQUENCE_N_PARTIAL_SPEC_ARGS(i_) >\r
252     : AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >\r
253 {\r
254 #if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)\r
255     typedef typename AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;\r
256 #else\r
257     typedef AUX778076_SEQUENCE_NAME_N(i_)< AUX778076_SEQUENCE_N_ARGS(i_) >::type type;\r
258 #endif\r
259 };\r
260 \r
261 #endif // i_ == AUX778076_SEQUENCE_LIMIT\r
262 \r
263 #   else\r
264 \r
265 namespace aux {\r
266 \r
267 template<>\r
268 struct BOOST_PP_CAT(AUX778076_SEQUENCE_NAME,_chooser)<i_>\r
269 {\r
270     template<\r
271           AUX778076_SEQUENCE_PARAMS()\r
272         >\r
273     struct result_\r
274     {\r
275 #if i_ > 0 || defined(AUX778076_SEQUENCE_INTEGRAL_WRAPPER)\r
276         typedef typename AUX778076_SEQUENCE_NAME_N(i_)<\r
277               AUX778076_SEQUENCE_N_ARGS(i_)\r
278             >::type type;\r
279 #else\r
280         typedef AUX778076_SEQUENCE_NAME_N(i_)<\r
281               AUX778076_SEQUENCE_N_ARGS(i_)\r
282             >::type type;\r
283 #endif\r
284     };\r
285 };\r
286 \r
287 } // namespace aux\r
288 \r
289 #   endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION\r
290 \r
291 #undef i_\r
292 #endif // BOOST_PP_IS_ITERATING\r