epoc32/include/stdapis/boost/mpl/aux_/numeric_op.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:27:01 +0100
branchSymbian2
changeset 3 e1b950c65cb4
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
#if !defined(BOOST_PP_IS_ITERATING)
williamr@2
     3
williamr@2
     4
///// header body
williamr@2
     5
williamr@2
     6
// NO INCLUDE GUARDS, THE HEADER IS INTENDED FOR MULTIPLE INCLUSION!
williamr@2
     7
williamr@2
     8
// Copyright Aleksey Gurtovoy 2000-2004
williamr@2
     9
//
williamr@2
    10
// Distributed under the Boost Software License, Version 1.0. 
williamr@2
    11
// (See accompanying file LICENSE_1_0.txt or copy at 
williamr@2
    12
// http://www.boost.org/LICENSE_1_0.txt)
williamr@2
    13
//
williamr@2
    14
// See http://www.boost.org/libs/mpl for documentation.
williamr@2
    15
williamr@2
    16
// $Source: /cvsroot/boost/boost/boost/mpl/aux_/numeric_op.hpp,v $
williamr@2
    17
// $Date: 2005/08/25 16:27:21 $
williamr@2
    18
// $Revision: 1.10 $
williamr@2
    19
williamr@2
    20
#if !defined(BOOST_MPL_PREPROCESSING_MODE)
williamr@2
    21
#   include <boost/mpl/numeric_cast.hpp>
williamr@2
    22
#   include <boost/mpl/apply_wrap.hpp>
williamr@2
    23
#   include <boost/mpl/if.hpp>
williamr@2
    24
#   include <boost/mpl/tag.hpp>
williamr@2
    25
#   include <boost/mpl/aux_/numeric_cast_utils.hpp>
williamr@2
    26
#   include <boost/mpl/aux_/na.hpp>
williamr@2
    27
#   include <boost/mpl/aux_/na_spec.hpp>
williamr@2
    28
#   include <boost/mpl/aux_/lambda_support.hpp>
williamr@2
    29
#   include <boost/mpl/aux_/msvc_eti_base.hpp>
williamr@2
    30
#   include <boost/mpl/aux_/value_wknd.hpp>
williamr@2
    31
#   include <boost/mpl/aux_/config/eti.hpp>
williamr@2
    32
#   include <boost/mpl/aux_/nttp_decl.hpp>
williamr@2
    33
#endif
williamr@2
    34
williamr@2
    35
#include <boost/mpl/aux_/config/static_constant.hpp>
williamr@2
    36
williamr@2
    37
#if defined(BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS) \
williamr@2
    38
    || defined(BOOST_MPL_PREPROCESSING_MODE)
williamr@2
    39
williamr@2
    40
#   include <boost/mpl/limits/arity.hpp>
williamr@2
    41
#   include <boost/mpl/aux_/preprocessor/partial_spec_params.hpp>
williamr@2
    42
#   include <boost/mpl/aux_/preprocessor/def_params_tail.hpp>
williamr@2
    43
#   include <boost/mpl/aux_/preprocessor/repeat.hpp>
williamr@2
    44
#   include <boost/mpl/aux_/preprocessor/ext_params.hpp>
williamr@2
    45
#   include <boost/mpl/aux_/preprocessor/params.hpp>
williamr@2
    46
#   include <boost/mpl/aux_/preprocessor/enum.hpp>
williamr@2
    47
#   include <boost/mpl/aux_/preprocessor/add.hpp>
williamr@2
    48
#   include <boost/mpl/aux_/preprocessor/sub.hpp>
williamr@2
    49
#   include <boost/mpl/aux_/config/ctps.hpp>
williamr@2
    50
#   include <boost/mpl/aux_/config/eti.hpp>
williamr@2
    51
#   include <boost/mpl/aux_/config/msvc.hpp>
williamr@2
    52
#   include <boost/mpl/aux_/config/workaround.hpp>
williamr@2
    53
williamr@2
    54
#   include <boost/preprocessor/dec.hpp>
williamr@2
    55
#   include <boost/preprocessor/inc.hpp>
williamr@2
    56
#   include <boost/preprocessor/iterate.hpp>
williamr@2
    57
#   include <boost/preprocessor/cat.hpp>
williamr@2
    58
williamr@2
    59
williamr@2
    60
#if !defined(AUX778076_OP_ARITY)
williamr@2
    61
#   define AUX778076_OP_ARITY BOOST_MPL_LIMIT_METAFUNCTION_ARITY
williamr@2
    62
#endif
williamr@2
    63
williamr@2
    64
#if !defined(AUX778076_OP_IMPL_NAME)
williamr@2
    65
#   define AUX778076_OP_IMPL_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_impl)
williamr@2
    66
#endif
williamr@2
    67
williamr@2
    68
#if !defined(AUX778076_OP_TAG_NAME)
williamr@2
    69
#   define AUX778076_OP_TAG_NAME BOOST_PP_CAT(AUX778076_OP_PREFIX,_tag)
williamr@2
    70
#endif
williamr@2
    71
williamr@2
    72
namespace boost { namespace mpl {
williamr@2
    73
williamr@2
    74
template< 
williamr@2
    75
      typename Tag1
williamr@2
    76
    , typename Tag2
williamr@2
    77
#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
williamr@2
    78
    , BOOST_MPL_AUX_NTTP_DECL(int, tag1_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag1)::value 
williamr@2
    79
    , BOOST_MPL_AUX_NTTP_DECL(int, tag2_) = BOOST_MPL_AUX_MSVC_VALUE_WKND(Tag2)::value 
williamr@2
    80
    >
williamr@2
    81
struct AUX778076_OP_IMPL_NAME
williamr@2
    82
    : if_c<
williamr@2
    83
          ( tag1_ > tag2_ )
williamr@2
    84
#else
williamr@2
    85
    >
williamr@2
    86
struct AUX778076_OP_IMPL_NAME
williamr@2
    87
    : if_c<
williamr@2
    88
          ( BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag1)
williamr@2
    89
              > BOOST_MPL_AUX_NESTED_VALUE_WKND(int, Tag2)
williamr@2
    90
            )
williamr@2
    91
#endif
williamr@2
    92
        , aux::cast2nd_impl< AUX778076_OP_IMPL_NAME<Tag1,Tag1>,Tag1,Tag2 >
williamr@2
    93
        , aux::cast1st_impl< AUX778076_OP_IMPL_NAME<Tag2,Tag2>,Tag1,Tag2 >
williamr@2
    94
        >::type
williamr@2
    95
{
williamr@2
    96
};
williamr@2
    97
williamr@2
    98
/// for Digital Mars C++/compilers with no CTPS/TTP support
williamr@2
    99
template<> struct AUX778076_OP_IMPL_NAME<na,na>
williamr@2
   100
{
williamr@2
   101
    template< typename U1, typename U2 > struct apply 
williamr@2
   102
    {
williamr@2
   103
        typedef apply type;
williamr@2
   104
        BOOST_STATIC_CONSTANT(int, value = 0);
williamr@2
   105
    };
williamr@2
   106
};
williamr@2
   107
williamr@2
   108
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
williamr@2
   109
template< typename Tag > struct AUX778076_OP_IMPL_NAME<na,Tag>
williamr@2
   110
{
williamr@2
   111
    template< typename U1, typename U2 > struct apply 
williamr@2
   112
    {
williamr@2
   113
        typedef apply type;
williamr@2
   114
        BOOST_STATIC_CONSTANT(int, value = 0);
williamr@2
   115
    };
williamr@2
   116
};
williamr@2
   117
williamr@2
   118
template< typename Tag > struct AUX778076_OP_IMPL_NAME<Tag,na>
williamr@2
   119
{
williamr@2
   120
    template< typename U1, typename U2 > struct apply 
williamr@2
   121
    {
williamr@2
   122
        typedef apply type;
williamr@2
   123
        BOOST_STATIC_CONSTANT(int, value = 0);
williamr@2
   124
    };
williamr@2
   125
};
williamr@2
   126
#else
williamr@2
   127
template<> struct AUX778076_OP_IMPL_NAME<na,integral_c_tag>
williamr@2
   128
{
williamr@2
   129
    template< typename U1, typename U2 > struct apply 
williamr@2
   130
    {
williamr@2
   131
        typedef apply type;
williamr@2
   132
        BOOST_STATIC_CONSTANT(int, value = 0);
williamr@2
   133
    };
williamr@2
   134
};
williamr@2
   135
williamr@2
   136
template<> struct AUX778076_OP_IMPL_NAME<integral_c_tag,na>
williamr@2
   137
{
williamr@2
   138
    template< typename U1, typename U2 > struct apply 
williamr@2
   139
    {
williamr@2
   140
        typedef apply type;
williamr@2
   141
        BOOST_STATIC_CONSTANT(int, value = 0);
williamr@2
   142
    };
williamr@2
   143
};
williamr@2
   144
#endif
williamr@2
   145
williamr@2
   146
williamr@2
   147
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
williamr@2
   148
    && BOOST_WORKAROUND(BOOST_MSVC, >= 1300)
williamr@2
   149
template< typename T > struct AUX778076_OP_TAG_NAME
williamr@2
   150
    : tag<T,na>
williamr@2
   151
{
williamr@2
   152
};
williamr@2
   153
#else
williamr@2
   154
template< typename T > struct AUX778076_OP_TAG_NAME
williamr@2
   155
{
williamr@2
   156
    typedef typename T::tag type;
williamr@2
   157
};
williamr@2
   158
#endif
williamr@2
   159
williamr@2
   160
williamr@2
   161
#if AUX778076_OP_ARITY != 2
williamr@2
   162
williamr@2
   163
#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
williamr@2
   164
williamr@2
   165
#   define AUX778076_OP_RIGHT_OPERAND(unused, i, N) , BOOST_PP_CAT(N, BOOST_MPL_PP_ADD(i, 2))>
williamr@2
   166
#   define AUX778076_OP_N_CALLS(i, N) \
williamr@2
   167
    BOOST_MPL_PP_REPEAT( BOOST_PP_DEC(i), BOOST_MPL_PP_REPEAT_IDENTITY_FUNC, AUX778076_OP_NAME< ) \
williamr@2
   168
    N1 BOOST_MPL_PP_REPEAT( BOOST_MPL_PP_SUB(i, 1), AUX778076_OP_RIGHT_OPERAND, N ) \
williamr@2
   169
/**/
williamr@2
   170
williamr@2
   171
template<
williamr@2
   172
      typename BOOST_MPL_AUX_NA_PARAM(N1)
williamr@2
   173
    , typename BOOST_MPL_AUX_NA_PARAM(N2)
williamr@2
   174
    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)
williamr@2
   175
    >
williamr@2
   176
struct AUX778076_OP_NAME
williamr@2
   177
    : AUX778076_OP_N_CALLS(AUX778076_OP_ARITY, N)
williamr@2
   178
{
williamr@2
   179
    BOOST_MPL_AUX_LAMBDA_SUPPORT(
williamr@2
   180
          AUX778076_OP_ARITY
williamr@2
   181
        , AUX778076_OP_NAME
williamr@2
   182
        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
williamr@2
   183
        )
williamr@2
   184
};
williamr@2
   185
williamr@2
   186
#define BOOST_PP_ITERATION_PARAMS_1 \
williamr@2
   187
    (3,( BOOST_PP_DEC(AUX778076_OP_ARITY), 2, <boost/mpl/aux_/numeric_op.hpp> ))
williamr@2
   188
#include BOOST_PP_ITERATE()
williamr@2
   189
williamr@2
   190
#   undef AUX778076_OP_N_CALLS
williamr@2
   191
#   undef AUX778076_OP_RIGHT_OPERAND
williamr@2
   192
williamr@2
   193
#   else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
williamr@2
   194
williamr@2
   195
/// forward declaration
williamr@2
   196
template< 
williamr@2
   197
      typename BOOST_MPL_AUX_NA_PARAM(N1)
williamr@2
   198
    , typename BOOST_MPL_AUX_NA_PARAM(N2)
williamr@2
   199
    >
williamr@2
   200
struct BOOST_PP_CAT(AUX778076_OP_NAME,2);
williamr@2
   201
williamr@2
   202
template<
williamr@2
   203
      typename BOOST_MPL_AUX_NA_PARAM(N1)
williamr@2
   204
    , typename BOOST_MPL_AUX_NA_PARAM(N2)
williamr@2
   205
    BOOST_MPL_PP_DEF_PARAMS_TAIL(2, typename N, na)
williamr@2
   206
    >
williamr@2
   207
struct AUX778076_OP_NAME
williamr@2
   208
#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
williamr@2
   209
    : aux::msvc_eti_base< typename if_<
williamr@2
   210
#else
williamr@2
   211
    : if_<
williamr@2
   212
#endif
williamr@2
   213
          is_na<N3>
williamr@2
   214
        , BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>
williamr@2
   215
        , AUX778076_OP_NAME<
williamr@2
   216
              BOOST_PP_CAT(AUX778076_OP_NAME,2)<N1,N2>
williamr@2
   217
            , BOOST_MPL_PP_EXT_PARAMS(3, BOOST_PP_INC(AUX778076_OP_ARITY), N)
williamr@2
   218
            >
williamr@2
   219
        >::type
williamr@2
   220
#if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
williamr@2
   221
    >
williamr@2
   222
#endif
williamr@2
   223
{
williamr@2
   224
    BOOST_MPL_AUX_LAMBDA_SUPPORT(
williamr@2
   225
          AUX778076_OP_ARITY
williamr@2
   226
        , AUX778076_OP_NAME
williamr@2
   227
        , ( BOOST_MPL_PP_PARAMS(AUX778076_OP_ARITY, N) )
williamr@2
   228
        )
williamr@2
   229
};
williamr@2
   230
williamr@2
   231
template< 
williamr@2
   232
      typename N1
williamr@2
   233
    , typename N2
williamr@2
   234
    >
williamr@2
   235
struct BOOST_PP_CAT(AUX778076_OP_NAME,2)
williamr@2
   236
williamr@2
   237
#endif
williamr@2
   238
williamr@2
   239
#else // AUX778076_OP_ARITY == 2
williamr@2
   240
williamr@2
   241
template< 
williamr@2
   242
      typename BOOST_MPL_AUX_NA_PARAM(N1)
williamr@2
   243
    , typename BOOST_MPL_AUX_NA_PARAM(N2)
williamr@2
   244
    >
williamr@2
   245
struct AUX778076_OP_NAME
williamr@2
   246
williamr@2
   247
#endif
williamr@2
   248
williamr@2
   249
#if !defined(BOOST_MPL_CFG_MSVC_ETI_BUG)
williamr@2
   250
    : AUX778076_OP_IMPL_NAME<
williamr@2
   251
          typename AUX778076_OP_TAG_NAME<N1>::type
williamr@2
   252
        , typename AUX778076_OP_TAG_NAME<N2>::type
williamr@2
   253
        >::template apply<N1,N2>::type
williamr@2
   254
#else
williamr@2
   255
    : aux::msvc_eti_base< typename apply_wrap2<
williamr@2
   256
          AUX778076_OP_IMPL_NAME<
williamr@2
   257
              typename AUX778076_OP_TAG_NAME<N1>::type
williamr@2
   258
            , typename AUX778076_OP_TAG_NAME<N2>::type
williamr@2
   259
            >
williamr@2
   260
        , N1
williamr@2
   261
        , N2
williamr@2
   262
        >::type >::type
williamr@2
   263
#endif
williamr@2
   264
{
williamr@2
   265
#if AUX778076_OP_ARITY != 2
williamr@2
   266
williamr@2
   267
#   if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
williamr@2
   268
    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
williamr@2
   269
          AUX778076_OP_ARITY
williamr@2
   270
        , AUX778076_OP_NAME
williamr@2
   271
        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(2, N, na) )
williamr@2
   272
        )
williamr@2
   273
#   else
williamr@2
   274
    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, BOOST_PP_CAT(AUX778076_OP_NAME,2), (N1, N2))
williamr@2
   275
#   endif
williamr@2
   276
williamr@2
   277
#else
williamr@2
   278
    BOOST_MPL_AUX_LAMBDA_SUPPORT(2, AUX778076_OP_NAME, (N1, N2))
williamr@2
   279
#endif
williamr@2
   280
};
williamr@2
   281
williamr@2
   282
BOOST_MPL_AUX_NA_SPEC2(2, AUX778076_OP_ARITY, AUX778076_OP_NAME)
williamr@2
   283
williamr@2
   284
}}
williamr@2
   285
williamr@2
   286
#endif // BOOST_MPL_CFG_NO_PREPROCESSED_HEADERS
williamr@2
   287
williamr@2
   288
///// iteration, depth == 1
williamr@2
   289
williamr@2
   290
#elif BOOST_PP_ITERATION_DEPTH() == 1
williamr@2
   291
williamr@2
   292
#   define i_ BOOST_PP_FRAME_ITERATION(1)
williamr@2
   293
williamr@2
   294
template<
williamr@2
   295
      BOOST_MPL_PP_PARAMS(i_, typename N)
williamr@2
   296
    >
williamr@2
   297
struct AUX778076_OP_NAME<BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na)>
williamr@2
   298
#if i_ != 2
williamr@2
   299
    : AUX778076_OP_N_CALLS(i_, N)
williamr@2
   300
{
williamr@2
   301
    BOOST_MPL_AUX_LAMBDA_SUPPORT_SPEC(
williamr@2
   302
          AUX778076_OP_ARITY
williamr@2
   303
        , AUX778076_OP_NAME
williamr@2
   304
        , ( BOOST_MPL_PP_PARTIAL_SPEC_PARAMS(i_, N, na) )
williamr@2
   305
        )
williamr@2
   306
};
williamr@2
   307
#endif
williamr@2
   308
williamr@2
   309
#   undef i_
williamr@2
   310
williamr@2
   311
#endif // BOOST_PP_IS_ITERATING