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

Private GIT Repository
97d744972ba871ac3cab8c31ebdd4314ee3d2de8
[canny.git] / stc / exp / ml_stc_linux_make_v1.0 / include / boost / mpl / aux_ / preprocessed / dmc / 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/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       typename T\r
28     , typename Arg\r
29     >\r
30 struct replace_unnamed_arg\r
31 {\r
32     typedef Arg next;\r
33     typedef T type;\r
34 };\r
35 \r
36 template<\r
37       typename Arg\r
38     >\r
39 struct replace_unnamed_arg< arg< -1 >, Arg >\r
40 {\r
41     typedef typename Arg::next next;\r
42     typedef Arg type;\r
43 };\r
44 \r
45 template<\r
46       int N, typename U1, typename U2, typename U3, typename U4, typename U5\r
47     >\r
48 struct resolve_bind_arg< arg<N>, U1, U2, U3, U4, U5 >\r
49 {\r
50     typedef typename apply_wrap5<mpl::arg<N>, U1, U2, U3, U4, U5>::type type;\r
51 };\r
52 \r
53 template<\r
54       typename F, typename T1, typename T2, typename T3, typename T4\r
55     , typename T5, typename U1, typename U2, typename U3, typename U4\r
56     , typename U5\r
57     >\r
58 struct resolve_bind_arg< bind< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5 >\r
59 {\r
60     typedef bind< F,T1,T2,T3,T4,T5 > f_;\r
61     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
62 };\r
63 \r
64 } // namespace aux\r
65 \r
66 template<\r
67       typename F, int dummy_\r
68     >\r
69 struct bind0\r
70 {\r
71     template<\r
72           typename U1 = na, typename U2 = na, typename U3 = na\r
73         , typename U4 = na, typename U5 = na\r
74         >\r
75     struct apply\r
76     {\r
77      private:\r
78         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
79         typedef typename r0::type a0;\r
80         typedef typename r0::next n1;\r
81         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
82         ///\r
83      public:\r
84         typedef typename apply_wrap0<\r
85               f_\r
86             >::type type;\r
87 \r
88     };\r
89 };\r
90 \r
91 namespace aux {\r
92 \r
93 template<\r
94       typename F, typename U1, typename U2, typename U3, typename U4\r
95     , typename U5\r
96     >\r
97 struct resolve_bind_arg<\r
98       bind0<F>, U1, U2, U3, U4, U5\r
99     >\r
100 {\r
101     typedef bind0<F> f_;\r
102     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
103 };\r
104 \r
105 } // namespace aux\r
106 \r
107 BOOST_MPL_AUX_ARITY_SPEC(1, bind0)\r
108 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)\r
109 \r
110 template<\r
111       typename F, int dummy_\r
112     >\r
113 struct bind< F,na,na,na,na,na >\r
114     : bind0<F>\r
115 {\r
116 };\r
117 \r
118 template<\r
119       typename F, typename T1, int dummy_\r
120     >\r
121 struct bind1\r
122 {\r
123     template<\r
124           typename U1 = na, typename U2 = na, typename U3 = na\r
125         , typename U4 = na, typename U5 = na\r
126         >\r
127     struct apply\r
128     {\r
129      private:\r
130         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
131         typedef typename r0::type a0;\r
132         typedef typename r0::next n1;\r
133         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
134         ///\r
135         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
136         typedef typename r1::type a1;\r
137         typedef typename r1::next n2;\r
138         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
139         ///\r
140      public:\r
141         typedef typename apply_wrap1<\r
142               f_\r
143             , typename t1::type\r
144             >::type type;\r
145 \r
146     };\r
147 };\r
148 \r
149 namespace aux {\r
150 \r
151 template<\r
152       typename F, typename T1, typename U1, typename U2, typename U3\r
153     , typename U4, typename U5\r
154     >\r
155 struct resolve_bind_arg<\r
156       bind1< F,T1 >, U1, U2, U3, U4, U5\r
157     >\r
158 {\r
159     typedef bind1< F,T1 > f_;\r
160     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
161 };\r
162 \r
163 } // namespace aux\r
164 \r
165 BOOST_MPL_AUX_ARITY_SPEC(2, bind1)\r
166 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)\r
167 \r
168 template<\r
169       typename F, typename T1, int dummy_\r
170     >\r
171 struct bind< F,T1,na,na,na,na >\r
172     : bind1< F,T1 >\r
173 {\r
174 };\r
175 \r
176 template<\r
177       typename F, typename T1, typename T2, int dummy_\r
178     >\r
179 struct bind2\r
180 {\r
181     template<\r
182           typename U1 = na, typename U2 = na, typename U3 = na\r
183         , typename U4 = na, typename U5 = na\r
184         >\r
185     struct apply\r
186     {\r
187      private:\r
188         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
189         typedef typename r0::type a0;\r
190         typedef typename r0::next n1;\r
191         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
192         ///\r
193         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
194         typedef typename r1::type a1;\r
195         typedef typename r1::next n2;\r
196         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
197         ///\r
198         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
199         typedef typename r2::type a2;\r
200         typedef typename r2::next n3;\r
201         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
202         ///\r
203      public:\r
204         typedef typename apply_wrap2<\r
205               f_\r
206             , typename t1::type, typename t2::type\r
207             >::type type;\r
208 \r
209     };\r
210 };\r
211 \r
212 namespace aux {\r
213 \r
214 template<\r
215       typename F, typename T1, typename T2, typename U1, typename U2\r
216     , typename U3, typename U4, typename U5\r
217     >\r
218 struct resolve_bind_arg<\r
219       bind2< F,T1,T2 >, U1, U2, U3, U4, U5\r
220     >\r
221 {\r
222     typedef bind2< F,T1,T2 > f_;\r
223     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
224 };\r
225 \r
226 } // namespace aux\r
227 \r
228 BOOST_MPL_AUX_ARITY_SPEC(3, bind2)\r
229 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)\r
230 \r
231 template<\r
232       typename F, typename T1, typename T2, int dummy_\r
233     >\r
234 struct bind< F,T1,T2,na,na,na >\r
235     : bind2< F,T1,T2 >\r
236 {\r
237 };\r
238 \r
239 template<\r
240       typename F, typename T1, typename T2, typename T3, int dummy_\r
241     >\r
242 struct bind3\r
243 {\r
244     template<\r
245           typename U1 = na, typename U2 = na, typename U3 = na\r
246         , typename U4 = na, typename U5 = na\r
247         >\r
248     struct apply\r
249     {\r
250      private:\r
251         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
252         typedef typename r0::type a0;\r
253         typedef typename r0::next n1;\r
254         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
255         ///\r
256         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
257         typedef typename r1::type a1;\r
258         typedef typename r1::next n2;\r
259         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
260         ///\r
261         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
262         typedef typename r2::type a2;\r
263         typedef typename r2::next n3;\r
264         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
265         ///\r
266         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
267         typedef typename r3::type a3;\r
268         typedef typename r3::next n4;\r
269         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
270         ///\r
271      public:\r
272         typedef typename apply_wrap3<\r
273               f_\r
274             , typename t1::type, typename t2::type, typename t3::type\r
275             >::type type;\r
276 \r
277     };\r
278 };\r
279 \r
280 namespace aux {\r
281 \r
282 template<\r
283       typename F, typename T1, typename T2, typename T3, typename U1\r
284     , typename U2, typename U3, typename U4, typename U5\r
285     >\r
286 struct resolve_bind_arg<\r
287       bind3< F,T1,T2,T3 >, U1, U2, U3, U4, U5\r
288     >\r
289 {\r
290     typedef bind3< F,T1,T2,T3 > f_;\r
291     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
292 };\r
293 \r
294 } // namespace aux\r
295 \r
296 BOOST_MPL_AUX_ARITY_SPEC(4, bind3)\r
297 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)\r
298 \r
299 template<\r
300       typename F, typename T1, typename T2, typename T3, int dummy_\r
301     >\r
302 struct bind< F,T1,T2,T3,na,na >\r
303     : bind3< F,T1,T2,T3 >\r
304 {\r
305 };\r
306 \r
307 template<\r
308       typename F, typename T1, typename T2, typename T3, typename T4\r
309     , int dummy_\r
310     >\r
311 struct bind4\r
312 {\r
313     template<\r
314           typename U1 = na, typename U2 = na, typename U3 = na\r
315         , typename U4 = na, typename U5 = na\r
316         >\r
317     struct apply\r
318     {\r
319      private:\r
320         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
321         typedef typename r0::type a0;\r
322         typedef typename r0::next n1;\r
323         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
324         ///\r
325         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
326         typedef typename r1::type a1;\r
327         typedef typename r1::next n2;\r
328         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
329         ///\r
330         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
331         typedef typename r2::type a2;\r
332         typedef typename r2::next n3;\r
333         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
334         ///\r
335         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
336         typedef typename r3::type a3;\r
337         typedef typename r3::next n4;\r
338         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
339         ///\r
340         typedef aux::replace_unnamed_arg< T4,n4 > r4;\r
341         typedef typename r4::type a4;\r
342         typedef typename r4::next n5;\r
343         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\r
344         ///\r
345      public:\r
346         typedef typename apply_wrap4<\r
347               f_\r
348             , typename t1::type, typename t2::type, typename t3::type\r
349             , typename t4::type\r
350             >::type type;\r
351 \r
352     };\r
353 };\r
354 \r
355 namespace aux {\r
356 \r
357 template<\r
358       typename F, typename T1, typename T2, typename T3, typename T4\r
359     , typename U1, typename U2, typename U3, typename U4, typename U5\r
360     >\r
361 struct resolve_bind_arg<\r
362       bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5\r
363     >\r
364 {\r
365     typedef bind4< F,T1,T2,T3,T4 > f_;\r
366     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
367 };\r
368 \r
369 } // namespace aux\r
370 \r
371 BOOST_MPL_AUX_ARITY_SPEC(5, bind4)\r
372 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)\r
373 \r
374 template<\r
375       typename F, typename T1, typename T2, typename T3, typename T4\r
376     , int dummy_\r
377     >\r
378 struct bind< F,T1,T2,T3,T4,na >\r
379     : bind4< F,T1,T2,T3,T4 >\r
380 {\r
381 };\r
382 \r
383 template<\r
384       typename F, typename T1, typename T2, typename T3, typename T4\r
385     , typename T5, int dummy_\r
386     >\r
387 struct bind5\r
388 {\r
389     template<\r
390           typename U1 = na, typename U2 = na, typename U3 = na\r
391         , typename U4 = na, typename U5 = na\r
392         >\r
393     struct apply\r
394     {\r
395      private:\r
396         typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;\r
397         typedef typename r0::type a0;\r
398         typedef typename r0::next n1;\r
399         typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;\r
400         ///\r
401         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
402         typedef typename r1::type a1;\r
403         typedef typename r1::next n2;\r
404         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
405         ///\r
406         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
407         typedef typename r2::type a2;\r
408         typedef typename r2::next n3;\r
409         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
410         ///\r
411         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
412         typedef typename r3::type a3;\r
413         typedef typename r3::next n4;\r
414         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
415         ///\r
416         typedef aux::replace_unnamed_arg< T4,n4 > r4;\r
417         typedef typename r4::type a4;\r
418         typedef typename r4::next n5;\r
419         typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;\r
420         ///\r
421         typedef aux::replace_unnamed_arg< T5,n5 > r5;\r
422         typedef typename r5::type a5;\r
423         typedef typename r5::next n6;\r
424         typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;\r
425         ///\r
426      public:\r
427         typedef typename apply_wrap5<\r
428               f_\r
429             , typename t1::type, typename t2::type, typename t3::type\r
430             , typename t4::type, typename t5::type\r
431             >::type type;\r
432 \r
433     };\r
434 };\r
435 \r
436 namespace aux {\r
437 \r
438 template<\r
439       typename F, typename T1, typename T2, typename T3, typename T4\r
440     , typename T5, typename U1, typename U2, typename U3, typename U4\r
441     , typename U5\r
442     >\r
443 struct resolve_bind_arg<\r
444       bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5\r
445     >\r
446 {\r
447     typedef bind5< F,T1,T2,T3,T4,T5 > f_;\r
448     typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;\r
449 };\r
450 \r
451 } // namespace aux\r
452 \r
453 BOOST_MPL_AUX_ARITY_SPEC(6, bind5)\r
454 BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)\r
455 \r
456 /// primary template (not a specialization!)\r
457 \r
458 template<\r
459       typename F, typename T1, typename T2, typename T3, typename T4\r
460     , typename T5, int dummy_\r
461     >\r
462 struct bind\r
463     : bind5< F,T1,T2,T3,T4,T5 >\r
464 {\r
465 };\r
466 \r
467 /// if_/eval_if specializations\r
468 template< template< typename T1, typename T2, typename T3 > class F, typename Tag >\r
469 struct quote3;\r
470 \r
471 template< typename T1, typename T2, typename T3 > struct if_;\r
472 \r
473 template<\r
474       typename Tag, typename T1, typename T2, typename T3\r
475     >\r
476 struct bind3<\r
477       quote3< if_,Tag >\r
478     , T1, T2, T3\r
479     >\r
480 {\r
481     template<\r
482           typename U1 = na, typename U2 = na, typename U3 = na\r
483         , typename U4 = na, typename U5 = na\r
484         >\r
485     struct apply\r
486     {\r
487      private:\r
488         typedef mpl::arg<1> n1;\r
489         typedef aux::replace_unnamed_arg< T1,n1 > r1;\r
490         typedef typename r1::type a1;\r
491         typedef typename r1::next n2;\r
492         typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;\r
493         ///\r
494         typedef aux::replace_unnamed_arg< T2,n2 > r2;\r
495         typedef typename r2::type a2;\r
496         typedef typename r2::next n3;\r
497         typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;\r
498         ///\r
499         typedef aux::replace_unnamed_arg< T3,n3 > r3;\r
500         typedef typename r3::type a3;\r
501         typedef typename r3::next n4;\r
502         typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;\r
503         ///\r
504         typedef typename if_<\r
505               typename t1::type\r
506             , t2, t3\r
507             >::type f_;\r
508 \r
509      public:\r
510         typedef typename f_::type type;\r
511     };\r
512 };\r
513 \r
514 }}\r
515 \r