@@ -193,11 +193,11 @@ pub fn split<T:Copy>(v: &[T], f: &fn(t: &T) -> bool) -> ~[~[T]] {
193
193
let mut start = 0 u;
194
194
let mut result = ~[ ] ;
195
195
while start < ln {
196
- match position_between ( v , start, ln, |t| f ( t) ) {
196
+ match v . slice ( start, ln) . iter ( ) . position_ ( |t| f ( t) ) {
197
197
None => break ,
198
198
Some ( i) => {
199
- result. push ( v. slice ( start, i) . to_owned ( ) ) ;
200
- start = i + 1 u;
199
+ result. push ( v. slice ( start, start + i) . to_owned ( ) ) ;
200
+ start + = i + 1 u;
201
201
}
202
202
}
203
203
}
@@ -217,7 +217,7 @@ pub fn splitn<T:Copy>(v: &[T], n: uint, f: &fn(t: &T) -> bool) -> ~[~[T]] {
217
217
let mut count = n;
218
218
let mut result = ~[ ] ;
219
219
while start < ln && count > 0 u {
220
- match position_between ( v , start, ln, |t| f ( t) ) {
220
+ match v . slice ( start, ln) . iter ( ) . position_ ( |t| f ( t) ) {
221
221
None => break ,
222
222
Some ( i) => {
223
223
result. push ( v. slice ( start, i) . to_owned ( ) ) ;
@@ -242,7 +242,7 @@ pub fn rsplit<T:Copy>(v: &[T], f: &fn(t: &T) -> bool) -> ~[~[T]] {
242
242
let mut end = ln;
243
243
let mut result = ~[ ] ;
244
244
while end > 0 {
245
- match rposition_between ( v , 0 , end, |t| f ( t) ) {
245
+ match v . slice ( 0 , end) . rposition ( |t| f ( t) ) {
246
246
None => break ,
247
247
Some ( i) => {
248
248
result. push ( v. slice ( i + 1 , end) . to_owned ( ) ) ;
@@ -267,7 +267,7 @@ pub fn rsplitn<T:Copy>(v: &[T], n: uint, f: &fn(t: &T) -> bool) -> ~[~[T]] {
267
267
let mut count = n;
268
268
let mut result = ~[ ] ;
269
269
while end > 0 u && count > 0 u {
270
- match rposition_between ( v , 0 u , end, |t| f ( t) ) {
270
+ match v . slice ( 0 , end) . rposition ( |t| f ( t) ) {
271
271
None => break ,
272
272
Some ( i) => {
273
273
result. push ( v. slice ( i + 1 u, end) . to_owned ( ) ) ;
@@ -657,25 +657,6 @@ pub fn position_elem<T:Eq>(v: &[T], x: &T) -> Option<uint> {
657
657
v. iter ( ) . position_ ( |y| * x == * y)
658
658
}
659
659
660
- /**
661
- * Find the first index matching some predicate within a range
662
- *
663
- * Apply function `f` to each element of `v` between the range
664
- * [`start`, `end`). When function `f` returns true then an option containing
665
- * the index is returned. If `f` matches no elements then none is returned.
666
- */
667
- pub fn position_between < T > ( v : & [ T ] ,
668
- start : uint ,
669
- end : uint ,
670
- f : & fn ( t : & T ) -> bool )
671
- -> Option < uint > {
672
- assert ! ( start <= end) ;
673
- assert ! ( end <= v. len( ) ) ;
674
- let mut i = start;
675
- while i < end { if f ( & v[ i] ) { return Some :: < uint > ( i) ; } i += 1 u; }
676
- None
677
- }
678
-
679
660
/// Find the last index containing a matching value
680
661
pub fn rposition_elem < T : Eq > ( v : & [ T ] , x : & T ) -> Option < uint > {
681
662
rposition ( v, |y| * x == * y)
@@ -689,31 +670,12 @@ pub fn rposition_elem<T:Eq>(v: &[T], x: &T) -> Option<uint> {
689
670
* matches no elements then none is returned.
690
671
*/
691
672
pub fn rposition< T > ( v : & [ T ] , f : & fn ( t : & T ) -> bool ) -> Option < uint > {
692
- rposition_between ( v, 0 u, v. len ( ) , f)
693
- }
694
-
695
- /**
696
- * Find the last index matching some predicate within a range
697
- *
698
- * Apply function `f` to each element of `v` in reverse order between the
699
- * range [`start`, `end`). When function `f` returns true then an option
700
- * containing the index is returned. If `f` matches no elements then none is
701
- * returned.
702
- */
703
- pub fn rposition_between < T > ( v : & [ T ] , start : uint , end : uint ,
704
- f : & fn ( t : & T ) -> bool ) -> Option < uint > {
705
- assert ! ( start <= end) ;
706
- assert ! ( end <= v. len( ) ) ;
707
- let mut i = end;
708
- while i > start {
709
- if f ( & v[ i - 1 u] ) { return Some :: < uint > ( i - 1 u) ; }
710
- i -= 1 u;
673
+ for v. rev_iter( ) . enumerate( ) . advance |( i, t) | {
674
+ if f( t) { return Some ( v. len( ) - i - 1 ) ; }
711
675
}
712
676
None
713
677
}
714
678
715
-
716
-
717
679
/**
718
680
* Binary search a sorted vector with a comparator function.
719
681
*
@@ -2885,34 +2847,6 @@ mod tests {
2885
2847
assert ! ( position_elem( v1, & 4 ) . is_none( ) ) ;
2886
2848
}
2887
2849
2888
- #[ test]
2889
- fn test_position_between ( ) {
2890
- assert ! ( position_between( [ ] , 0 u, 0 u, f) . is_none( ) ) ;
2891
-
2892
- fn f ( xy : & ( int , char ) ) -> bool { let ( _x, y) = * xy; y == 'b' }
2893
- let v = ~[ ( 0 , 'a' ) , ( 1 , 'b' ) , ( 2 , 'c' ) , ( 3 , 'b' ) ] ;
2894
-
2895
- assert ! ( position_between( v, 0 u, 0 u, f) . is_none( ) ) ;
2896
- assert ! ( position_between( v, 0 u, 1 u, f) . is_none( ) ) ;
2897
- assert_eq ! ( position_between( v, 0 u, 2 u, f) , Some ( 1 u) ) ;
2898
- assert_eq ! ( position_between( v, 0 u, 3 u, f) , Some ( 1 u) ) ;
2899
- assert_eq ! ( position_between( v, 0 u, 4 u, f) , Some ( 1 u) ) ;
2900
-
2901
- assert ! ( position_between( v, 1 u, 1 u, f) . is_none( ) ) ;
2902
- assert_eq ! ( position_between( v, 1 u, 2 u, f) , Some ( 1 u) ) ;
2903
- assert_eq ! ( position_between( v, 1 u, 3 u, f) , Some ( 1 u) ) ;
2904
- assert_eq ! ( position_between( v, 1 u, 4 u, f) , Some ( 1 u) ) ;
2905
-
2906
- assert ! ( position_between( v, 2 u, 2 u, f) . is_none( ) ) ;
2907
- assert ! ( position_between( v, 2 u, 3 u, f) . is_none( ) ) ;
2908
- assert_eq ! ( position_between( v, 2 u, 4 u, f) , Some ( 3 u) ) ;
2909
-
2910
- assert ! ( position_between( v, 3 u, 3 u, f) . is_none( ) ) ;
2911
- assert_eq ! ( position_between( v, 3 u, 4 u, f) , Some ( 3 u) ) ;
2912
-
2913
- assert ! ( position_between( v, 4 u, 4 u, f) . is_none( ) ) ;
2914
- }
2915
-
2916
2850
#[ test]
2917
2851
fn test_rposition ( ) {
2918
2852
fn f ( xy : & ( int , char ) ) -> bool { let ( _x, y) = * xy; y == 'b' }
@@ -2923,34 +2857,6 @@ mod tests {
2923
2857
assert ! ( rposition( v, g) . is_none( ) ) ;
2924
2858
}
2925
2859
2926
- #[ test]
2927
- fn test_rposition_between ( ) {
2928
- assert ! ( rposition_between( [ ] , 0 u, 0 u, f) . is_none( ) ) ;
2929
-
2930
- fn f ( xy : & ( int , char ) ) -> bool { let ( _x, y) = * xy; y == 'b' }
2931
- let v = ~[ ( 0 , 'a' ) , ( 1 , 'b' ) , ( 2 , 'c' ) , ( 3 , 'b' ) ] ;
2932
-
2933
- assert ! ( rposition_between( v, 0 u, 0 u, f) . is_none( ) ) ;
2934
- assert ! ( rposition_between( v, 0 u, 1 u, f) . is_none( ) ) ;
2935
- assert_eq ! ( rposition_between( v, 0 u, 2 u, f) , Some ( 1 u) ) ;
2936
- assert_eq ! ( rposition_between( v, 0 u, 3 u, f) , Some ( 1 u) ) ;
2937
- assert_eq ! ( rposition_between( v, 0 u, 4 u, f) , Some ( 3 u) ) ;
2938
-
2939
- assert ! ( rposition_between( v, 1 u, 1 u, f) . is_none( ) ) ;
2940
- assert_eq ! ( rposition_between( v, 1 u, 2 u, f) , Some ( 1 u) ) ;
2941
- assert_eq ! ( rposition_between( v, 1 u, 3 u, f) , Some ( 1 u) ) ;
2942
- assert_eq ! ( rposition_between( v, 1 u, 4 u, f) , Some ( 3 u) ) ;
2943
-
2944
- assert ! ( rposition_between( v, 2 u, 2 u, f) . is_none( ) ) ;
2945
- assert ! ( rposition_between( v, 2 u, 3 u, f) . is_none( ) ) ;
2946
- assert_eq ! ( rposition_between( v, 2 u, 4 u, f) , Some ( 3 u) ) ;
2947
-
2948
- assert ! ( rposition_between( v, 3 u, 3 u, f) . is_none( ) ) ;
2949
- assert_eq ! ( rposition_between( v, 3 u, 4 u, f) , Some ( 3 u) ) ;
2950
-
2951
- assert ! ( rposition_between( v, 4 u, 4 u, f) . is_none( ) ) ;
2952
- }
2953
-
2954
2860
#[ test]
2955
2861
fn test_bsearch_elem ( ) {
2956
2862
assert_eq ! ( bsearch_elem( [ 1 , 2 , 3 , 4 , 5 ] , & 5 ) , Some ( 4 ) ) ;
0 commit comments