epoc32/include/stdapis/boost/mpl/aux_/full_lambda.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
parent 2 epoc32/include/stdapis/boost/mpl/aux_/preprocessed/plain/full_lambda.hpp@2fe1408b6811
child 4 837f303aceeb
permissions -rw-r--r--
Attempt to represent the S^2->S^3 header reorganisation as a series of "hg rename" operations
williamr@2
     1
williamr@2
     2
// Copyright Aleksey Gurtovoy 2001-2004
williamr@2
     3
//
williamr@2
     4
// Distributed under the Boost Software License, Version 1.0. 
williamr@2
     5
// (See accompanying file LICENSE_1_0.txt or copy at 
williamr@2
     6
// http://www.boost.org/LICENSE_1_0.txt)
williamr@2
     7
//
williamr@2
     8
williamr@2
     9
// Preprocessed version of "boost/mpl/aux_/full_lambda.hpp" header
williamr@2
    10
// -- DO NOT modify by hand!
williamr@2
    11
williamr@2
    12
namespace boost { namespace mpl {
williamr@2
    13
williamr@2
    14
namespace aux {
williamr@2
    15
williamr@2
    16
template<
williamr@2
    17
      bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false
williamr@2
    18
    , bool C5 = false
williamr@2
    19
    >
williamr@2
    20
struct lambda_or
williamr@2
    21
    : true_
williamr@2
    22
{
williamr@2
    23
};
williamr@2
    24
williamr@2
    25
template<>
williamr@2
    26
struct lambda_or< false,false,false,false,false >
williamr@2
    27
    : false_
williamr@2
    28
{
williamr@2
    29
};
williamr@2
    30
williamr@2
    31
} // namespace aux
williamr@2
    32
williamr@2
    33
template<
williamr@2
    34
      typename T
williamr@2
    35
    , typename Tag
williamr@2
    36
   
williamr@2
    37
    >
williamr@2
    38
struct lambda
williamr@2
    39
{
williamr@2
    40
    typedef false_ is_le;
williamr@2
    41
    typedef T result_;
williamr@2
    42
    typedef T type;
williamr@2
    43
};
williamr@2
    44
williamr@2
    45
template<
williamr@2
    46
      typename T
williamr@2
    47
    >
williamr@2
    48
struct is_lambda_expression
williamr@2
    49
    : lambda<T>::is_le
williamr@2
    50
{
williamr@2
    51
};
williamr@2
    52
williamr@2
    53
template< int N, typename Tag >
williamr@2
    54
struct lambda< arg<N>, Tag >
williamr@2
    55
{
williamr@2
    56
    typedef true_ is_le;
williamr@2
    57
    typedef mpl::arg<N> result_; // qualified for the sake of MIPSpro 7.41
williamr@2
    58
    typedef mpl::protect<result_> type;
williamr@2
    59
};
williamr@2
    60
williamr@2
    61
template<
williamr@2
    62
      typename F
williamr@2
    63
    , typename Tag
williamr@2
    64
    >
williamr@2
    65
struct lambda<
williamr@2
    66
          bind0<F>
williamr@2
    67
        , Tag
williamr@2
    68
       
williamr@2
    69
        >
williamr@2
    70
{
williamr@2
    71
    typedef false_ is_le;
williamr@2
    72
    typedef bind0<
williamr@2
    73
          F
williamr@2
    74
        > result_;
williamr@2
    75
williamr@2
    76
    typedef result_ type;
williamr@2
    77
};
williamr@2
    78
williamr@2
    79
namespace aux {
williamr@2
    80
williamr@2
    81
template<
williamr@2
    82
      typename IsLE, typename Tag
williamr@2
    83
    , template< typename P1 > class F
williamr@2
    84
    , typename L1
williamr@2
    85
    >
williamr@2
    86
struct le_result1
williamr@2
    87
{
williamr@2
    88
    typedef F<
williamr@2
    89
          typename L1::type
williamr@2
    90
        > result_;
williamr@2
    91
williamr@2
    92
    typedef result_ type;
williamr@2
    93
};
williamr@2
    94
williamr@2
    95
template<
williamr@2
    96
      typename Tag
williamr@2
    97
    , template< typename P1 > class F
williamr@2
    98
    , typename L1
williamr@2
    99
    >
williamr@2
   100
struct le_result1< true_,Tag,F,L1 >
williamr@2
   101
{
williamr@2
   102
    typedef bind1<
williamr@2
   103
          quote1< F,Tag >
williamr@2
   104
        , typename L1::result_
williamr@2
   105
        > result_;
williamr@2
   106
williamr@2
   107
    typedef mpl::protect<result_> type;
williamr@2
   108
};
williamr@2
   109
williamr@2
   110
} // namespace aux
williamr@2
   111
williamr@2
   112
template<
williamr@2
   113
      template< typename P1 > class F
williamr@2
   114
    , typename T1
williamr@2
   115
    , typename Tag
williamr@2
   116
    >
williamr@2
   117
struct lambda<
williamr@2
   118
          F<T1>
williamr@2
   119
        , Tag
williamr@2
   120
       
williamr@2
   121
        >
williamr@2
   122
{
williamr@2
   123
    typedef lambda< T1,Tag > l1;
williamr@2
   124
    typedef typename l1::is_le is_le1;
williamr@2
   125
    typedef typename aux::lambda_or<
williamr@2
   126
          is_le1::value
williamr@2
   127
        >::type is_le;
williamr@2
   128
williamr@2
   129
    typedef aux::le_result1<
williamr@2
   130
          is_le, Tag, F, l1
williamr@2
   131
        > le_result_;
williamr@2
   132
williamr@2
   133
    typedef typename le_result_::result_ result_;
williamr@2
   134
    typedef typename le_result_::type type;
williamr@2
   135
};
williamr@2
   136
williamr@2
   137
template<
williamr@2
   138
      typename F, typename T1
williamr@2
   139
    , typename Tag
williamr@2
   140
    >
williamr@2
   141
struct lambda<
williamr@2
   142
          bind1< F,T1 >
williamr@2
   143
        , Tag
williamr@2
   144
       
williamr@2
   145
        >
williamr@2
   146
{
williamr@2
   147
    typedef false_ is_le;
williamr@2
   148
    typedef bind1<
williamr@2
   149
          F
williamr@2
   150
        , T1
williamr@2
   151
        > result_;
williamr@2
   152
williamr@2
   153
    typedef result_ type;
williamr@2
   154
};
williamr@2
   155
williamr@2
   156
namespace aux {
williamr@2
   157
williamr@2
   158
template<
williamr@2
   159
      typename IsLE, typename Tag
williamr@2
   160
    , template< typename P1, typename P2 > class F
williamr@2
   161
    , typename L1, typename L2
williamr@2
   162
    >
williamr@2
   163
struct le_result2
williamr@2
   164
{
williamr@2
   165
    typedef F<
williamr@2
   166
          typename L1::type, typename L2::type
williamr@2
   167
        > result_;
williamr@2
   168
williamr@2
   169
    typedef result_ type;
williamr@2
   170
};
williamr@2
   171
williamr@2
   172
template<
williamr@2
   173
      typename Tag
williamr@2
   174
    , template< typename P1, typename P2 > class F
williamr@2
   175
    , typename L1, typename L2
williamr@2
   176
    >
williamr@2
   177
struct le_result2< true_,Tag,F,L1,L2 >
williamr@2
   178
{
williamr@2
   179
    typedef bind2<
williamr@2
   180
          quote2< F,Tag >
williamr@2
   181
        , typename L1::result_, typename L2::result_
williamr@2
   182
        > result_;
williamr@2
   183
williamr@2
   184
    typedef mpl::protect<result_> type;
williamr@2
   185
};
williamr@2
   186
williamr@2
   187
} // namespace aux
williamr@2
   188
williamr@2
   189
template<
williamr@2
   190
      template< typename P1, typename P2 > class F
williamr@2
   191
    , typename T1, typename T2
williamr@2
   192
    , typename Tag
williamr@2
   193
    >
williamr@2
   194
struct lambda<
williamr@2
   195
          F< T1,T2 >
williamr@2
   196
        , Tag
williamr@2
   197
       
williamr@2
   198
        >
williamr@2
   199
{
williamr@2
   200
    typedef lambda< T1,Tag > l1;
williamr@2
   201
    typedef lambda< T2,Tag > l2;
williamr@2
   202
    
williamr@2
   203
    typedef typename l1::is_le is_le1;
williamr@2
   204
    typedef typename l2::is_le is_le2;
williamr@2
   205
    
williamr@2
   206
williamr@2
   207
    typedef typename aux::lambda_or<
williamr@2
   208
          is_le1::value, is_le2::value
williamr@2
   209
        >::type is_le;
williamr@2
   210
williamr@2
   211
    typedef aux::le_result2<
williamr@2
   212
          is_le, Tag, F, l1, l2
williamr@2
   213
        > le_result_;
williamr@2
   214
williamr@2
   215
    typedef typename le_result_::result_ result_;
williamr@2
   216
    typedef typename le_result_::type type;
williamr@2
   217
};
williamr@2
   218
williamr@2
   219
template<
williamr@2
   220
      typename F, typename T1, typename T2
williamr@2
   221
    , typename Tag
williamr@2
   222
    >
williamr@2
   223
struct lambda<
williamr@2
   224
          bind2< F,T1,T2 >
williamr@2
   225
        , Tag
williamr@2
   226
       
williamr@2
   227
        >
williamr@2
   228
{
williamr@2
   229
    typedef false_ is_le;
williamr@2
   230
    typedef bind2<
williamr@2
   231
          F
williamr@2
   232
        , T1, T2
williamr@2
   233
        > result_;
williamr@2
   234
williamr@2
   235
    typedef result_ type;
williamr@2
   236
};
williamr@2
   237
williamr@2
   238
namespace aux {
williamr@2
   239
williamr@2
   240
template<
williamr@2
   241
      typename IsLE, typename Tag
williamr@2
   242
    , template< typename P1, typename P2, typename P3 > class F
williamr@2
   243
    , typename L1, typename L2, typename L3
williamr@2
   244
    >
williamr@2
   245
struct le_result3
williamr@2
   246
{
williamr@2
   247
    typedef F<
williamr@2
   248
          typename L1::type, typename L2::type, typename L3::type
williamr@2
   249
        > result_;
williamr@2
   250
williamr@2
   251
    typedef result_ type;
williamr@2
   252
};
williamr@2
   253
williamr@2
   254
template<
williamr@2
   255
      typename Tag
williamr@2
   256
    , template< typename P1, typename P2, typename P3 > class F
williamr@2
   257
    , typename L1, typename L2, typename L3
williamr@2
   258
    >
williamr@2
   259
struct le_result3< true_,Tag,F,L1,L2,L3 >
williamr@2
   260
{
williamr@2
   261
    typedef bind3<
williamr@2
   262
          quote3< F,Tag >
williamr@2
   263
        , typename L1::result_, typename L2::result_, typename L3::result_
williamr@2
   264
        > result_;
williamr@2
   265
williamr@2
   266
    typedef mpl::protect<result_> type;
williamr@2
   267
};
williamr@2
   268
williamr@2
   269
} // namespace aux
williamr@2
   270
williamr@2
   271
template<
williamr@2
   272
      template< typename P1, typename P2, typename P3 > class F
williamr@2
   273
    , typename T1, typename T2, typename T3
williamr@2
   274
    , typename Tag
williamr@2
   275
    >
williamr@2
   276
struct lambda<
williamr@2
   277
          F< T1,T2,T3 >
williamr@2
   278
        , Tag
williamr@2
   279
       
williamr@2
   280
        >
williamr@2
   281
{
williamr@2
   282
    typedef lambda< T1,Tag > l1;
williamr@2
   283
    typedef lambda< T2,Tag > l2;
williamr@2
   284
    typedef lambda< T3,Tag > l3;
williamr@2
   285
    
williamr@2
   286
    typedef typename l1::is_le is_le1;
williamr@2
   287
    typedef typename l2::is_le is_le2;
williamr@2
   288
    typedef typename l3::is_le is_le3;
williamr@2
   289
    
williamr@2
   290
williamr@2
   291
    typedef typename aux::lambda_or<
williamr@2
   292
          is_le1::value, is_le2::value, is_le3::value
williamr@2
   293
        >::type is_le;
williamr@2
   294
williamr@2
   295
    typedef aux::le_result3<
williamr@2
   296
          is_le, Tag, F, l1, l2, l3
williamr@2
   297
        > le_result_;
williamr@2
   298
williamr@2
   299
    typedef typename le_result_::result_ result_;
williamr@2
   300
    typedef typename le_result_::type type;
williamr@2
   301
};
williamr@2
   302
williamr@2
   303
template<
williamr@2
   304
      typename F, typename T1, typename T2, typename T3
williamr@2
   305
    , typename Tag
williamr@2
   306
    >
williamr@2
   307
struct lambda<
williamr@2
   308
          bind3< F,T1,T2,T3 >
williamr@2
   309
        , Tag
williamr@2
   310
       
williamr@2
   311
        >
williamr@2
   312
{
williamr@2
   313
    typedef false_ is_le;
williamr@2
   314
    typedef bind3<
williamr@2
   315
          F
williamr@2
   316
        , T1, T2, T3
williamr@2
   317
        > result_;
williamr@2
   318
williamr@2
   319
    typedef result_ type;
williamr@2
   320
};
williamr@2
   321
williamr@2
   322
namespace aux {
williamr@2
   323
williamr@2
   324
template<
williamr@2
   325
      typename IsLE, typename Tag
williamr@2
   326
    , template< typename P1, typename P2, typename P3, typename P4 > class F
williamr@2
   327
    , typename L1, typename L2, typename L3, typename L4
williamr@2
   328
    >
williamr@2
   329
struct le_result4
williamr@2
   330
{
williamr@2
   331
    typedef F<
williamr@2
   332
          typename L1::type, typename L2::type, typename L3::type
williamr@2
   333
        , typename L4::type
williamr@2
   334
        > result_;
williamr@2
   335
williamr@2
   336
    typedef result_ type;
williamr@2
   337
};
williamr@2
   338
williamr@2
   339
template<
williamr@2
   340
      typename Tag
williamr@2
   341
    , template< typename P1, typename P2, typename P3, typename P4 > class F
williamr@2
   342
    , typename L1, typename L2, typename L3, typename L4
williamr@2
   343
    >
williamr@2
   344
struct le_result4< true_,Tag,F,L1,L2,L3,L4 >
williamr@2
   345
{
williamr@2
   346
    typedef bind4<
williamr@2
   347
          quote4< F,Tag >
williamr@2
   348
        , typename L1::result_, typename L2::result_, typename L3::result_
williamr@2
   349
        , typename L4::result_
williamr@2
   350
        > result_;
williamr@2
   351
williamr@2
   352
    typedef mpl::protect<result_> type;
williamr@2
   353
};
williamr@2
   354
williamr@2
   355
} // namespace aux
williamr@2
   356
williamr@2
   357
template<
williamr@2
   358
      template< typename P1, typename P2, typename P3, typename P4 > class F
williamr@2
   359
    , typename T1, typename T2, typename T3, typename T4
williamr@2
   360
    , typename Tag
williamr@2
   361
    >
williamr@2
   362
struct lambda<
williamr@2
   363
          F< T1,T2,T3,T4 >
williamr@2
   364
        , Tag
williamr@2
   365
       
williamr@2
   366
        >
williamr@2
   367
{
williamr@2
   368
    typedef lambda< T1,Tag > l1;
williamr@2
   369
    typedef lambda< T2,Tag > l2;
williamr@2
   370
    typedef lambda< T3,Tag > l3;
williamr@2
   371
    typedef lambda< T4,Tag > l4;
williamr@2
   372
    
williamr@2
   373
    typedef typename l1::is_le is_le1;
williamr@2
   374
    typedef typename l2::is_le is_le2;
williamr@2
   375
    typedef typename l3::is_le is_le3;
williamr@2
   376
    typedef typename l4::is_le is_le4;
williamr@2
   377
    
williamr@2
   378
williamr@2
   379
    typedef typename aux::lambda_or<
williamr@2
   380
          is_le1::value, is_le2::value, is_le3::value, is_le4::value
williamr@2
   381
        >::type is_le;
williamr@2
   382
williamr@2
   383
    typedef aux::le_result4<
williamr@2
   384
          is_le, Tag, F, l1, l2, l3, l4
williamr@2
   385
        > le_result_;
williamr@2
   386
williamr@2
   387
    typedef typename le_result_::result_ result_;
williamr@2
   388
    typedef typename le_result_::type type;
williamr@2
   389
};
williamr@2
   390
williamr@2
   391
template<
williamr@2
   392
      typename F, typename T1, typename T2, typename T3, typename T4
williamr@2
   393
    , typename Tag
williamr@2
   394
    >
williamr@2
   395
struct lambda<
williamr@2
   396
          bind4< F,T1,T2,T3,T4 >
williamr@2
   397
        , Tag
williamr@2
   398
       
williamr@2
   399
        >
williamr@2
   400
{
williamr@2
   401
    typedef false_ is_le;
williamr@2
   402
    typedef bind4<
williamr@2
   403
          F
williamr@2
   404
        , T1, T2, T3, T4
williamr@2
   405
        > result_;
williamr@2
   406
williamr@2
   407
    typedef result_ type;
williamr@2
   408
};
williamr@2
   409
williamr@2
   410
namespace aux {
williamr@2
   411
williamr@2
   412
template<
williamr@2
   413
      typename IsLE, typename Tag
williamr@2
   414
    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
williamr@2
   415
    , typename L1, typename L2, typename L3, typename L4, typename L5
williamr@2
   416
    >
williamr@2
   417
struct le_result5
williamr@2
   418
{
williamr@2
   419
    typedef F<
williamr@2
   420
          typename L1::type, typename L2::type, typename L3::type
williamr@2
   421
        , typename L4::type, typename L5::type
williamr@2
   422
        > result_;
williamr@2
   423
williamr@2
   424
    typedef result_ type;
williamr@2
   425
};
williamr@2
   426
williamr@2
   427
template<
williamr@2
   428
      typename Tag
williamr@2
   429
    , template< typename P1, typename P2, typename P3, typename P4, typename P5 > class F
williamr@2
   430
    , typename L1, typename L2, typename L3, typename L4, typename L5
williamr@2
   431
    >
williamr@2
   432
struct le_result5< true_,Tag,F,L1,L2,L3,L4,L5 >
williamr@2
   433
{
williamr@2
   434
    typedef bind5<
williamr@2
   435
          quote5< F,Tag >
williamr@2
   436
        , typename L1::result_, typename L2::result_, typename L3::result_
williamr@2
   437
        , typename L4::result_, typename L5::result_
williamr@2
   438
        > result_;
williamr@2
   439
williamr@2
   440
    typedef mpl::protect<result_> type;
williamr@2
   441
};
williamr@2
   442
williamr@2
   443
} // namespace aux
williamr@2
   444
williamr@2
   445
template<
williamr@2
   446
      template<
williamr@2
   447
          typename P1, typename P2, typename P3, typename P4
williamr@2
   448
        , typename P5
williamr@2
   449
        >
williamr@2
   450
      class F
williamr@2
   451
    , typename T1, typename T2, typename T3, typename T4, typename T5
williamr@2
   452
    , typename Tag
williamr@2
   453
    >
williamr@2
   454
struct lambda<
williamr@2
   455
          F< T1,T2,T3,T4,T5 >
williamr@2
   456
        , Tag
williamr@2
   457
       
williamr@2
   458
        >
williamr@2
   459
{
williamr@2
   460
    typedef lambda< T1,Tag > l1;
williamr@2
   461
    typedef lambda< T2,Tag > l2;
williamr@2
   462
    typedef lambda< T3,Tag > l3;
williamr@2
   463
    typedef lambda< T4,Tag > l4;
williamr@2
   464
    typedef lambda< T5,Tag > l5;
williamr@2
   465
    
williamr@2
   466
    typedef typename l1::is_le is_le1;
williamr@2
   467
    typedef typename l2::is_le is_le2;
williamr@2
   468
    typedef typename l3::is_le is_le3;
williamr@2
   469
    typedef typename l4::is_le is_le4;
williamr@2
   470
    typedef typename l5::is_le is_le5;
williamr@2
   471
    
williamr@2
   472
williamr@2
   473
    typedef typename aux::lambda_or<
williamr@2
   474
          is_le1::value, is_le2::value, is_le3::value, is_le4::value
williamr@2
   475
        , is_le5::value
williamr@2
   476
        >::type is_le;
williamr@2
   477
williamr@2
   478
    typedef aux::le_result5<
williamr@2
   479
          is_le, Tag, F, l1, l2, l3, l4, l5
williamr@2
   480
        > le_result_;
williamr@2
   481
williamr@2
   482
    typedef typename le_result_::result_ result_;
williamr@2
   483
    typedef typename le_result_::type type;
williamr@2
   484
};
williamr@2
   485
williamr@2
   486
template<
williamr@2
   487
      typename F, typename T1, typename T2, typename T3, typename T4
williamr@2
   488
    , typename T5
williamr@2
   489
    , typename Tag
williamr@2
   490
    >
williamr@2
   491
struct lambda<
williamr@2
   492
          bind5< F,T1,T2,T3,T4,T5 >
williamr@2
   493
        , Tag
williamr@2
   494
       
williamr@2
   495
        >
williamr@2
   496
{
williamr@2
   497
    typedef false_ is_le;
williamr@2
   498
    typedef bind5<
williamr@2
   499
          F
williamr@2
   500
        , T1, T2, T3, T4, T5
williamr@2
   501
        > result_;
williamr@2
   502
williamr@2
   503
    typedef result_ type;
williamr@2
   504
};
williamr@2
   505
williamr@2
   506
/// special case for 'protect'
williamr@2
   507
template< typename T, typename Tag >
williamr@2
   508
struct lambda< mpl::protect<T>, Tag >
williamr@2
   509
{
williamr@2
   510
    typedef false_ is_le;
williamr@2
   511
    typedef mpl::protect<T> result_;
williamr@2
   512
    typedef result_ type;
williamr@2
   513
};
williamr@2
   514
williamr@2
   515
/// specializations for the main 'bind' form
williamr@2
   516
williamr@2
   517
template<
williamr@2
   518
      typename F, typename T1, typename T2, typename T3, typename T4
williamr@2
   519
    , typename T5
williamr@2
   520
    , typename Tag
williamr@2
   521
    >
williamr@2
   522
struct lambda<
williamr@2
   523
          bind< F,T1,T2,T3,T4,T5 >
williamr@2
   524
        , Tag
williamr@2
   525
       
williamr@2
   526
        >
williamr@2
   527
{
williamr@2
   528
    typedef false_ is_le;
williamr@2
   529
    typedef bind< F,T1,T2,T3,T4,T5 > result_;
williamr@2
   530
    typedef result_ type;
williamr@2
   531
};
williamr@2
   532
williamr@2
   533
/// workaround for MWCW 8.3+/EDG < 303, leads to ambiguity on Digital Mars
williamr@2
   534
williamr@2
   535
template<
williamr@2
   536
      typename F, typename Tag1, typename Tag2
williamr@2
   537
    >
williamr@2
   538
struct lambda<
williamr@2
   539
          lambda< F,Tag1 >
williamr@2
   540
        , Tag2
williamr@2
   541
        >
williamr@2
   542
{
williamr@2
   543
    typedef lambda< F,Tag2 > l1;
williamr@2
   544
    typedef lambda< Tag1,Tag2 > l2;
williamr@2
   545
    typedef typename l1::is_le is_le;
williamr@2
   546
    typedef aux::le_result2<is_le, Tag2, mpl::lambda, l1, l2> le_result_;
williamr@2
   547
    typedef typename le_result_::result_ result_;
williamr@2
   548
    typedef typename le_result_::type type;
williamr@2
   549
};
williamr@2
   550
williamr@2
   551
BOOST_MPL_AUX_NA_SPEC(2, lambda)
williamr@2
   552
williamr@2
   553
}}
williamr@2
   554