@@ -55,7 +55,7 @@ pub trait IteratorUtil<A> {
55
55
/// assert_eq!(it.next().get(), &1);
56
56
/// assert!(it.next().is_none());
57
57
/// ~~~
58
- fn chain < U : Iterator < A > > ( self , other : U ) -> ChainIterator < Self , U > ;
58
+ fn chain < U : Iterator < A > > ( self , other : U ) -> ChainIterator < A , Self , U > ;
59
59
60
60
/// Creates an iterator which iterates over both this and the specified
61
61
/// iterators simultaneously, yielding the two elements as pairs. When
@@ -73,7 +73,7 @@ pub trait IteratorUtil<A> {
73
73
/// assert_eq!(it.next().get(), (&0, &1));
74
74
/// assert!(it.next().is_none());
75
75
/// ~~~
76
- fn zip < B , U : Iterator < B > > ( self , other : U ) -> ZipIterator < Self , U > ;
76
+ fn zip < B , U : Iterator < B > > ( self , other : U ) -> ZipIterator < A , Self , B , U > ;
77
77
78
78
// FIXME: #5898: should be called map
79
79
/// Creates a new iterator which will apply the specified function to each
@@ -139,7 +139,7 @@ pub trait IteratorUtil<A> {
139
139
/// assert_eq!(it.next().get(), (1, &200));
140
140
/// assert!(it.next().is_none());
141
141
/// ~~~
142
- fn enumerate ( self ) -> EnumerateIterator < Self > ;
142
+ fn enumerate ( self ) -> EnumerateIterator < A , Self > ;
143
143
144
144
/// Creates an iterator which invokes the predicate on elements until it
145
145
/// returns true. Once the predicate returns true, all further elements are
@@ -349,12 +349,12 @@ pub trait IteratorUtil<A> {
349
349
/// In the future these will be default methods instead of a utility trait.
350
350
impl < A , T : Iterator < A > > IteratorUtil < A > for T {
351
351
#[ inline( always) ]
352
- fn chain < U : Iterator < A > > ( self , other : U ) -> ChainIterator < T , U > {
352
+ fn chain < U : Iterator < A > > ( self , other : U ) -> ChainIterator < A , T , U > {
353
353
ChainIterator { a : self , b : other, flag : false }
354
354
}
355
355
356
356
#[ inline( always) ]
357
- fn zip < B , U : Iterator < B > > ( self , other : U ) -> ZipIterator < T , U > {
357
+ fn zip < B , U : Iterator < B > > ( self , other : U ) -> ZipIterator < A , T , B , U > {
358
358
ZipIterator { a : self , b : other}
359
359
}
360
360
@@ -375,7 +375,7 @@ impl<A, T: Iterator<A>> IteratorUtil<A> for T {
375
375
}
376
376
377
377
#[ inline( always) ]
378
- fn enumerate ( self ) -> EnumerateIterator < T > {
378
+ fn enumerate ( self ) -> EnumerateIterator < A , T > {
379
379
EnumerateIterator { iter : self , count : 0 }
380
380
}
381
381
@@ -570,13 +570,14 @@ impl<A: Ord, T: Iterator<A>> OrdIterator<A> for T {
570
570
}
571
571
572
572
/// An iterator which strings two iterators together
573
- pub struct ChainIterator < T , U > {
573
+ // FIXME #6967: Dummy A parameter to get around type inference bug
574
+ pub struct ChainIterator < A , T , U > {
574
575
priv a: T ,
575
576
priv b: U ,
576
577
priv flag : bool
577
578
}
578
579
579
- impl < A , T : Iterator < A > , U : Iterator < A > > Iterator < A > for ChainIterator < T , U > {
580
+ impl < A , T : Iterator < A > , U : Iterator < A > > Iterator < A > for ChainIterator < A , T , U > {
580
581
#[ inline]
581
582
fn next ( & mut self ) -> Option < A > {
582
583
if self . flag {
@@ -593,12 +594,13 @@ impl<A, T: Iterator<A>, U: Iterator<A>> Iterator<A> for ChainIterator<T, U> {
593
594
}
594
595
595
596
/// An iterator which iterates two other iterators simultaneously
596
- pub struct ZipIterator < T , U > {
597
+ // FIXME #6967: Dummy A & B parameters to get around type inference bug
598
+ pub struct ZipIterator < A , T , B , U > {
597
599
priv a: T ,
598
600
priv b: U
599
601
}
600
602
601
- impl < A , B , T : Iterator < A > , U : Iterator < B > > Iterator < ( A , B ) > for ZipIterator < T , U > {
603
+ impl < A , B , T : Iterator < A > , U : Iterator < B > > Iterator < ( A , B ) > for ZipIterator < A , T , B , U > {
602
604
#[ inline]
603
605
fn next ( & mut self ) -> Option < ( A , B ) > {
604
606
match ( self . a . next ( ) , self . b . next ( ) ) {
@@ -664,12 +666,13 @@ impl<'self, A, B, T: Iterator<A>> Iterator<B> for FilterMapIterator<'self, A, B,
664
666
}
665
667
666
668
/// An iterator which yields the current count and the element during iteration
667
- pub struct EnumerateIterator < T > {
669
+ // FIXME #6967: Dummy A parameter to get around type inference bug
670
+ pub struct EnumerateIterator < A , T > {
668
671
priv iter : T ,
669
672
priv count : uint
670
673
}
671
674
672
- impl < A , T : Iterator < A > > Iterator < ( uint , A ) > for EnumerateIterator < T > {
675
+ impl < A , T : Iterator < A > > Iterator < ( uint , A ) > for EnumerateIterator < A , T > {
673
676
#[ inline]
674
677
fn next ( & mut self ) -> Option < ( uint , A ) > {
675
678
match self . iter . next ( ) {
@@ -887,7 +890,7 @@ mod tests {
887
890
let expected = [ 0 , 1 , 2 , 3 , 4 , 5 , 30 , 40 , 50 , 60 ] ;
888
891
let mut it = xs. iter( ) . chain( ys. iter( ) ) ;
889
892
let mut i = 0 ;
890
- for it. advance |& x: & uint | {
893
+ for it. advance |& x| {
891
894
assert_eq ! ( x, expected[ i] ) ;
892
895
i += 1 ;
893
896
}
@@ -896,7 +899,7 @@ mod tests {
896
899
let ys = Counter :: new( 30 u, 10 ) . take( 4 ) ;
897
900
let mut it = xs. iter( ) . transform( |& x| x) . chain( ys) ;
898
901
let mut i = 0 ;
899
- for it. advance |x: uint | {
902
+ for it. advance |x| {
900
903
assert_eq ! ( x, expected[ i] ) ;
901
904
i += 1 ;
902
905
}
@@ -906,15 +909,15 @@ mod tests {
906
909
#[ test]
907
910
fn test_filter_map( ) {
908
911
let mut it = Counter : : new( 0 u, 1 u) . take( 10 )
909
- . filter_map( |x: uint | if x. is_even( ) { Some ( x* x) } else { None } ) ;
912
+ . filter_map( |x| if x. is_even( ) { Some ( x* x) } else { None } ) ;
910
913
assert_eq ! ( it. collect:: <~[ uint] >( ) , ~[ 0 * 0 , 2 * 2 , 4 * 4 , 6 * 6 , 8 * 8 ] ) ;
911
914
}
912
915
913
916
#[ test]
914
917
fn test_iterator_enumerate( ) {
915
918
let xs = [ 0 u, 1 , 2 , 3 , 4 , 5 ] ;
916
919
let mut it = xs. iter( ) . enumerate( ) ;
917
- for it. advance |( i, & x) : ( uint , & uint ) | {
920
+ for it. advance |( i, & x) | {
918
921
assert_eq ! ( i, x) ;
919
922
}
920
923
}
@@ -925,7 +928,7 @@ mod tests {
925
928
let ys = [ 0 u, 1 , 2 , 3 , 5 , 13 ] ;
926
929
let mut it = xs. iter( ) . take_while( |& x| * x < 15 u) ;
927
930
let mut i = 0 ;
928
- for it. advance |& x: & uint | {
931
+ for it. advance |& x| {
929
932
assert_eq ! ( x, ys[ i] ) ;
930
933
i += 1 ;
931
934
}
@@ -938,7 +941,7 @@ mod tests {
938
941
let ys = [ 15 , 16 , 17 , 19 ] ;
939
942
let mut it = xs. iter( ) . skip_while( |& x| * x < 15 u) ;
940
943
let mut i = 0 ;
941
- for it. advance |& x: & uint | {
944
+ for it. advance |& x| {
942
945
assert_eq ! ( x, ys[ i] ) ;
943
946
i += 1 ;
944
947
}
0 commit comments