1.. Algorithms/Transformation Algorithms//reverse_unique |180 2 3reverse_unique 4============== 5 6Synopsis 7-------- 8 9.. parsed-literal:: 10 11 template< 12 typename Seq 13 , typename Pred 14 , typename In = |unspecified| 15 > 16 struct reverse_unique 17 { 18 typedef |unspecified| type; 19 }; 20 21 22Description 23----------- 24 25Returns a sequence of the initial elements of every subrange of the 26reversed original sequence ``Seq`` whose elements are all the same. 27 28|transformation algorithm disclaimer| 29 30Header 31------ 32 33.. parsed-literal:: 34 35 #include <boost/mpl/unique.hpp> 36 37 38Model of 39-------- 40 41|Reversible Algorithm| 42 43 44Parameters 45---------- 46 47+---------------+-----------------------------------+-------------------------------+ 48| Parameter | Requirement | Description | 49+===============+===================================+===============================+ 50| ``Sequence`` | |Forward Sequence| | An original sequence. | 51+---------------+-----------------------------------+-------------------------------+ 52| ``Pred`` | Binary |Lambda Expression| | An equivalence relation. | 53+---------------+-----------------------------------+-------------------------------+ 54| ``In`` | |Inserter| | An inserter. | 55+---------------+-----------------------------------+-------------------------------+ 56 57 58Expression semantics 59-------------------- 60 61|Semantics disclaimer...| |Reversible Algorithm|. 62 63For any |Forward Sequence| ``s``, a binary |Lambda Expression| ``pred``, 64and an |Inserter| ``in``: 65 66 67.. parsed-literal:: 68 69 typedef reverse_unique<s,pred,in>::type r; 70 71:Return type: 72 A type. 73 74:Semantics: 75 If ``size<s>::value <= 1``, then equivalent to 76 77 .. parsed-literal:: 78 79 typedef reverse_copy<s,in>::type r; 80 81 otherwise equivalent to 82 83 .. parsed-literal:: 84 85 typedef lambda<pred>::type p; 86 typedef lambda<in::operation>::type in_op; 87 typedef apply_wrap\ ``2``\< 88 in_op 89 , in::state 90 , front<types>::type 91 >::type in_state; 92 93 typedef reverse_fold< 94 s 95 , pair< in_state, front<s>::type > 96 , eval_if< 97 apply_wrap\ ``2``\<p, second<_1>, _2> 98 , identity< first<_1> > 99 , apply_wrap\ ``2``\<in_op, first<_1>, _2> 100 > 101 >::type::first r; 102 103 104Complexity 105---------- 106 107Linear. Performs exactly ``size<s>::value - 1`` applications of ``pred``, and at 108most ``size<s>::value`` insertions. 109 110 111Example 112------- 113 114.. parsed-literal:: 115 116 typedef vector<int,float,float,char,int,int,int,double> types; 117 typedef vector<double,int,char,float,int> expected; 118 typedef reverse_unique< types, is_same<_1,_2> >::type result; 119 120 BOOST_MPL_ASSERT(( equal< result,expected > )); 121 122 123See also 124-------- 125 126|Transformation Algorithms|, |Reversible Algorithm|, |unique|, |reverse_remove|, 127|reverse_copy_if|, |replace_if| 128 129 130.. copyright:: Copyright � 2001-2009 Aleksey Gurtovoy and David Abrahams 131 Distributed under the Boost Software License, Version 1.0. (See accompanying 132 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 133