epoc32/include/stdapis/boost/mpl/aux_/inserter_algorithm.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
#ifndef BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
williamr@2
     3
#define BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED
williamr@2
     4
williamr@2
     5
// Copyright Aleksey Gurtovoy 2003-2004
williamr@2
     6
// Copyright David Abrahams 2003-2004
williamr@2
     7
//
williamr@2
     8
// Distributed under the Boost Software License, Version 1.0. 
williamr@2
     9
// (See accompanying file LICENSE_1_0.txt or copy at 
williamr@2
    10
// http://www.boost.org/LICENSE_1_0.txt)
williamr@2
    11
//
williamr@2
    12
// See http://www.boost.org/libs/mpl for documentation.
williamr@2
    13
williamr@2
    14
// $Source: /cvsroot/boost/boost/boost/mpl/aux_/inserter_algorithm.hpp,v $
williamr@2
    15
// $Date: 2004/09/02 15:40:43 $
williamr@2
    16
// $Revision: 1.2 $
williamr@2
    17
williamr@2
    18
#include <boost/mpl/back_inserter.hpp>
williamr@2
    19
#include <boost/mpl/front_inserter.hpp>
williamr@2
    20
#include <boost/mpl/push_back.hpp>
williamr@2
    21
#include <boost/mpl/push_front.hpp>
williamr@2
    22
#include <boost/mpl/back_inserter.hpp>
williamr@2
    23
#include <boost/mpl/front_inserter.hpp>
williamr@2
    24
#include <boost/mpl/clear.hpp>
williamr@2
    25
#include <boost/mpl/eval_if.hpp>
williamr@2
    26
#include <boost/mpl/if.hpp>
williamr@2
    27
#include <boost/mpl/aux_/na.hpp>
williamr@2
    28
#include <boost/mpl/aux_/common_name_wknd.hpp>
williamr@2
    29
#include <boost/mpl/aux_/na_spec.hpp>
williamr@2
    30
#include <boost/mpl/aux_/preprocessor/params.hpp>
williamr@2
    31
#include <boost/mpl/aux_/preprocessor/default_params.hpp>
williamr@2
    32
#include <boost/mpl/aux_/config/ctps.hpp>
williamr@2
    33
williamr@2
    34
#include <boost/preprocessor/arithmetic/dec.hpp>
williamr@2
    35
williamr@2
    36
#if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
williamr@2
    37
williamr@2
    38
#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \
williamr@2
    39
BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
williamr@2
    40
template< \
williamr@2
    41
      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
williamr@2
    42
    > \
williamr@2
    43
struct name \
williamr@2
    44
    : aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
williamr@2
    45
{ \
williamr@2
    46
}; \
williamr@2
    47
\
williamr@2
    48
template< \
williamr@2
    49
      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
williamr@2
    50
    > \
williamr@2
    51
struct name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \
williamr@2
    52
    : if_< has_push_back<P1> \
williamr@2
    53
        , aux::name##_impl< \
williamr@2
    54
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
    55
            , back_inserter< typename clear<P1>::type > \
williamr@2
    56
            > \
williamr@2
    57
        , aux::reverse_##name##_impl< \
williamr@2
    58
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
    59
            , front_inserter< typename clear<P1>::type > \
williamr@2
    60
            > \
williamr@2
    61
        >::type \
williamr@2
    62
{ \
williamr@2
    63
}; \
williamr@2
    64
\
williamr@2
    65
template< \
williamr@2
    66
      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
williamr@2
    67
    > \
williamr@2
    68
struct reverse_##name \
williamr@2
    69
    : aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
williamr@2
    70
{ \
williamr@2
    71
}; \
williamr@2
    72
\
williamr@2
    73
template< \
williamr@2
    74
      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
williamr@2
    75
    > \
williamr@2
    76
struct reverse_##name< BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P),na > \
williamr@2
    77
    : if_< has_push_back<P1> \
williamr@2
    78
        , aux::reverse_##name##_impl< \
williamr@2
    79
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
    80
            , back_inserter< typename clear<P1>::type > \
williamr@2
    81
            > \
williamr@2
    82
        , aux::name##_impl< \
williamr@2
    83
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
    84
            , front_inserter< typename clear<P1>::type > \
williamr@2
    85
            > \
williamr@2
    86
        >::type \
williamr@2
    87
{ \
williamr@2
    88
}; \
williamr@2
    89
BOOST_MPL_AUX_NA_SPEC(arity, name) \
williamr@2
    90
BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \
williamr@2
    91
/**/
williamr@2
    92
williamr@2
    93
#else
williamr@2
    94
williamr@2
    95
#   define BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(arity, name) \
williamr@2
    96
BOOST_MPL_AUX_COMMON_NAME_WKND(name) \
williamr@2
    97
template< \
williamr@2
    98
      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
williamr@2
    99
    > \
williamr@2
   100
struct def_##name##_impl \
williamr@2
   101
    : if_< has_push_back<P1> \
williamr@2
   102
        , aux::name##_impl< \
williamr@2
   103
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
   104
            , back_inserter< typename clear<P1>::type > \
williamr@2
   105
            > \
williamr@2
   106
        , aux::reverse_##name##_impl< \
williamr@2
   107
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
   108
            , front_inserter< typename clear<P1>::type > \
williamr@2
   109
            > \
williamr@2
   110
        >::type \
williamr@2
   111
{ \
williamr@2
   112
}; \
williamr@2
   113
\
williamr@2
   114
template< \
williamr@2
   115
      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
williamr@2
   116
    > \
williamr@2
   117
struct name \
williamr@2
   118
{ \
williamr@2
   119
    typedef typename eval_if< \
williamr@2
   120
          is_na<BOOST_PP_CAT(P, arity)> \
williamr@2
   121
        , def_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \
williamr@2
   122
        , aux::name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
williamr@2
   123
        >::type type; \
williamr@2
   124
}; \
williamr@2
   125
\
williamr@2
   126
template< \
williamr@2
   127
      BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), typename P) \
williamr@2
   128
    > \
williamr@2
   129
struct def_reverse_##name##_impl \
williamr@2
   130
    : if_< has_push_back<P1> \
williamr@2
   131
        , aux::reverse_##name##_impl< \
williamr@2
   132
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
   133
            , back_inserter< typename clear<P1>::type > \
williamr@2
   134
            > \
williamr@2
   135
        , aux::name##_impl< \
williamr@2
   136
              BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P) \
williamr@2
   137
            , front_inserter< typename clear<P1>::type > \
williamr@2
   138
            > \
williamr@2
   139
        >::type \
williamr@2
   140
{ \
williamr@2
   141
}; \
williamr@2
   142
template< \
williamr@2
   143
      BOOST_MPL_PP_DEFAULT_PARAMS(arity, typename P, na) \
williamr@2
   144
    > \
williamr@2
   145
struct reverse_##name \
williamr@2
   146
{ \
williamr@2
   147
    typedef typename eval_if< \
williamr@2
   148
          is_na<BOOST_PP_CAT(P, arity)> \
williamr@2
   149
        , def_reverse_##name##_impl<BOOST_MPL_PP_PARAMS(BOOST_PP_DEC(arity), P)> \
williamr@2
   150
        , aux::reverse_##name##_impl<BOOST_MPL_PP_PARAMS(arity, P)> \
williamr@2
   151
        >::type type; \
williamr@2
   152
}; \
williamr@2
   153
BOOST_MPL_AUX_NA_SPEC(arity, name) \
williamr@2
   154
BOOST_MPL_AUX_NA_SPEC(arity, reverse_##name) \
williamr@2
   155
/**/
williamr@2
   156
williamr@2
   157
#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
williamr@2
   158
williamr@2
   159
#endif // BOOST_MPL_AUX_INSERTER_ALGORITHM_HPP_INCLUDED