@@ -192,14 +192,22 @@ where
192192 }
193193 }
194194
195- fn get_map_mut ( & mut self , key : & T :: Key ) -> & mut AutoMap < T :: Key , T :: Value > {
195+ fn get_or_create_map_mut ( & mut self , key : & T :: Key ) -> & mut AutoMap < T :: Key , T :: Value > {
196196 self . check_threshold ( ) ;
197197 match self {
198198 InnerStorage :: Plain { map, .. } => map,
199199 InnerStorage :: Indexed { map, .. } => map. entry ( key. index ( ) ) . or_default ( ) ,
200200 }
201201 }
202202
203+ fn get_map_mut ( & mut self , key : & T :: Key ) -> Option < & mut AutoMap < T :: Key , T :: Value > > {
204+ self . check_threshold ( ) ;
205+ match self {
206+ InnerStorage :: Plain { map, .. } => Some ( map) ,
207+ InnerStorage :: Indexed { map, .. } => map. get_mut ( & key. index ( ) ) ,
208+ }
209+ }
210+
203211 fn get_map ( & self , key : & T :: Key ) -> Option < & AutoMap < T :: Key , T :: Value > > {
204212 match self {
205213 InnerStorage :: Plain { map, .. } => Some ( map) ,
@@ -216,7 +224,7 @@ where
216224
217225 pub fn add ( & mut self , item : T ) -> bool {
218226 let ( key, value) = item. into_key_and_value ( ) ;
219- match self . get_map_mut ( & key) . entry ( key) {
227+ match self . get_or_create_map_mut ( & key) . entry ( key) {
220228 Entry :: Occupied ( _) => false ,
221229 Entry :: Vacant ( e) => {
222230 e. insert ( value) ;
@@ -227,19 +235,19 @@ where
227235
228236 pub fn insert ( & mut self , item : T ) -> Option < T :: Value > {
229237 let ( key, value) = item. into_key_and_value ( ) ;
230- self . get_map_mut ( & key) . insert ( key, value)
238+ self . get_or_create_map_mut ( & key) . insert ( key, value)
231239 }
232240
233241 pub fn remove ( & mut self , key : & T :: Key ) -> Option < T :: Value > {
234- self . get_map_mut ( key) . remove ( key)
242+ self . get_map_mut ( key) . and_then ( |m| m . remove ( key) )
235243 }
236244
237245 pub fn get ( & self , key : & T :: Key ) -> Option < & T :: Value > {
238246 self . get_map ( key) . and_then ( |m| m. get ( key) )
239247 }
240248
241249 pub fn get_mut ( & mut self , key : & T :: Key ) -> Option < & mut T :: Value > {
242- self . get_map_mut ( key) . get_mut ( key)
250+ self . get_map_mut ( key) . and_then ( |m| m . get_mut ( key) )
243251 }
244252
245253 pub fn has_key ( & self , key : & T :: Key ) -> bool {
@@ -283,7 +291,7 @@ where
283291 key : & T :: Key ,
284292 update : impl FnOnce ( Option < T :: Value > ) -> Option < T :: Value > ,
285293 ) {
286- let map = self . get_map_mut ( key) ;
294+ let map = self . get_or_create_map_mut ( key) ;
287295 if let Some ( value) = map. get_mut ( key) {
288296 let v = take ( value) ;
289297 if let Some ( v) = update ( Some ( v) ) {
0 commit comments