source: NonGTP/Boost/boost/mpl/aux_/preprocessed/dmc/bind.hpp @ 857

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