~ubuntu-branches/ubuntu/saucy/merkaartor/saucy

« back to all changes in this revision

Viewing changes to include/builtin-boost/boost/mpl/aux_/preprocessed/plain/bind.hpp

Tags: upstream-0.15.3+svn20934
ImportĀ upstreamĀ versionĀ 0.15.3+svn20934

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
 
13
namespace boost { namespace mpl {
 
14
 
 
15
namespace aux {
 
16
 
 
17
template<
 
18
      typename T, typename U1, typename U2, typename U3, typename U4
 
19
    , typename U5
 
20
    >
 
21
struct resolve_bind_arg
 
22
{
 
23
    typedef T type;
 
24
};
 
25
 
 
26
template<
 
27
      typename T
 
28
    , typename Arg
 
29
    >
 
30
struct replace_unnamed_arg
 
31
{
 
32
    typedef Arg next;
 
33
    typedef T type;
 
34
};
 
35
 
 
36
template<
 
37
      typename Arg
 
38
    >
 
39
struct replace_unnamed_arg< arg< -1 >, Arg >
 
40
{
 
41
    typedef typename Arg::next next;
 
42
    typedef Arg type;
 
43
};
 
44
 
 
45
template<
 
46
      int N, typename U1, typename U2, typename U3, typename U4, typename U5
 
47
    >
 
48
struct 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
 
 
53
template<
 
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
    >
 
58
struct 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
 
 
66
template<
 
67
      typename F
 
68
    >
 
69
struct 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
 
 
91
namespace aux {
 
92
 
 
93
template<
 
94
      typename F, typename U1, typename U2, typename U3, typename U4
 
95
    , typename U5
 
96
    >
 
97
struct 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
 
 
107
BOOST_MPL_AUX_ARITY_SPEC(1, bind0)
 
108
BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(1, bind0)
 
109
 
 
110
template<
 
111
      typename F
 
112
    >
 
113
struct bind< F,na,na,na,na,na >
 
114
    : bind0<F>
 
115
{
 
116
};
 
117
 
 
118
template<
 
119
      typename F, typename T1
 
120
    >
 
121
struct 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
 
 
149
namespace aux {
 
150
 
 
151
template<
 
152
      typename F, typename T1, typename U1, typename U2, typename U3
 
153
    , typename U4, typename U5
 
154
    >
 
155
struct 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
 
 
165
BOOST_MPL_AUX_ARITY_SPEC(2, bind1)
 
166
BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(2, bind1)
 
167
 
 
168
template<
 
169
      typename F, typename T1
 
170
    >
 
171
struct bind< F,T1,na,na,na,na >
 
172
    : bind1< F,T1 >
 
173
{
 
174
};
 
175
 
 
176
template<
 
177
      typename F, typename T1, typename T2
 
178
    >
 
179
struct 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
 
 
212
namespace aux {
 
213
 
 
214
template<
 
215
      typename F, typename T1, typename T2, typename U1, typename U2
 
216
    , typename U3, typename U4, typename U5
 
217
    >
 
218
struct 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
 
 
228
BOOST_MPL_AUX_ARITY_SPEC(3, bind2)
 
229
BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(3, bind2)
 
230
 
 
231
template<
 
232
      typename F, typename T1, typename T2
 
233
    >
 
234
struct bind< F,T1,T2,na,na,na >
 
235
    : bind2< F,T1,T2 >
 
236
{
 
237
};
 
238
 
 
239
template<
 
240
      typename F, typename T1, typename T2, typename T3
 
241
    >
 
242
struct 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
 
 
280
namespace aux {
 
281
 
 
282
template<
 
283
      typename F, typename T1, typename T2, typename T3, typename U1
 
284
    , typename U2, typename U3, typename U4, typename U5
 
285
    >
 
286
struct 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
 
 
296
BOOST_MPL_AUX_ARITY_SPEC(4, bind3)
 
297
BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(4, bind3)
 
298
 
 
299
template<
 
300
      typename F, typename T1, typename T2, typename T3
 
301
    >
 
302
struct bind< F,T1,T2,T3,na,na >
 
303
    : bind3< F,T1,T2,T3 >
 
304
{
 
305
};
 
306
 
 
307
template<
 
308
      typename F, typename T1, typename T2, typename T3, typename T4
 
309
    >
 
310
struct bind4
 
311
{
 
312
    template<
 
313
          typename U1 = na, typename U2 = na, typename U3 = na
 
314
        , typename U4 = na, typename U5 = na
 
315
        >
 
316
    struct apply
 
317
    {
 
318
     private:
 
319
        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
 
320
        typedef typename r0::type a0;
 
321
        typedef typename r0::next n1;
 
322
        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
 
323
        ///
 
324
        typedef aux::replace_unnamed_arg< T1,n1 > r1;
 
325
        typedef typename r1::type a1;
 
326
        typedef typename r1::next n2;
 
327
        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
 
328
        ///
 
329
        typedef aux::replace_unnamed_arg< T2,n2 > r2;
 
330
        typedef typename r2::type a2;
 
331
        typedef typename r2::next n3;
 
332
        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
 
333
        ///
 
334
        typedef aux::replace_unnamed_arg< T3,n3 > r3;
 
335
        typedef typename r3::type a3;
 
336
        typedef typename r3::next n4;
 
337
        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
 
338
        ///
 
339
        typedef aux::replace_unnamed_arg< T4,n4 > r4;
 
340
        typedef typename r4::type a4;
 
341
        typedef typename r4::next n5;
 
342
        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
 
343
        ///
 
344
     public:
 
345
        typedef typename apply_wrap4<
 
346
              f_
 
347
            , typename t1::type, typename t2::type, typename t3::type
 
348
            , typename t4::type
 
349
            >::type type;
 
350
 
 
351
    };
 
352
};
 
353
 
 
354
namespace aux {
 
355
 
 
356
template<
 
357
      typename F, typename T1, typename T2, typename T3, typename T4
 
358
    , typename U1, typename U2, typename U3, typename U4, typename U5
 
359
    >
 
360
struct resolve_bind_arg<
 
361
      bind4< F,T1,T2,T3,T4 >, U1, U2, U3, U4, U5
 
362
    >
 
363
{
 
364
    typedef bind4< F,T1,T2,T3,T4 > f_;
 
365
    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
 
366
};
 
367
 
 
368
} // namespace aux
 
369
 
 
370
BOOST_MPL_AUX_ARITY_SPEC(5, bind4)
 
371
BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(5, bind4)
 
372
 
 
373
template<
 
374
      typename F, typename T1, typename T2, typename T3, typename T4
 
375
    >
 
376
struct bind< F,T1,T2,T3,T4,na >
 
377
    : bind4< F,T1,T2,T3,T4 >
 
378
{
 
379
};
 
380
 
 
381
template<
 
382
      typename F, typename T1, typename T2, typename T3, typename T4
 
383
    , typename T5
 
384
    >
 
385
struct bind5
 
386
{
 
387
    template<
 
388
          typename U1 = na, typename U2 = na, typename U3 = na
 
389
        , typename U4 = na, typename U5 = na
 
390
        >
 
391
    struct apply
 
392
    {
 
393
     private:
 
394
        typedef aux::replace_unnamed_arg< F, mpl::arg<1> > r0;
 
395
        typedef typename r0::type a0;
 
396
        typedef typename r0::next n1;
 
397
        typedef typename aux::resolve_bind_arg< a0,U1,U2,U3,U4,U5 >::type f_;
 
398
        ///
 
399
        typedef aux::replace_unnamed_arg< T1,n1 > r1;
 
400
        typedef typename r1::type a1;
 
401
        typedef typename r1::next n2;
 
402
        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
 
403
        ///
 
404
        typedef aux::replace_unnamed_arg< T2,n2 > r2;
 
405
        typedef typename r2::type a2;
 
406
        typedef typename r2::next n3;
 
407
        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
 
408
        ///
 
409
        typedef aux::replace_unnamed_arg< T3,n3 > r3;
 
410
        typedef typename r3::type a3;
 
411
        typedef typename r3::next n4;
 
412
        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
 
413
        ///
 
414
        typedef aux::replace_unnamed_arg< T4,n4 > r4;
 
415
        typedef typename r4::type a4;
 
416
        typedef typename r4::next n5;
 
417
        typedef aux::resolve_bind_arg< a4,U1,U2,U3,U4,U5 > t4;
 
418
        ///
 
419
        typedef aux::replace_unnamed_arg< T5,n5 > r5;
 
420
        typedef typename r5::type a5;
 
421
        typedef typename r5::next n6;
 
422
        typedef aux::resolve_bind_arg< a5,U1,U2,U3,U4,U5 > t5;
 
423
        ///
 
424
     public:
 
425
        typedef typename apply_wrap5<
 
426
              f_
 
427
            , typename t1::type, typename t2::type, typename t3::type
 
428
            , typename t4::type, typename t5::type
 
429
            >::type type;
 
430
 
 
431
    };
 
432
};
 
433
 
 
434
namespace aux {
 
435
 
 
436
template<
 
437
      typename F, typename T1, typename T2, typename T3, typename T4
 
438
    , typename T5, typename U1, typename U2, typename U3, typename U4
 
439
    , typename U5
 
440
    >
 
441
struct resolve_bind_arg<
 
442
      bind5< F,T1,T2,T3,T4,T5 >, U1, U2, U3, U4, U5
 
443
    >
 
444
{
 
445
    typedef bind5< F,T1,T2,T3,T4,T5 > f_;
 
446
    typedef typename apply_wrap5< f_,U1,U2,U3,U4,U5 >::type type;
 
447
};
 
448
 
 
449
} // namespace aux
 
450
 
 
451
BOOST_MPL_AUX_ARITY_SPEC(6, bind5)
 
452
BOOST_MPL_AUX_TEMPLATE_ARITY_SPEC(6, bind5)
 
453
 
 
454
/// primary template (not a specialization!)
 
455
 
 
456
template<
 
457
      typename F, typename T1, typename T2, typename T3, typename T4
 
458
    , typename T5
 
459
    >
 
460
struct bind
 
461
    : bind5< F,T1,T2,T3,T4,T5 >
 
462
{
 
463
};
 
464
 
 
465
/// if_/eval_if specializations
 
466
template< template< typename T1, typename T2, typename T3 > class F, typename Tag >
 
467
struct quote3;
 
468
 
 
469
template< typename T1, typename T2, typename T3 > struct if_;
 
470
 
 
471
template<
 
472
      typename Tag, typename T1, typename T2, typename T3
 
473
    >
 
474
struct bind3<
 
475
      quote3< if_,Tag >
 
476
    , T1, T2, T3
 
477
    >
 
478
{
 
479
    template<
 
480
          typename U1 = na, typename U2 = na, typename U3 = na
 
481
        , typename U4 = na, typename U5 = na
 
482
        >
 
483
    struct apply
 
484
    {
 
485
     private:
 
486
        typedef mpl::arg<1> n1;
 
487
        typedef aux::replace_unnamed_arg< T1,n1 > r1;
 
488
        typedef typename r1::type a1;
 
489
        typedef typename r1::next n2;
 
490
        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
 
491
        ///
 
492
        typedef aux::replace_unnamed_arg< T2,n2 > r2;
 
493
        typedef typename r2::type a2;
 
494
        typedef typename r2::next n3;
 
495
        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
 
496
        ///
 
497
        typedef aux::replace_unnamed_arg< T3,n3 > r3;
 
498
        typedef typename r3::type a3;
 
499
        typedef typename r3::next n4;
 
500
        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
 
501
        ///
 
502
        typedef typename if_<
 
503
              typename t1::type
 
504
            , t2, t3
 
505
            >::type f_;
 
506
 
 
507
     public:
 
508
        typedef typename f_::type type;
 
509
    };
 
510
};
 
511
 
 
512
template<
 
513
      template< typename T1, typename T2, typename T3 > class F, typename Tag
 
514
    >
 
515
struct quote3;
 
516
 
 
517
template< typename T1, typename T2, typename T3 > struct eval_if;
 
518
 
 
519
template<
 
520
      typename Tag, typename T1, typename T2, typename T3
 
521
    >
 
522
struct bind3<
 
523
      quote3< eval_if,Tag >
 
524
    , T1, T2, T3
 
525
    >
 
526
{
 
527
    template<
 
528
          typename U1 = na, typename U2 = na, typename U3 = na
 
529
        , typename U4 = na, typename U5 = na
 
530
        >
 
531
    struct apply
 
532
    {
 
533
     private:
 
534
        typedef mpl::arg<1> n1;
 
535
        typedef aux::replace_unnamed_arg< T1,n1 > r1;
 
536
        typedef typename r1::type a1;
 
537
        typedef typename r1::next n2;
 
538
        typedef aux::resolve_bind_arg< a1,U1,U2,U3,U4,U5 > t1;
 
539
        ///
 
540
        typedef aux::replace_unnamed_arg< T2,n2 > r2;
 
541
        typedef typename r2::type a2;
 
542
        typedef typename r2::next n3;
 
543
        typedef aux::resolve_bind_arg< a2,U1,U2,U3,U4,U5 > t2;
 
544
        ///
 
545
        typedef aux::replace_unnamed_arg< T3,n3 > r3;
 
546
        typedef typename r3::type a3;
 
547
        typedef typename r3::next n4;
 
548
        typedef aux::resolve_bind_arg< a3,U1,U2,U3,U4,U5 > t3;
 
549
        ///
 
550
        typedef typename eval_if<
 
551
              typename t1::type
 
552
            , t2, t3
 
553
            >::type f_;
 
554
 
 
555
     public:
 
556
        typedef typename f_::type type;
 
557
    };
 
558
};
 
559
 
 
560
}}
 
561