@@ -18,7 +18,7 @@ use core::prelude::*;
18
18
use core:: default:: Default ;
19
19
use core:: fmt;
20
20
use core:: iter;
21
- use core:: iter:: { Enumerate , FilterMap } ;
21
+ use core:: iter:: { Enumerate , FilterMap , Map } ;
22
22
use core:: mem:: replace;
23
23
24
24
use hash:: { Hash , Writer } ;
@@ -141,14 +141,14 @@ impl<V> VecMap<V> {
141
141
/// The iterator's element type is `uint`.
142
142
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
143
143
pub fn keys < ' r > ( & ' r self ) -> Keys < ' r , V > {
144
- self . iter ( ) . map ( |( k, _v) | k)
144
+ Keys { iter : self . iter ( ) . map ( |( k, _v) | k) }
145
145
}
146
146
147
147
/// Returns an iterator visiting all values in ascending order by the keys.
148
148
/// The iterator's element type is `&'r V`.
149
149
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
150
150
pub fn values < ' r > ( & ' r self ) -> Values < ' r , V > {
151
- self . iter ( ) . map ( |( _k, v) | v)
151
+ Values { iter : self . iter ( ) . map ( |( _k, v) | v) }
152
152
}
153
153
154
154
/// Returns an iterator visiting all key-value pairs in ascending order by the keys.
@@ -231,9 +231,11 @@ impl<V> VecMap<V> {
231
231
#[ unstable = "matches collection reform specification, waiting for dust to settle" ]
232
232
pub fn into_iter ( & mut self ) -> MoveItems < V > {
233
233
let values = replace ( & mut self . v , vec ! ( ) ) ;
234
- values. into_iter ( ) . enumerate ( ) . filter_map ( |( i, v) | {
235
- v. map ( |v| ( i, v) )
236
- } )
234
+ MoveItems {
235
+ iter : values. into_iter ( ) . enumerate ( ) . filter_map ( |( i, v) | {
236
+ v. map ( |v| ( i, v) )
237
+ } )
238
+ }
237
239
}
238
240
239
241
/// Return the number of elements in the map.
@@ -598,7 +600,7 @@ macro_rules! double_ended_iterator {
598
600
}
599
601
}
600
602
601
- /// Forward iterator over a map.
603
+ /// An iterator over the key-value pairs of a map.
602
604
pub struct Entries < ' a , V : ' a > {
603
605
front : uint ,
604
606
back : uint ,
@@ -608,7 +610,7 @@ pub struct Entries<'a, V:'a> {
608
610
iterator ! ( impl Entries -> ( uint, & ' a V ) , as_ref)
609
611
double_ended_iterator ! ( impl Entries -> ( uint, & ' a V ) , as_ref)
610
612
611
- /// Forward iterator over the key-value pairs of a map, with the
613
+ /// An iterator over the key-value pairs of a map, with the
612
614
/// values being mutable.
613
615
pub struct MutEntries < ' a , V : ' a > {
614
616
front : uint ,
@@ -619,17 +621,47 @@ pub struct MutEntries<'a, V:'a> {
619
621
iterator ! ( impl MutEntries -> ( uint, & ' a mut V ) , as_mut)
620
622
double_ended_iterator ! ( impl MutEntries -> ( uint, & ' a mut V ) , as_mut)
621
623
622
- /// Forward iterator over the keys of a map
623
- pub type Keys < ' a , V > =
624
- iter:: Map < ' static , ( uint , & ' a V ) , uint , Entries < ' a , V > > ;
624
+ /// An iterator over the keys of a map.
625
+ pub struct Keys < ' a , V : ' a > {
626
+ iter : Map < ' static , ( uint , & ' a V ) , uint , Entries < ' a , V > >
627
+ }
628
+
629
+ impl < ' a , V > Iterator < uint > for Keys < ' a , V > {
630
+ fn next ( & mut self ) -> Option < uint > { self . iter . next ( ) }
631
+ fn size_hint ( & self ) -> ( uint , Option < uint > ) { self . iter . size_hint ( ) }
632
+ }
633
+
634
+ impl < ' a , V > DoubleEndedIterator < uint > for Keys < ' a , V > {
635
+ fn next_back ( & mut self ) -> Option < uint > { self . iter . next_back ( ) }
636
+ }
637
+
638
+ /// An iterator over the values of a map.
639
+ pub struct Values < ' a , V : ' a > {
640
+ iter : Map < ' static , ( uint , & ' a V ) , & ' a V , Entries < ' a , V > >
641
+ }
642
+
643
+ impl < ' a , V > Iterator < & ' a V > for Values < ' a , V > {
644
+ fn next ( & mut self ) -> Option < ( & ' a V ) > { self . iter . next ( ) }
645
+ fn size_hint ( & self ) -> ( uint , Option < uint > ) { self . iter . size_hint ( ) }
646
+ }
647
+
648
+ impl < ' a , V > DoubleEndedIterator < & ' a V > for Values < ' a , V > {
649
+ fn next_back ( & mut self ) -> Option < ( & ' a V ) > { self . iter . next_back ( ) }
650
+ }
651
+
652
+ /// A consuming iterator over the key-value pairs of a map.
653
+ pub struct MoveItems < V > {
654
+ iter : FilterMap < ' static , ( uint , Option < V > ) , ( uint , V ) , Enumerate < vec:: MoveItems < Option < V > > > >
655
+ }
625
656
626
- /// Forward iterator over the values of a map
627
- pub type Values < ' a , V > =
628
- iter:: Map < ' static , ( uint , & ' a V ) , & ' a V , Entries < ' a , V > > ;
657
+ impl < V > Iterator < ( uint , V ) > for MoveItems < V > {
658
+ fn next ( & mut self ) -> Option < ( uint , V ) > { self . iter . next ( ) }
659
+ fn size_hint ( & self ) -> ( uint , Option < uint > ) { self . iter . size_hint ( ) }
660
+ }
629
661
630
- /// Iterator over the key-value pairs of a map, the iterator consumes the map
631
- pub type MoveItems < V > =
632
- FilterMap < ' static , ( uint , Option < V > ) , ( uint , V ) , Enumerate < vec :: MoveItems < Option < V > > > > ;
662
+ impl < V > DoubleEndedIterator < ( uint , V ) > for MoveItems < V > {
663
+ fn next_back ( & mut self ) -> Option < ( uint , V ) > { self . iter . next_back ( ) }
664
+ }
633
665
634
666
#[ cfg( test) ]
635
667
mod test_map {
0 commit comments