epoc32/include/stdapis/boost/mpl/transform.hpp
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 3 e1b950c65cb4
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 
     2 #ifndef BOOST_MPL_TRANSFORM_HPP_INCLUDED
     3 #define BOOST_MPL_TRANSFORM_HPP_INCLUDED
     4 
     5 // Copyright Aleksey Gurtovoy 2000-2004
     6 // Copyright David Abrahams 2003-2004
     7 //
     8 // Distributed under the Boost Software License, Version 1.0. 
     9 // (See accompanying file LICENSE_1_0.txt or copy at 
    10 // http://www.boost.org/LICENSE_1_0.txt)
    11 //
    12 // See http://www.boost.org/libs/mpl for documentation.
    13 
    14 // $Source: /cvsroot/boost/boost/boost/mpl/transform.hpp,v $
    15 // $Date: 2004/12/20 17:18:17 $
    16 // $Revision: 1.10 $
    17 
    18 #include <boost/mpl/fold.hpp>
    19 #include <boost/mpl/reverse_fold.hpp>
    20 #include <boost/mpl/pair_view.hpp>
    21 #include <boost/mpl/is_sequence.hpp>
    22 #include <boost/mpl/eval_if.hpp>
    23 #include <boost/mpl/lambda.hpp>
    24 #include <boost/mpl/bind.hpp>
    25 #include <boost/mpl/or.hpp>
    26 #include <boost/mpl/not.hpp>
    27 #include <boost/mpl/aux_/na.hpp>
    28 #include <boost/mpl/aux_/inserter_algorithm.hpp>
    29 
    30 namespace boost { namespace mpl {
    31 
    32 namespace aux { 
    33 
    34 template< 
    35       typename Seq
    36     , typename Op
    37     , typename In
    38     >
    39 struct transform1_impl
    40     : fold< 
    41           Seq
    42         , typename In::state
    43         , bind2< typename lambda< typename In::operation >::type
    44             , _1
    45             , bind1< typename lambda<Op>::type, _2>
    46             > 
    47         >
    48 {
    49 };
    50 
    51 template< 
    52       typename Seq
    53     , typename Op
    54     , typename In
    55     >
    56 struct reverse_transform1_impl
    57     : reverse_fold< 
    58           Seq
    59         , typename In::state
    60         , bind2< typename lambda< typename In::operation >::type
    61             , _1
    62             , bind1< typename lambda<Op>::type, _2>
    63             > 
    64         >
    65 {
    66 };
    67 
    68 template< 
    69       typename Seq1
    70     , typename Seq2
    71     , typename Op
    72     , typename In
    73     >
    74 struct transform2_impl
    75     : fold< 
    76           pair_view<Seq1,Seq2>
    77         , typename In::state
    78         , bind2< typename lambda< typename In::operation >::type
    79             , _1
    80             , bind2<
    81                   typename lambda<Op>::type
    82                 , bind1<first<>,_2>
    83                 , bind1<second<>,_2>
    84                 >
    85             > 
    86         >
    87 {
    88 };
    89 
    90 template< 
    91       typename Seq1
    92     , typename Seq2
    93     , typename Op
    94     , typename In
    95     >
    96 struct reverse_transform2_impl
    97     : reverse_fold< 
    98           pair_view<Seq1,Seq2>
    99         , typename In::state
   100         , bind2< typename lambda< typename In::operation >::type
   101             , _1
   102             , bind2< typename lambda< Op >::type
   103                 , bind1<first<>,_2>
   104                 , bind1<second<>,_2>
   105                 >
   106             > 
   107         >
   108 {
   109 };
   110 
   111 } // namespace aux 
   112 
   113 BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(3, transform1)                    
   114 BOOST_MPL_AUX_INSERTER_ALGORITHM_DEF(4, transform2)
   115     
   116 #define AUX778076_TRANSFORM_DEF(name)                                   \
   117 template<                                                               \
   118       typename BOOST_MPL_AUX_NA_PARAM(Seq1)                             \
   119     , typename BOOST_MPL_AUX_NA_PARAM(Seq2OrOperation)                  \
   120     , typename BOOST_MPL_AUX_NA_PARAM(OperationOrInserter)              \
   121     , typename BOOST_MPL_AUX_NA_PARAM(Inserter)                         \
   122     >                                                                   \
   123 struct name                                                             \
   124 {                                                                       \
   125     typedef typename eval_if<                                           \
   126           or_<                                                          \
   127               is_na<OperationOrInserter>                                \
   128             , is_lambda_expression< Seq2OrOperation >                   \
   129             , not_< is_sequence<Seq2OrOperation> >                      \
   130             >                                                           \
   131         , name##1<Seq1,Seq2OrOperation,OperationOrInserter>             \
   132         , name##2<Seq1,Seq2OrOperation,OperationOrInserter,Inserter>    \
   133         >::type type;                                                   \
   134 };                                                                      \
   135 BOOST_MPL_AUX_NA_SPEC(4, name)                                          \
   136 /**/
   137 
   138 AUX778076_TRANSFORM_DEF(transform)
   139 AUX778076_TRANSFORM_DEF(reverse_transform)
   140 
   141 #undef AUX778076_TRANSFORM_DEF
   142 
   143 }}
   144 
   145 #endif // BOOST_MPL_TRANSFORM_HPP_INCLUDED