@@ -47,7 +47,7 @@ pub trait IteratorUtil<A> {
47
47
fn advance ( & mut self , f : & fn ( A ) -> bool ) ;
48
48
#[ cfg( not( stage0) ) ]
49
49
fn advance ( & mut self , f : & fn ( A ) -> bool ) -> bool ;
50
- fn to_vec ( self ) -> ~[ A ] ;
50
+ fn to_vec ( & mut self ) -> ~[ A ] ;
51
51
fn nth ( & mut self , n : uint ) -> Option < A > ;
52
52
fn last ( & mut self ) -> Option < A > ;
53
53
fn fold < B > ( & mut self , start : B , f : & fn ( B , A ) -> B ) -> B ;
@@ -147,11 +147,8 @@ impl<A, T: Iterator<A>> IteratorUtil<A> for T {
147
147
}
148
148
149
149
#[ inline( always) ]
150
- fn to_vec ( self ) -> ~[ A ] {
151
- let mut v = ~[ ] ;
152
- let mut it = self ;
153
- for it. advance( ) |x| { v. push ( x) ; }
154
- return v;
150
+ fn to_vec ( & mut self ) -> ~[ A ] {
151
+ iter:: to_vec :: < A > ( |f| self . advance ( f) )
155
152
}
156
153
157
154
/// Return the `n`th item yielded by an iterator.
@@ -563,7 +560,7 @@ mod tests {
563
560
564
561
#[ test]
565
562
fn test_filter_map ( ) {
566
- let it = Counter :: new ( 0 u, 1 u) . take ( 10 )
563
+ let mut it = Counter :: new ( 0 u, 1 u) . take ( 10 )
567
564
. filter_map ( |x : uint | if x. is_even ( ) { Some ( x* x) } else { None } ) ;
568
565
assert_eq ! ( it. to_vec( ) , ~[ 0 * 0 , 2 * 2 , 4 * 4 , 6 * 6 , 8 * 8 ] ) ;
569
566
}
0 commit comments