@@ -438,31 +438,6 @@ impl<K: Hash + Eq, V> HashMap<K, V> {
438
438
self . mangle ( k, v, |_k, a| a, |k, v, _a| f ( k, v) )
439
439
}
440
440
441
- /// Calls a function on each element of a hash map, destroying the hash
442
- /// map in the process.
443
- pub fn consume ( & mut self , f : & fn ( K , V ) ) {
444
- let buckets = replace ( & mut self . buckets ,
445
- vec:: from_fn ( INITIAL_CAPACITY , |_| None ) ) ;
446
- self . size = 0 ;
447
-
448
- for buckets. consume_iter( ) . advance |bucket| {
449
- match bucket {
450
- None => { } ,
451
- Some ( Bucket { key, value, _} ) => {
452
- f( key, value)
453
- }
454
- }
455
- }
456
- }
457
-
458
- /// Creates a consuming iterator, that is, one that moves each key-value
459
- /// pair out of the map in arbitrary order. The map cannot be used after
460
- /// calling this.
461
- pub fn consume_iter ( self ) -> HashMapConsumeIterator < K , V > {
462
- // `consume_rev_iter` is more efficient than `consume_iter` for vectors
463
- HashMapConsumeIterator { iter : self . buckets . consume_rev_iter ( ) }
464
- }
465
-
466
441
/// Retrieves a value for the given key, failing if the key is not
467
442
/// present.
468
443
pub fn get < ' a > ( & ' a self , k : & K ) -> & ' a V {
@@ -522,6 +497,15 @@ impl<K: Hash + Eq, V> HashMap<K, V> {
522
497
pub fn mut_iter < ' a > ( & ' a mut self ) -> HashMapMutIterator < ' a , K , V > {
523
498
HashMapMutIterator { iter : self . buckets . mut_iter ( ) }
524
499
}
500
+
501
+ /// Creates a consuming iterator, that is, one that moves each key-value
502
+ /// pair out of the map in arbitrary order. The map cannot be used after
503
+ /// calling this.
504
+ pub fn consume ( self ) -> HashMapConsumeIterator < K , V > {
505
+ // `consume_rev_iter` is more efficient than `consume_iter` for vectors
506
+ HashMapConsumeIterator { iter : self . buckets . consume_rev_iter ( ) }
507
+ }
508
+
525
509
}
526
510
527
511
impl < K : Hash + Eq , V : Clone > HashMap < K , V > {
@@ -761,19 +745,6 @@ impl<T:Hash + Eq> HashSet<T> {
761
745
self . map. reserve_at_least( n)
762
746
}
763
747
764
- /// Consumes all of the elements in the set, emptying it out
765
- pub fn consume( & mut self , f: & fn( T ) ) {
766
- self . map. consume( |k, _| f( k) )
767
- }
768
-
769
- /// Creates a consuming iterator, that is, one that moves each value out
770
- /// of the set in arbitrary order. The set cannot be used after calling
771
- /// this.
772
- pub fn consume_iter( self ) -> HashSetConsumeIterator < T > {
773
- // `consume_rev_iter` is more efficient than `consume_iter` for vectors
774
- HashSetConsumeIterator { iter : self . map. buckets. consume_rev_iter( ) }
775
- }
776
-
777
748
/// Returns true if the hash set contains a value equivalent to the
778
749
/// given query value.
779
750
pub fn contains_equiv < Q : Hash + Equiv < T > > ( & self , value: & Q ) -> bool {
@@ -786,6 +757,14 @@ impl<T:Hash + Eq> HashSet<T> {
786
757
HashSetIterator { iter : self . map. buckets. iter( ) }
787
758
}
788
759
760
+ /// Creates a consuming iterator, that is, one that moves each value out
761
+ /// of the set in arbitrary order. The set cannot be used after calling
762
+ /// this.
763
+ pub fn consume( self ) -> HashSetConsumeIterator < T > {
764
+ // `consume_rev_iter` is more efficient than `consume_iter` for vectors
765
+ HashSetConsumeIterator { iter : self . map. buckets. consume_rev_iter( ) }
766
+ }
767
+
789
768
/// Visit the values representing the difference
790
769
pub fn difference_iter < ' a > ( & ' a self, other: & ' a HashSet < T > )
791
770
-> SetAlgebraIter < ' a , T > {
@@ -975,29 +954,6 @@ mod test_map {
975
954
976
955
#[ test]
977
956
fn test_consume ( ) {
978
- let mut m = HashMap : : new( ) ;
979
- assert ! ( m. insert( 1 , 2 ) ) ;
980
- assert ! ( m. insert( 2 , 3 ) ) ;
981
- let mut m2 = HashMap :: new( ) ;
982
- do m. consume |k, v| {
983
- m2. insert( k, v) ;
984
- }
985
- assert_eq ! ( m. len( ) , 0 ) ;
986
- assert_eq ! ( m2. len( ) , 2 ) ;
987
- assert_eq ! ( m2. get( & 1 ) , & 2 ) ;
988
- assert_eq ! ( m2. get( & 2 ) , & 3 ) ;
989
- }
990
-
991
- #[ test]
992
- fn test_consume_still_usable ( ) {
993
- let mut m = HashMap : : new( ) ;
994
- assert ! ( m. insert( 1 , 2 ) ) ;
995
- do m. consume |_, _| { }
996
- assert!( m. insert( 1 , 2 ) ) ;
997
- }
998
-
999
- #[ test]
1000
- fn test_consume_iter ( ) {
1001
957
let hm = {
1002
958
let mut hm = HashMap : : new( ) ;
1003
959
@@ -1007,7 +963,7 @@ mod test_map {
1007
963
hm
1008
964
} ;
1009
965
1010
- let v = hm. consume_iter ( ) . collect :: < ~[ ( char , int ) ] > ( ) ;
966
+ let v = hm. consume ( ) . collect :: < ~[ ( char , int ) ] > ( ) ;
1011
967
assert ! ( [ ( 'a' , 1 ) , ( 'b' , 2 ) ] == v || [ ( 'b' , 2 ) , ( 'a' , 1 ) ] == v) ;
1012
968
}
1013
969
@@ -1293,7 +1249,7 @@ mod test_set {
1293
1249
}
1294
1250
1295
1251
#[ test]
1296
- fn test_consume_iter ( ) {
1252
+ fn test_consume ( ) {
1297
1253
let hs = {
1298
1254
let mut hs = HashSet : : new( ) ;
1299
1255
@@ -1303,7 +1259,7 @@ mod test_set {
1303
1259
hs
1304
1260
} ;
1305
1261
1306
- let v = hs. consume_iter ( ) . collect :: < ~[ char ] > ( ) ;
1262
+ let v = hs. consume ( ) . collect :: < ~[ char ] > ( ) ;
1307
1263
assert ! ( [ 'a' , 'b' ] == v || [ 'b' , 'a' ] == v) ;
1308
1264
}
1309
1265
}
0 commit comments