@@ -1783,19 +1783,16 @@ where
1783
1783
#[ cfg_attr( feature = "inline-more" , inline) ]
1784
1784
pub fn insert ( & mut self , k : K , v : V ) -> Option < V > {
1785
1785
let hash = make_insert_hash :: < K , S > ( & self . hash_builder , & k) ;
1786
- self . table
1787
- . reserve ( 1 , make_hasher :: < _ , V , S > ( & self . hash_builder ) ) ;
1788
-
1789
- unsafe {
1790
- let ( index, found) = self . table . find_potential ( hash, equivalent_key ( & k) ) ;
1791
-
1792
- let bucket = self . table . bucket ( index) ;
1793
-
1794
- if found {
1795
- Some ( mem:: replace ( & mut bucket. as_mut ( ) . 1 , v) )
1796
- } else {
1797
- self . table . mark_inserted ( index, hash) ;
1798
- bucket. write ( ( k, v) ) ;
1786
+ let hasher = make_hasher :: < _ , V , S > ( & self . hash_builder ) ;
1787
+ match self
1788
+ . table
1789
+ . find_or_find_insert_slot ( hash, equivalent_key ( & k) , hasher)
1790
+ {
1791
+ Ok ( bucket) => Some ( mem:: replace ( unsafe { & mut bucket. as_mut ( ) . 1 } , v) ) ,
1792
+ Err ( slot) => {
1793
+ unsafe {
1794
+ self . table . insert_in_slot ( hash, slot, ( k, v) ) ;
1795
+ }
1799
1796
None
1800
1797
}
1801
1798
}
@@ -2178,7 +2175,7 @@ impl<K, V, S, A: Allocator + Clone> HashMap<K, V, S, A> {
2178
2175
/// {
2179
2176
/// let raw_table = map.raw_table_mut();
2180
2177
/// match raw_table.find(hash, is_match) {
2181
- /// Some(bucket) => Some(unsafe { raw_table.remove(bucket) }),
2178
+ /// Some(bucket) => Some(unsafe { raw_table.remove(bucket).0 }),
2182
2179
/// None => None,
2183
2180
/// }
2184
2181
/// }
@@ -2801,7 +2798,7 @@ impl<K, V, A: Allocator + Clone> ExtractIfInner<'_, K, V, A> {
2801
2798
for item in & mut self . iter {
2802
2799
let & mut ( ref key, ref mut value) = item. as_mut ( ) ;
2803
2800
if f ( key, value) {
2804
- return Some ( self . table . remove ( item) ) ;
2801
+ return Some ( self . table . remove ( item) . 0 ) ;
2805
2802
}
2806
2803
}
2807
2804
}
@@ -3922,7 +3919,7 @@ impl<'a, K, V, S, A: Allocator + Clone> RawOccupiedEntryMut<'a, K, V, S, A> {
3922
3919
/// ```
3923
3920
#[ cfg_attr( feature = "inline-more" , inline) ]
3924
3921
pub fn remove_entry ( self ) -> ( K , V ) {
3925
- unsafe { self . table . remove ( self . elem ) }
3922
+ unsafe { self . table . remove ( self . elem ) . 0 }
3926
3923
}
3927
3924
3928
3925
/// Provides shared access to the key and owned access to the value of
@@ -5295,7 +5292,7 @@ impl<'a, K, V, S, A: Allocator + Clone> OccupiedEntry<'a, K, V, S, A> {
5295
5292
/// ```
5296
5293
#[ cfg_attr( feature = "inline-more" , inline) ]
5297
5294
pub fn remove_entry ( self ) -> ( K , V ) {
5298
- unsafe { self . table . table . remove ( self . elem ) }
5295
+ unsafe { self . table . table . remove ( self . elem ) . 0 }
5299
5296
}
5300
5297
5301
5298
/// Gets a reference to the value in the entry.
@@ -6017,7 +6014,7 @@ impl<'a, 'b, K, Q: ?Sized, V, S, A: Allocator + Clone> OccupiedEntryRef<'a, 'b,
6017
6014
/// ```
6018
6015
#[ cfg_attr( feature = "inline-more" , inline) ]
6019
6016
pub fn remove_entry ( self ) -> ( K , V ) {
6020
- unsafe { self . table . table . remove ( self . elem ) }
6017
+ unsafe { self . table . table . remove ( self . elem ) . 0 }
6021
6018
}
6022
6019
6023
6020
/// Gets a reference to the value in the entry.
@@ -8365,7 +8362,7 @@ mod test_map {
8365
8362
let e = map. table . find ( hash_value, |q| q. 0 . eq ( & i) ) ;
8366
8363
if let Some ( e) = e {
8367
8364
it. reflect_remove ( & e) ;
8368
- let t = map. table . remove ( e) ;
8365
+ let t = map. table . remove ( e) . 0 ;
8369
8366
removed. push ( t) ;
8370
8367
left -= 1 ;
8371
8368
} else {
0 commit comments