@@ -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
@@ -285,7 +285,8 @@ pub trait IteratorUtil<A> {
285
285
/// let a = [1, 2, 3, 4, 5];
286
286
/// assert!(a.iter().last().get() == &5);
287
287
/// ~~~
288
- fn last ( & mut self ) -> Option < A > ;
288
+ // FIXME: #5898: should be called `last`
289
+ fn last_ ( & mut self ) -> Option < A > ;
289
290
290
291
/// Performs a fold operation over the entire iterator, returning the
291
292
/// eventual state at the end of the iteration.
@@ -349,12 +350,12 @@ pub trait IteratorUtil<A> {
349
350
/// In the future these will be default methods instead of a utility trait.
350
351
impl < A , T : Iterator < A > > IteratorUtil < A > for T {
351
352
#[ inline( always) ]
352
- fn chain < U : Iterator < A > > ( self , other : U ) -> ChainIterator < T , U > {
353
+ fn chain < U : Iterator < A > > ( self , other : U ) -> ChainIterator < A , T , U > {
353
354
ChainIterator { a : self , b : other, flag : false }
354
355
}
355
356
356
357
#[ inline( always) ]
357
- fn zip < B , U : Iterator < B > > ( self , other : U ) -> ZipIterator < T , U > {
358
+ fn zip < B , U : Iterator < B > > ( self , other : U ) -> ZipIterator < A , T , B , U > {
358
359
ZipIterator { a : self , b : other}
359
360
}
360
361
@@ -375,7 +376,7 @@ impl<A, T: Iterator<A>> IteratorUtil<A> for T {
375
376
}
376
377
377
378
#[ inline( always) ]
378
- fn enumerate ( self ) -> EnumerateIterator < T > {
379
+ fn enumerate ( self ) -> EnumerateIterator < A , T > {
379
380
EnumerateIterator { iter : self , count : 0 }
380
381
}
381
382
@@ -437,7 +438,7 @@ impl<A, T: Iterator<A>> IteratorUtil<A> for T {
437
438
438
439
/// Return the last item yielded by an iterator.
439
440
#[ inline( always) ]
440
- fn last ( & mut self ) -> Option < A > {
441
+ fn last_ ( & mut self ) -> Option < A > {
441
442
let mut last = None ;
442
443
for self . advance |x| { last = Some ( x) ; }
443
444
last
@@ -570,13 +571,14 @@ impl<A: Ord, T: Iterator<A>> OrdIterator<A> for T {
570
571
}
571
572
572
573
/// An iterator which strings two iterators together
573
- pub struct ChainIterator < T , U > {
574
+ // FIXME #6967: Dummy A parameter to get around type inference bug
575
+ pub struct ChainIterator < A , T , U > {
574
576
priv a: T ,
575
577
priv b: U ,
576
578
priv flag : bool
577
579
}
578
580
579
- impl < A , T : Iterator < A > , U : Iterator < A > > Iterator < A > for ChainIterator < T , U > {
581
+ impl < A , T : Iterator < A > , U : Iterator < A > > Iterator < A > for ChainIterator < A , T , U > {
580
582
#[ inline]
581
583
fn next ( & mut self ) -> Option < A > {
582
584
if self . flag {
@@ -593,12 +595,13 @@ impl<A, T: Iterator<A>, U: Iterator<A>> Iterator<A> for ChainIterator<T, U> {
593
595
}
594
596
595
597
/// An iterator which iterates two other iterators simultaneously
596
- pub struct ZipIterator < T , U > {
598
+ // FIXME #6967: Dummy A & B parameters to get around type inference bug
599
+ pub struct ZipIterator < A , T , B , U > {
597
600
priv a: T ,
598
601
priv b: U
599
602
}
600
603
601
- impl < A , B , T : Iterator < A > , U : Iterator < B > > Iterator < ( A , B ) > for ZipIterator < T , U > {
604
+ impl < A , B , T : Iterator < A > , U : Iterator < B > > Iterator < ( A , B ) > for ZipIterator < A , T , B , U > {
602
605
#[ inline]
603
606
fn next ( & mut self ) -> Option < ( A , B ) > {
604
607
match ( self . a . next ( ) , self . b . next ( ) ) {
@@ -664,12 +667,13 @@ impl<'self, A, B, T: Iterator<A>> Iterator<B> for FilterMapIterator<'self, A, B,
664
667
}
665
668
666
669
/// An iterator which yields the current count and the element during iteration
667
- pub struct EnumerateIterator < T > {
670
+ // FIXME #6967: Dummy A parameter to get around type inference bug
671
+ pub struct EnumerateIterator < A , T > {
668
672
priv iter : T ,
669
673
priv count : uint
670
674
}
671
675
672
- impl < A , T : Iterator < A > > Iterator < ( uint , A ) > for EnumerateIterator < T > {
676
+ impl < A , T : Iterator < A > > Iterator < ( uint , A ) > for EnumerateIterator < A , T > {
673
677
#[ inline]
674
678
fn next ( & mut self ) -> Option < ( uint , A ) > {
675
679
match self . iter . next ( ) {
@@ -887,7 +891,7 @@ mod tests {
887
891
let expected = [ 0 , 1 , 2 , 3 , 4 , 5 , 30 , 40 , 50 , 60 ] ;
888
892
let mut it = xs. iter( ) . chain( ys. iter( ) ) ;
889
893
let mut i = 0 ;
890
- for it. advance |& x: & uint | {
894
+ for it. advance |& x| {
891
895
assert_eq ! ( x, expected[ i] ) ;
892
896
i += 1 ;
893
897
}
@@ -896,7 +900,7 @@ mod tests {
896
900
let ys = Counter :: new( 30 u, 10 ) . take( 4 ) ;
897
901
let mut it = xs. iter( ) . transform( |& x| x) . chain( ys) ;
898
902
let mut i = 0 ;
899
- for it. advance |x: uint | {
903
+ for it. advance |x| {
900
904
assert_eq ! ( x, expected[ i] ) ;
901
905
i += 1 ;
902
906
}
@@ -906,15 +910,15 @@ mod tests {
906
910
#[ test]
907
911
fn test_filter_map( ) {
908
912
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 } ) ;
913
+ . filter_map( |x| if x. is_even( ) { Some ( x* x) } else { None } ) ;
910
914
assert_eq ! ( it. collect:: <~[ uint] >( ) , ~[ 0 * 0 , 2 * 2 , 4 * 4 , 6 * 6 , 8 * 8 ] ) ;
911
915
}
912
916
913
917
#[ test]
914
918
fn test_iterator_enumerate( ) {
915
919
let xs = [ 0 u, 1 , 2 , 3 , 4 , 5 ] ;
916
920
let mut it = xs. iter( ) . enumerate( ) ;
917
- for it. advance |( i, & x) : ( uint , & uint ) | {
921
+ for it. advance |( i, & x) | {
918
922
assert_eq ! ( i, x) ;
919
923
}
920
924
}
@@ -925,7 +929,7 @@ mod tests {
925
929
let ys = [ 0 u, 1 , 2 , 3 , 5 , 13 ] ;
926
930
let mut it = xs. iter( ) . take_while( |& x| * x < 15 u) ;
927
931
let mut i = 0 ;
928
- for it. advance |& x: & uint | {
932
+ for it. advance |& x| {
929
933
assert_eq ! ( x, ys[ i] ) ;
930
934
i += 1 ;
931
935
}
@@ -938,7 +942,7 @@ mod tests {
938
942
let ys = [ 15 , 16 , 17 , 19 ] ;
939
943
let mut it = xs. iter( ) . skip_while( |& x| * x < 15 u) ;
940
944
let mut i = 0 ;
941
- for it. advance |& x: & uint | {
945
+ for it. advance |& x| {
942
946
assert_eq ! ( x, ys[ i] ) ;
943
947
i += 1 ;
944
948
}
@@ -1022,8 +1026,8 @@ mod tests {
1022
1026
#[ test]
1023
1027
fn test_iterator_last( ) {
1024
1028
let v = & [ 0 , 1 , 2 , 3 , 4 ] ;
1025
- assert_eq ! ( v. iter( ) . last ( ) . unwrap( ) , & 4 ) ;
1026
- assert_eq ! ( v. slice( 0 , 1 ) . iter( ) . last ( ) . unwrap( ) , & 0 ) ;
1029
+ assert_eq ! ( v. iter( ) . last_ ( ) . unwrap( ) , & 4 ) ;
1030
+ assert_eq ! ( v. slice( 0 , 1 ) . iter( ) . last_ ( ) . unwrap( ) , & 0 ) ;
1027
1031
}
1028
1032
1029
1033
#[ test]
0 commit comments