@@ -323,11 +323,13 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
323
323
/// assert_eq!(map.get(&2), Some(&20));
324
324
/// ```
325
325
#[ inline]
326
- pub fn pop_front ( & mut self ) -> Option < V > {
326
+ pub fn pop_front ( & mut self ) -> Option < ( K , V ) > {
327
327
if self . len ( ) > 0 {
328
328
let lru = unsafe { ( * self . head ) . prev } ;
329
329
self . detach ( lru) ;
330
- return self . map . remove ( & KeyRef { k : unsafe { & ( * lru) . key } } ) . map ( |e| e. value )
330
+ return self . map
331
+ . remove ( & KeyRef { k : unsafe { & ( * lru) . key } } )
332
+ . map ( |e| { let e = * e; ( e. key , e. value ) } )
331
333
}
332
334
None
333
335
}
@@ -341,13 +343,14 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
341
343
/// let mut map = LinkedHashMap::new();
342
344
/// map.insert(1, 10);
343
345
/// map.insert(2, 20);
344
- /// assert_eq!(map.front(), Some(&10 ));
346
+ /// assert_eq!(map.front(), Some((&1, &10) ));
345
347
/// ```
346
348
#[ inline]
347
- pub fn front ( & self ) -> Option < & V > {
349
+ pub fn front ( & self ) -> Option < ( & K , & V ) > {
348
350
if self . len ( ) > 0 {
349
351
let lru = unsafe { ( * self . head ) . prev } ;
350
- return self . map . get ( & KeyRef { k : unsafe { & ( * lru) . key } } ) . map ( |e| & e. value )
352
+ return self . map . get ( & KeyRef { k : unsafe { & ( * lru) . key } } )
353
+ . map ( |e| ( & e. key , & e. value ) )
351
354
}
352
355
None
353
356
}
@@ -366,11 +369,13 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
366
369
/// assert_eq!(map.get(&2), None);
367
370
/// ```
368
371
#[ inline]
369
- pub fn pop_back ( & mut self ) -> Option < V > {
372
+ pub fn pop_back ( & mut self ) -> Option < ( K , V ) > {
370
373
if self . len ( ) > 0 {
371
374
let mru = unsafe { ( * self . head ) . next } ;
372
375
self . detach ( mru) ;
373
- return self . map . remove ( & KeyRef { k : unsafe { & ( * mru) . key } } ) . map ( |e| e. value )
376
+ return self . map
377
+ . remove ( & KeyRef { k : unsafe { & ( * mru) . key } } )
378
+ . map ( |e| { let e = * e; ( e. key , e. value ) } )
374
379
}
375
380
None
376
381
}
@@ -384,13 +389,14 @@ impl<K: Hash + Eq, V, S: HashState> LinkedHashMap<K, V, S> {
384
389
/// let mut map = LinkedHashMap::new();
385
390
/// map.insert(1, 10);
386
391
/// map.insert(2, 20);
387
- /// assert_eq!(map.back(), Some(&20 ));
392
+ /// assert_eq!(map.back(), Some((&2, &20) ));
388
393
/// ```
389
394
#[ inline]
390
- pub fn back ( & mut self ) -> Option < & V > {
395
+ pub fn back ( & mut self ) -> Option < ( & K , & V ) > {
391
396
if self . len ( ) > 0 {
392
397
let mru = unsafe { ( * self . head ) . next } ;
393
- return self . map . get ( & KeyRef { k : unsafe { & ( * mru) . key } } ) . map ( |e| & e. value )
398
+ return self . map . get ( & KeyRef { k : unsafe { & ( * mru) . key } } )
399
+ . map ( |e| ( & e. key , & e. value ) )
394
400
}
395
401
None
396
402
}
@@ -871,21 +877,21 @@ mod tests {
871
877
map. insert ( 3 , 30 ) ;
872
878
map. insert ( 4 , 40 ) ;
873
879
map. insert ( 5 , 50 ) ;
874
- assert_eq ! ( map. pop_front( ) , Some ( 10 ) ) ;
880
+ assert_eq ! ( map. pop_front( ) , Some ( ( 1 , 10 ) ) ) ;
875
881
assert ! ( map. get( & 1 ) . is_none( ) ) ;
876
- assert_eq ! ( map. pop_back( ) , Some ( 50 ) ) ;
882
+ assert_eq ! ( map. pop_back( ) , Some ( ( 5 , 50 ) ) ) ;
877
883
assert ! ( map. get( & 5 ) . is_none( ) ) ;
878
884
map. insert ( 6 , 60 ) ;
879
885
map. insert ( 7 , 70 ) ;
880
886
map. insert ( 8 , 80 ) ;
881
- assert_eq ! ( map. pop_front( ) , Some ( 20 ) ) ;
887
+ assert_eq ! ( map. pop_front( ) , Some ( ( 2 , 20 ) ) ) ;
882
888
assert ! ( map. get( & 2 ) . is_none( ) ) ;
883
- assert_eq ! ( map. pop_back( ) , Some ( 80 ) ) ;
889
+ assert_eq ! ( map. pop_back( ) , Some ( ( 8 , 80 ) ) ) ;
884
890
assert ! ( map. get( & 8 ) . is_none( ) ) ;
885
891
map. insert ( 3 , 30 ) ;
886
- assert_eq ! ( map. pop_front( ) , Some ( 40 ) ) ;
892
+ assert_eq ! ( map. pop_front( ) , Some ( ( 4 , 40 ) ) ) ;
887
893
assert ! ( map. get( & 4 ) . is_none( ) ) ;
888
- assert_eq ! ( map. pop_back( ) , Some ( 30 ) ) ;
894
+ assert_eq ! ( map. pop_back( ) , Some ( ( 3 , 30 ) ) ) ;
889
895
assert ! ( map. get( & 3 ) . is_none( ) ) ;
890
896
}
891
897
0 commit comments