@@ -1005,7 +1005,7 @@ pub pure fn foldl<T, U>(z: T, v: &[U], p: &fn(t: T, u: &U) -> T) -> T {
1005
1005
*/
1006
1006
pub pure fn foldr < T , U : Copy > ( v : & [ T ] , z : U , p : & fn ( t : & T , u : U ) -> U ) -> U {
1007
1007
let mut accum = z;
1008
- for rev_each ( v ) |elt| {
1008
+ for v . each_reverse |elt| {
1009
1009
accum = p ( elt, accum) ;
1010
1010
}
1011
1011
accum
@@ -1411,8 +1411,8 @@ pub pure fn eachi<T>(v: &'r [T], f: &fn(uint, v: &'r T) -> bool) {
1411
1411
* Return true to continue, false to break.
1412
1412
*/
1413
1413
#[ inline( always) ]
1414
- pub pure fn rev_each < T > ( v : & ' r [ T ] , blk : & fn ( v : & ' r T ) -> bool ) {
1415
- rev_eachi ( v, |_i, v| blk ( v) )
1414
+ pub pure fn each_reverse < T > ( v : & ' r [ T ] , blk : & fn ( v : & ' r T ) -> bool ) {
1415
+ eachi_reverse ( v, |_i, v| blk ( v) )
1416
1416
}
1417
1417
1418
1418
/**
@@ -1421,7 +1421,7 @@ pub pure fn rev_each<T>(v: &'r [T], blk: &fn(v: &'r T) -> bool) {
1421
1421
* Return true to continue, false to break.
1422
1422
*/
1423
1423
#[ inline( always) ]
1424
- pub pure fn rev_eachi < T > ( v : & ' r [ T ] , blk : & fn ( i : uint , v : & ' r T ) -> bool ) {
1424
+ pub pure fn eachi_reverse < T > ( v : & ' r [ T ] , blk : & fn ( i : uint , v : & ' r T ) -> bool ) {
1425
1425
let mut i = v. len ( ) ;
1426
1426
while i > 0 {
1427
1427
i -= 1 ;
@@ -1736,6 +1736,8 @@ pub trait ImmutableVector<T> {
1736
1736
pure fn initn ( & self , n : uint ) -> & ' self [ T ] ;
1737
1737
pure fn last ( & self ) -> & ' self T ;
1738
1738
pure fn last_opt ( & self ) -> Option < & ' self T > ;
1739
+ pure fn each_reverse ( & self , blk : & fn ( & T ) -> bool ) ;
1740
+ pure fn eachi_reverse ( & self , blk : & fn ( uint , & T ) -> bool ) ;
1739
1741
pure fn foldr < U : Copy > ( & self , z : U , p : & fn ( t : & T , u : U ) -> U ) -> U ;
1740
1742
pure fn map < U > ( & self , f : & fn ( t : & T ) -> U ) -> ~[ U ] ;
1741
1743
pure fn mapi < U > ( & self , f : & fn ( uint , t : & T ) -> U ) -> ~[ U ] ;
@@ -1785,6 +1787,18 @@ impl<T> ImmutableVector<T> for &'self [T] {
1785
1787
#[ inline]
1786
1788
pure fn last_opt ( & self ) -> Option < & ' self T > { last_opt ( * self ) }
1787
1789
1790
+ /// Iterates over a vector's elements in reverse.
1791
+ #[ inline]
1792
+ pure fn each_reverse ( & self , blk : & fn ( & T ) -> bool ) {
1793
+ each_reverse ( * self , blk)
1794
+ }
1795
+
1796
+ /// Iterates over a vector's elements and indices in reverse.
1797
+ #[ inline]
1798
+ pure fn eachi_reverse ( & self , blk : & fn ( uint , & T ) -> bool ) {
1799
+ eachi_reverse ( * self , blk)
1800
+ }
1801
+
1788
1802
/// Reduce a vector from right to left
1789
1803
#[ inline]
1790
1804
pure fn foldr < U : Copy > ( & self , z : U , p : & fn ( t : & T , u : U ) -> U ) -> U {
@@ -3131,33 +3145,42 @@ mod tests {
3131
3145
}
3132
3146
3133
3147
#[ test]
3134
- fn test_reach_empty ( ) {
3135
- for rev_each :: < int > ( ~[ ] ) |_v| {
3148
+ fn test_each_reverse_empty ( ) {
3149
+ let v: ~[ int ] = ~[ ] ;
3150
+ for v. each_reverse |_v| {
3136
3151
fail ! ( ) ; // should never execute
3137
3152
}
3138
3153
}
3139
3154
3140
3155
#[ test]
3141
- fn test_reach_nonempty ( ) {
3156
+ fn test_each_reverse_nonempty ( ) {
3142
3157
let mut i = 0 ;
3143
- for rev_each ( ~[ 1 , 2 , 3 ] ) |v| {
3158
+ for each_reverse ( ~[ 1 , 2 , 3 ] ) |v| {
3144
3159
if i == 0 { fail_unless ! ( * v == 3 ) ; }
3145
3160
i += * v
3146
3161
}
3147
3162
fail_unless ! ( i == 6 ) ;
3148
3163
}
3149
3164
3150
3165
#[ test]
3151
- fn test_reachi ( ) {
3166
+ fn test_eachi_reverse ( ) {
3152
3167
let mut i = 0 ;
3153
- for rev_eachi ( ~[ 0 , 1 , 2 ] ) |j, v| {
3168
+ for eachi_reverse ( ~[ 0 , 1 , 2 ] ) |j, v| {
3154
3169
if i == 0 { fail_unless ! ( * v == 2 ) ; }
3155
3170
fail_unless ! ( j == * v as uint) ;
3156
3171
i += * v;
3157
3172
}
3158
3173
fail_unless ! ( i == 3 ) ;
3159
3174
}
3160
3175
3176
+ #[ test]
3177
+ fn test_eachi_reverse_empty ( ) {
3178
+ let v: ~[ int ] = ~[ ] ;
3179
+ for v. eachi_reverse |_i, _v| {
3180
+ fail ! ( ) ; // should never execute
3181
+ }
3182
+ }
3183
+
3161
3184
#[ test]
3162
3185
fn test_each_permutation ( ) {
3163
3186
let mut results: ~[ ~[ int ] ] ;
0 commit comments