@@ -3,9 +3,9 @@ use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
3
3
use std:: fmt;
4
4
use std:: fmt:: Debug ;
5
5
use std:: hash:: Hash ;
6
- use std:: iter:: { self , FromIterator } ;
6
+ use std:: iter:: FromIterator ;
7
7
use std:: marker:: PhantomData ;
8
- use std:: ops:: { Index , IndexMut , Range , RangeBounds } ;
8
+ use std:: ops:: { Index , IndexMut , RangeBounds } ;
9
9
use std:: slice;
10
10
use std:: vec;
11
11
@@ -518,8 +518,6 @@ impl<I: Idx, T: fmt::Debug> fmt::Debug for IndexVec<I, T> {
518
518
}
519
519
}
520
520
521
- pub type Enumerated < I , J > = iter:: Map < iter:: Enumerate < J > , IntoIdx < I > > ;
522
-
523
521
impl < I : Idx , T > IndexVec < I , T > {
524
522
#[ inline]
525
523
pub fn new ( ) -> Self {
@@ -596,8 +594,10 @@ impl<I: Idx, T> IndexVec<I, T> {
596
594
}
597
595
598
596
#[ inline]
599
- pub fn into_iter_enumerated ( self ) -> Enumerated < I , vec:: IntoIter < T > > {
600
- self . raw . into_iter ( ) . enumerate ( ) . map ( IntoIdx { _marker : PhantomData } )
597
+ pub fn into_iter_enumerated (
598
+ self ,
599
+ ) -> impl DoubleEndedIterator < Item = ( I , T ) > + ExactSizeIterator {
600
+ self . raw . into_iter ( ) . enumerate ( ) . map ( |( n, t) | ( I :: new ( n) , t) )
601
601
}
602
602
603
603
#[ inline]
@@ -606,13 +606,15 @@ impl<I: Idx, T> IndexVec<I, T> {
606
606
}
607
607
608
608
#[ inline]
609
- pub fn iter_enumerated ( & self ) -> Enumerated < I , slice:: Iter < ' _ , T > > {
610
- self . raw . iter ( ) . enumerate ( ) . map ( IntoIdx { _marker : PhantomData } )
609
+ pub fn iter_enumerated (
610
+ & self ,
611
+ ) -> impl DoubleEndedIterator < Item = ( I , & T ) > + ExactSizeIterator + ' _ {
612
+ self . raw . iter ( ) . enumerate ( ) . map ( |( n, t) | ( I :: new ( n) , t) )
611
613
}
612
614
613
615
#[ inline]
614
- pub fn indices ( & self ) -> iter :: Map < Range < usize > , IntoIdx < I > > {
615
- ( 0 ..self . len ( ) ) . map ( IntoIdx { _marker : PhantomData } )
616
+ pub fn indices ( & self ) -> impl DoubleEndedIterator < Item = I > + ExactSizeIterator + ' static {
617
+ ( 0 ..self . len ( ) ) . map ( |n| I :: new ( n ) )
616
618
}
617
619
618
620
#[ inline]
@@ -621,8 +623,10 @@ impl<I: Idx, T> IndexVec<I, T> {
621
623
}
622
624
623
625
#[ inline]
624
- pub fn iter_enumerated_mut ( & mut self ) -> Enumerated < I , slice:: IterMut < ' _ , T > > {
625
- self . raw . iter_mut ( ) . enumerate ( ) . map ( IntoIdx { _marker : PhantomData } )
626
+ pub fn iter_enumerated_mut (
627
+ & mut self ,
628
+ ) -> impl DoubleEndedIterator < Item = ( I , & mut T ) > + ExactSizeIterator + ' _ {
629
+ self . raw . iter_mut ( ) . enumerate ( ) . map ( |( n, t) | ( I :: new ( n) , t) )
626
630
}
627
631
628
632
#[ inline]
@@ -638,7 +642,7 @@ impl<I: Idx, T> IndexVec<I, T> {
638
642
& ' a mut self ,
639
643
range : R ,
640
644
) -> impl Iterator < Item = ( I , T ) > + ' a {
641
- self . raw . drain ( range) . enumerate ( ) . map ( IntoIdx { _marker : PhantomData } )
645
+ self . raw . drain ( range) . enumerate ( ) . map ( | ( n , t ) | ( I :: new ( n ) , t ) )
642
646
}
643
647
644
648
#[ inline]
@@ -832,36 +836,5 @@ impl<'a, I: Idx, T> IntoIterator for &'a mut IndexVec<I, T> {
832
836
}
833
837
}
834
838
835
- pub struct IntoIdx < I : Idx > {
836
- _marker : PhantomData < fn ( & I ) > ,
837
- }
838
- impl < I : Idx , T > FnOnce < ( ( usize , T ) , ) > for IntoIdx < I > {
839
- type Output = ( I , T ) ;
840
-
841
- extern "rust-call" fn call_once ( self , ( ( n, t) , ) : ( ( usize , T ) , ) ) -> Self :: Output {
842
- ( I :: new ( n) , t)
843
- }
844
- }
845
-
846
- impl < I : Idx , T > FnMut < ( ( usize , T ) , ) > for IntoIdx < I > {
847
- extern "rust-call" fn call_mut ( & mut self , ( ( n, t) , ) : ( ( usize , T ) , ) ) -> Self :: Output {
848
- ( I :: new ( n) , t)
849
- }
850
- }
851
-
852
- impl < I : Idx > FnOnce < ( usize , ) > for IntoIdx < I > {
853
- type Output = I ;
854
-
855
- extern "rust-call" fn call_once ( self , ( n, ) : ( usize , ) ) -> Self :: Output {
856
- I :: new ( n)
857
- }
858
- }
859
-
860
- impl < I : Idx > FnMut < ( usize , ) > for IntoIdx < I > {
861
- extern "rust-call" fn call_mut ( & mut self , ( n, ) : ( usize , ) ) -> Self :: Output {
862
- I :: new ( n)
863
- }
864
- }
865
-
866
839
#[ cfg( test) ]
867
840
mod tests;
0 commit comments