@@ -186,7 +186,7 @@ pub trait IteratorUtil<A> {
186
186
/// assert_eq!(it.next().get(), &5);
187
187
/// assert!(it.next().is_none());
188
188
/// ~~~
189
- fn skip ( self , n : uint ) -> SkipIterator < Self > ;
189
+ fn skip ( self , n : uint ) -> SkipIterator < A , Self > ;
190
190
191
191
/// Creates an iterator which yields the first `n` elements of this
192
192
/// iterator, and then it will always return None.
@@ -203,7 +203,7 @@ pub trait IteratorUtil<A> {
203
203
/// assert_eq!(it.next().get(), &3);
204
204
/// assert!(it.next().is_none());
205
205
/// ~~~
206
- fn take ( self , n : uint ) -> TakeIterator < Self > ;
206
+ fn take ( self , n : uint ) -> TakeIterator < A , Self > ;
207
207
208
208
/// Creates a new iterator which behaves in a similar fashion to foldl.
209
209
/// There is a state which is passed between each iteration and can be
@@ -386,12 +386,12 @@ impl<A, T: Iterator<A>> IteratorUtil<A> for T {
386
386
}
387
387
388
388
#[ inline( always) ]
389
- fn skip ( self , n : uint ) -> SkipIterator < T > {
389
+ fn skip ( self , n : uint ) -> SkipIterator < A , T > {
390
390
SkipIterator { iter : self , n : n}
391
391
}
392
392
393
393
#[ inline( always) ]
394
- fn take ( self , n : uint ) -> TakeIterator < T > {
394
+ fn take ( self , n : uint ) -> TakeIterator < A , T > {
395
395
TakeIterator { iter : self , n : n}
396
396
}
397
397
@@ -739,13 +739,14 @@ impl<'self, A, T: Iterator<A>> Iterator<A> for TakeWhileIterator<'self, A, T> {
739
739
}
740
740
}
741
741
742
- /// An iterator which skips over `n` elements of `iter`
743
- pub struct SkipIterator < T > {
742
+ /// An iterator which skips over `n` elements of `iter`.
743
+ // FIXME #6967: Dummy A parameter to get around type inference bug
744
+ pub struct SkipIterator < A , T > {
744
745
priv iter : T ,
745
746
priv n: uint
746
747
}
747
748
748
- impl < A , T : Iterator < A > > Iterator < A > for SkipIterator < T > {
749
+ impl < A , T : Iterator < A > > Iterator < A > for SkipIterator < A , T > {
749
750
#[ inline]
750
751
fn next( & mut self ) -> Option < A > {
751
752
let mut next = self . iter . next ( ) ;
@@ -772,12 +773,13 @@ impl<A, T: Iterator<A>> Iterator<A> for SkipIterator<T> {
772
773
}
773
774
774
775
/// An iterator which only iterates over the first `n` iterations of `iter`.
775
- pub struct TakeIterator < T > {
776
+ // FIXME #6967 : Dummy A parameter to get around type inference bug
777
+ pub struct TakeIterator < A , T > {
776
778
priv iter: T ,
777
779
priv n: uint
778
780
}
779
781
780
- impl <A , T : Iterator < A > > Iterator < A > for TakeIterator < T > {
782
+ impl <A , T : Iterator < A > > Iterator < A > for TakeIterator < A , T > {
781
783
#[ inline]
782
784
fn next( & mut self ) -> Option < A > {
783
785
let next = self . iter. next( ) ;
@@ -945,7 +947,7 @@ mod tests {
945
947
let ys = [ 13 , 15 , 16 , 17 , 19 , 20 , 30 ] ;
946
948
let mut it = xs. iter( ) . skip( 5 ) ;
947
949
let mut i = 0 ;
948
- for it. advance |& x: & uint | {
950
+ for it. advance |& x| {
949
951
assert_eq ! ( x, ys[ i] ) ;
950
952
i += 1 ;
951
953
}
@@ -958,7 +960,7 @@ mod tests {
958
960
let ys = [ 0 u, 1 , 2 , 3 , 5 ] ;
959
961
let mut it = xs. iter( ) . take( 5 ) ;
960
962
let mut i = 0 ;
961
- for it. advance |& x: & uint | {
963
+ for it. advance |& x| {
962
964
assert_eq ! ( x, ys[ i] ) ;
963
965
i += 1 ;
964
966
}
0 commit comments