1.. Algorithms/Transformation Algorithms//transform |30 2 3transform 4========= 5 6Synopsis 7-------- 8 9.. parsed-literal:: 10 11 template< 12 typename Sequence 13 , typename Op 14 , typename In = |unspecified| 15 > 16 struct transform 17 { 18 typedef |unspecified| type; 19 }; 20 21 template< 22 typename Seq1 23 , typename Seq2 24 , typename BinaryOp 25 , typename In = |unspecified| 26 > 27 struct transform 28 { 29 typedef |unspecified| type; 30 }; 31 32 33Description 34----------- 35 36``transform`` is an |overloaded name|: 37 38* ``transform<Sequence,Op>`` returns a transformed copy of the original sequence 39 produced by applying an unary transformation ``Op`` to every element 40 in the |begin/end<Sequence>| range. 41 42* ``transform<Seq1,Seq2,BinaryOp>`` returns a new sequence produced by applying a 43 binary transformation ``BinaryOp`` to a pair of elements (e\ :sub:`1`, e2\ :sub:`1`) 44 from the corresponding |begin/end<Seq1>| and |begin/end<Seq2>| ranges. 45 46|transformation algorithm disclaimer| 47 48 49Header 50------ 51 52.. parsed-literal:: 53 54 #include <boost/mpl/transform.hpp> 55 56 57Model of 58-------- 59 60|Reversible Algorithm| 61 62 63Parameters 64---------- 65 66+-------------------+-----------------------------------+-----------------------------------+ 67| Parameter | Requirement | Description | 68+===================+===================================+===================================+ 69| ``Sequence``, | |Forward Sequence| | Sequences to transform. | 70| ``Seq1``, ``Seq2``| | | 71+-------------------+-----------------------------------+-----------------------------------+ 72| ``Op``, | |Lambda Expression| | A transformation. | 73| ``BinaryOp`` | | | 74+-------------------+-----------------------------------+-----------------------------------+ 75| ``In`` | |Inserter| | An inserter. | 76+-------------------+-----------------------------------+-----------------------------------+ 77 78 79Expression semantics 80-------------------- 81 82|Semantics disclaimer...| |Reversible Algorithm|. 83 84For any |Forward Sequence|\ s ``s``, ``s1`` and ``s2``, |Lambda Expression|\ s ``op`` and ``op2``, 85and an |Inserter| ``in``: 86 87.. parsed-literal:: 88 89 typedef transform<s,op,in>::type r; 90 91:Return type: 92 A type. 93 94:Postcondition: 95 Equivalent to 96 97 .. parsed-literal:: 98 99 typedef lambda<op>::type f; 100 typedef lambda<in::operation>::type in_op; 101 102 typedef fold< 103 s 104 , in::state 105 , bind< in_op, _1, bind<f, _2> > 106 >::type r; 107 108 109.. parsed-literal:: 110 111 typedef transform<s1,s2,op,in>::type r; 112 113:Return type: 114 A type. 115 116:Postcondition: 117 Equivalent to 118 119 .. parsed-literal:: 120 121 typedef lambda<op2>::type f; 122 typedef lambda<in::operation>::type in_op; 123 124 typedef fold< 125 pair_view<s1,s2> 126 , in::state 127 , bind< 128 in_op 129 , _1 130 , bind<f, bind<first<>,_2>, bind<second<>,_2> > 131 > 132 >::type r; 133 134 135Complexity 136---------- 137 138Linear. Exactly ``size<s>::value`` / ``size<s1>::value`` applications of 139``op`` / ``op2`` and ``in::operation``. 140 141 142Example 143------- 144 145.. parsed-literal:: 146 147 typedef vector<char,short,int,long,float,double> types; 148 typedef vector<char*,short*,int*,long*,float*,double*> pointers; 149 typedef transform< types,boost::add_pointer<_1> >::type result; 150 151 BOOST_MPL_ASSERT(( equal<result,pointers> )); 152 153 154See also 155-------- 156 157|Transformation Algorithms|, |Reversible Algorithm|, |reverse_transform|, |copy|, |replace_if| 158 159 160.. copyright:: Copyright � 2001-2009 Aleksey Gurtovoy and David Abrahams 161 Distributed under the Boost Software License, Version 1.0. (See accompanying 162 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 163