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

Private GIT Repository
84f1cb2e587729b4d810f90b0b6317a8fc2c1f08
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / preprocessed / dmc / basic_bind.hpp
1 \r
2 // Copyright Peter Dimov 2001\r
3 // Copyright Aleksey Gurtovoy 2001-2004\r
4 //\r
5 // Distributed under the Boost Software License, Version 1.0. \r
6 // (See accompanying file LICENSE_1_0.txt or copy at \r
7 // http://www.boost.org/LICENSE_1_0.txt)\r
8 //\r
9 \r
10 // Preprocessed version of "boost/mpl/aux_/basic_bind.hpp" header\r
11 // -- DO NOT modify by hand!\r
12 \r
13 namespace boost { namespace mpl {\r
14 \r
15 namespace aux {\r
16 \r
17 template<\r
18       typename T, typename U1, typename U2, typename U3, typename U4\r
19     , typename U5\r
20     >\r
21 struct resolve_bind_arg\r
22 {\r
23     typedef T type;\r
24 };\r
25 \r
26 template<\r
27       int N, typename U1, typename U2, typename U3, typename U4, typename U5\r
28     >\r
29 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\r
30 {\r
31     typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\r
32 };\r
33 \r
34 template<\r
35       typename F, typename T1, typename T2, typename T3, typename T4\r
36     , typename T5, typename U1, typename U2, typename U3, typename U4\r
37     , typename U5\r
38     >\r
39 struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\r
40 {\r
41     typedef bind< F,T1,T2,T3,T4,T5 > f_;\r
42     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
43 };\r
44 \r
45 } // namespace aux\r
46 \r
47 template<\r
48       typename F, int dummy_\r
49     >\r
50 struct bind0\r
51 {\r
52     template<\r
53           typename U1 = na, typename U2 = na, typename U3 = na\r
54         , typename U4 = na, typename U5 = na\r
55         >\r
56     struct apply\r
57     {\r
58      private:\r
59         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
60 \r
61      public:\r
62         typedef typename apply_wrap0<\r
63               f_\r
64             >::type type;\r
65 \r
66     };\r
67 };\r
68 \r
69 namespace aux {\r
70 \r
71 template<\r
72       typename F, typename U1, typename U2, typename U3, typename U4\r
73     , typename U5\r
74     >\r
75 struct resolve_bind_arg<\r
76       bind0<F>, U1, U2, U3, U4, U5\r
77     >\r
78 {\r
79     typedef bind0<F> f_;\r
80     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
81 };\r
82 \r
83 } // namespace aux\r
84 \r
85 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)\r
86 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\r
87 \r
88 template<\r
89       typename F, int dummy_\r
90     >\r
91 struct bind< F,na,na,na,na,na >\r
92     : bind0<F>\r
93 {\r
94 };\r
95 \r
96 template<\r
97       typename F, typename T1, int dummy_\r
98     >\r
99 struct bind1\r
100 {\r
101     template<\r
102           typename U1 = na, typename U2 = na, typename U3 = na\r
103         , typename U4 = na, typename U5 = na\r
104         >\r
105     struct apply\r
106     {\r
107      private:\r
108         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
109         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
110 \r
111      public:\r
112         typedef typename apply_wrap1<\r
113               f_\r
114             , typename t1::type\r
115             >::type type;\r
116 \r
117     };\r
118 };\r
119 \r
120 namespace aux {\r
121 \r
122 template<\r
123       typename F, typename T1, typename U1, typename U2, typename U3\r
124     , typename U4, typename U5\r
125     >\r
126 struct resolve_bind_arg<\r
127       bind1< F,T1 >, U1, U2, U3, U4, U5\r
128     >\r
129 {\r
130     typedef bind1< F,T1 > f_;\r
131     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
132 };\r
133 \r
134 } // namespace aux\r
135 \r
136 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)\r
137 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\r
138 \r
139 template<\r
140       typename F, typename T1, int dummy_\r
141     >\r
142 struct bind< F,T1,na,na,na,na >\r
143     : bind1< F,T1 >\r
144 {\r
145 };\r
146 \r
147 template<\r
148       typename F, typename T1, typename T2, int dummy_\r
149     >\r
150 struct bind2\r
151 {\r
152     template<\r
153           typename U1 = na, typename U2 = na, typename U3 = na\r
154         , typename U4 = na, typename U5 = na\r
155         >\r
156     struct apply\r
157     {\r
158      private:\r
159         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
160         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
161         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
162 \r
163      public:\r
164         typedef typename apply_wrap2<\r
165               f_\r
166             , typename t1::type, typename t2::type\r
167             >::type type;\r
168 \r
169     };\r
170 };\r
171 \r
172 namespace aux {\r
173 \r
174 template<\r
175       typename F, typename T1, typename T2, typename U1, typename U2\r
176     , typename U3, typename U4, typename U5\r
177     >\r
178 struct resolve_bind_arg<\r
179       bind2< F,T1,T2 >, U1, U2, U3, U4, U5\r
180     >\r
181 {\r
182     typedef bind2< F,T1,T2 > f_;\r
183     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
184 };\r
185 \r
186 } // namespace aux\r
187 \r
188 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)\r
189 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\r
190 \r
191 template<\r
192       typename F, typename T1, typename T2, int dummy_\r
193     >\r
194 struct bind< F,T1,T2,na,na,na >\r
195     : bind2< F,T1,T2 >\r
196 {\r
197 };\r
198 \r
199 template<\r
200       typename F, typename T1, typename T2, typename T3, int dummy_\r
201     >\r
202 struct bind3\r
203 {\r
204     template<\r
205           typename U1 = na, typename U2 = na, typename U3 = na\r
206         , typename U4 = na, typename U5 = na\r
207         >\r
208     struct apply\r
209     {\r
210      private:\r
211         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
212         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
213         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
214         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\r
215 \r
216      public:\r
217         typedef typename apply_wrap3<\r
218               f_\r
219             , typename t1::type, typename t2::type, typename t3::type\r
220             >::type type;\r
221 \r
222     };\r
223 };\r
224 \r
225 namespace aux {\r
226 \r
227 template<\r
228       typename F, typename T1, typename T2, typename T3, typename U1\r
229     , typename U2, typename U3, typename U4, typename U5\r
230     >\r
231 struct resolve_bind_arg<\r
232       bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\r
233     >\r
234 {\r
235     typedef bind3< F,T1,T2,T3 > f_;\r
236     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
237 };\r
238 \r
239 } // namespace aux\r
240 \r
241 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)\r
242 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\r
243 \r
244 template<\r
245       typename F, typename T1, typename T2, typename T3, int dummy_\r
246     >\r
247 struct bind< F,T1,T2,T3,na,na >\r
248     : bind3< F,T1,T2,T3 >\r
249 {\r
250 };\r
251 \r
252 template<\r
253       typename F, typename T1, typename T2, typename T3, typename T4\r
254     , int dummy_\r
255     >\r
256 struct bind4\r
257 {\r
258     template<\r
259           typename U1 = na, typename U2 = na, typename U3 = na\r
260         , typename U4 = na, typename U5 = na\r
261         >\r
262     struct apply\r
263     {\r
264      private:\r
265         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
266         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
267         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
268         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\r
269         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\r
270 \r
271      public:\r
272         typedef typename apply_wrap4<\r
273               f_\r
274             , typename t1::type, typename t2::type, typename t3::type\r
275             , typename t4::type\r
276             >::type type;\r
277 \r
278     };\r
279 };\r
280 \r
281 namespace aux {\r
282 \r
283 template<\r
284       typename F, typename T1, typename T2, typename T3, typename T4\r
285     , typename U1, typename U2, typename U3, typename U4, typename U5\r
286     >\r
287 struct resolve_bind_arg<\r
288       bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\r
289     >\r
290 {\r
291     typedef bind4< F,T1,T2,T3,T4 > f_;\r
292     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
293 };\r
294 \r
295 } // namespace aux\r
296 \r
297 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)\r
298 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\r
299 \r
300 template<\r
301       typename F, typename T1, typename T2, typename T3, typename T4\r
302     , int dummy_\r
303     >\r
304 struct bind< F,T1,T2,T3,T4,na >\r
305     : bind4< F,T1,T2,T3,T4 >\r
306 {\r
307 };\r
308 \r
309 template<\r
310       typename F, typename T1, typename T2, typename T3, typename T4\r
311     , typename T5, int dummy_\r
312     >\r
313 struct bind5\r
314 {\r
315     template<\r
316           typename U1 = na, typename U2 = na, typename U3 = na\r
317         , typename U4 = na, typename U5 = na\r
318         >\r
319     struct apply\r
320     {\r
321      private:\r
322         typedef typename aux::resolve_bind_arg< F,U1,U2,U3,U4,U5 >::type f_;\r
323         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
324         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
325         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\r
326         typedef aux::resolve_bind_arg< T4,U1,U2,U3,U4,U5 > t4;\r
327         typedef aux::resolve_bind_arg< T5,U1,U2,U3,U4,U5 > t5;\r
328 \r
329      public:\r
330         typedef typename apply_wrap5<\r
331               f_\r
332             , typename t1::type, typename t2::type, typename t3::type\r
333             , typename t4::type, typename t5::type\r
334             >::type type;\r
335 \r
336     };\r
337 };\r
338 \r
339 namespace aux {\r
340 \r
341 template<\r
342       typename F, typename T1, typename T2, typename T3, typename T4\r
343     , typename T5, typename U1, typename U2, typename U3, typename U4\r
344     , typename U5\r
345     >\r
346 struct resolve_bind_arg<\r
347       bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\r
348     >\r
349 {\r
350     typedef bind5< F,T1,T2,T3,T4,T5 > f_;\r
351     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
352 };\r
353 \r
354 } // namespace aux\r
355 \r
356 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)\r
357 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\r
358 \r
359 /// primary template (not a specialization!)\r
360 \r
361 template<\r
362       typename F, typename T1, typename T2, typename T3, typename T4\r
363     , typename T5, int dummy_\r
364     >\r
365 struct bind\r
366     : bind5< F,T1,T2,T3,T4,T5 >\r
367 {\r
368 };\r
369 \r
370 /// if_/eval_if specializations\r
371 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >\r
372 struct quote3;\r
373 \r
374 template< typename T1, typename T2, typename T3 > struct if_;\r
375 \r
376 template<\r
377       typename Tag, typename T1, typename T2, typename T3\r
378     >\r
379 struct bind3<\r
380       quote3< if_,Tag >\r
381     , T1, T2, T3\r
382     >\r
383 {\r
384     template<\r
385           typename U1 = na, typename U2 = na, typename U3 = na\r
386         , typename U4 = na, typename U5 = na\r
387         >\r
388     struct apply\r
389     {\r
390      private:\r
391         typedef mpl::arg<1> n1;\r
392         typedef aux::resolve_bind_arg< T1,U1,U2,U3,U4,U5 > t1;\r
393         typedef aux::resolve_bind_arg< T2,U1,U2,U3,U4,U5 > t2;\r
394         typedef aux::resolve_bind_arg< T3,U1,U2,U3,U4,U5 > t3;\r
395         typedef typename if_<\r
396               typename t1::type\r
397             , t2, t3\r
398             >::type f_;\r
399 \r
400      public:\r
401         typedef typename f_::type type;\r
402     };\r
403 };\r
404 \r
405 }}\r
406 \r