@@ -857,6 +857,34 @@ where
857
857
}
858
858
}
859
859
860
+ #[ derive( Clone ) ]
861
+ pub struct IntoIter < K , V , const N : usize > {
862
+ entries : Vec < Bucket < K , V > , N > ,
863
+ }
864
+
865
+ impl < K , V , const N : usize > Iterator for IntoIter < K , V , N > {
866
+ type Item = ( K , V ) ;
867
+
868
+ fn next ( & mut self ) -> Option < Self :: Item > {
869
+ self . entries . pop ( ) . map ( |bucket| ( bucket. key , bucket. value ) )
870
+ }
871
+ }
872
+
873
+ impl < K , V , S , const N : usize > IntoIterator for IndexMap < K , V , S , N >
874
+ where
875
+ K : Eq + Hash ,
876
+ S : BuildHasher ,
877
+ {
878
+ type Item = ( K , V ) ;
879
+ type IntoIter = IntoIter < K , V , N > ;
880
+
881
+ fn into_iter ( self ) -> Self :: IntoIter {
882
+ IntoIter {
883
+ entries : self . core . entries
884
+ }
885
+ }
886
+ }
887
+
860
888
impl < ' a , K , V , S , const N : usize > IntoIterator for & ' a IndexMap < K , V , S , N >
861
889
where
862
890
K : Eq + Hash ,
@@ -974,4 +1002,17 @@ mod tests {
974
1002
assert ! ( a == b) ;
975
1003
}
976
1004
}
1005
+
1006
+ #[ test]
1007
+ fn into_iter ( ) {
1008
+ let mut src: FnvIndexMap < _ , _ , 4 > = FnvIndexMap :: new ( ) ;
1009
+ src. insert ( "k1" , "v1" ) . unwrap ( ) ;
1010
+ src. insert ( "k2" , "v2" ) . unwrap ( ) ;
1011
+ src. insert ( "k3" , "v3" ) . unwrap ( ) ;
1012
+ src. insert ( "k4" , "v4" ) . unwrap ( ) ;
1013
+ let clone = src. clone ( ) ;
1014
+ for ( k, v) in clone. into_iter ( ) {
1015
+ assert_eq ! ( v, * src. get( k) . unwrap( ) ) ;
1016
+ }
1017
+ }
977
1018
}
0 commit comments