@@ -204,7 +204,7 @@ class LRUCache : public LRUCacheInterface<K, V> {
204
204
void Remove (const K &key) override ;
205
205
206
206
/*
207
- * @brief Get the first key that $value = value
207
+ * @brief Get the first key that $value = value from lru tail to head
208
208
*
209
209
* @param[in] value
210
210
* @param[out] key
@@ -429,10 +429,7 @@ void LRUCache<K, V, KeyTraits, ValueTraits>::RemoveLocked(const K &key) {
429
429
template <typename K, typename V, typename KeyTraits, typename ValueTraits>
430
430
void LRUCache<K, V, KeyTraits, ValueTraits>::MoveToFront(
431
431
const typename std::list<Item>::iterator &elem) {
432
- Item duplica{elem->key , elem->value };
433
- ll_.erase (elem);
434
- ll_.push_front (duplica);
435
- cache_[*(duplica.key )] = ll_.begin ();
432
+ ll_.splice (ll_.begin (), ll_, elem);
436
433
}
437
434
438
435
template <typename K, typename V, typename KeyTraits, typename ValueTraits>
@@ -699,16 +696,8 @@ bool SglLRUCache<K, KeyTraits>::MoveBack(const K &key) {
699
696
if (iter == cache_.end ()) {
700
697
return false ;
701
698
}
702
- // delete the old value
703
- RemoveElement (iter->second );
704
- // put new value at tail
705
- ll_.push_back (key);
706
- cache_[key] = --ll_.end ();
707
- size_++;
708
- if (cacheMetrics_ != nullptr ) {
709
- cacheMetrics_->UpdateAddToCacheCount ();
710
- cacheMetrics_->UpdateAddToCacheBytes (KeyTraits::CountBytes (key));
711
- }
699
+ // move key to list tail
700
+ ll_.splice (ll_.end (), ll_, iter->second );
712
701
return true ;
713
702
}
714
703
@@ -806,10 +795,7 @@ void SglLRUCache<K, KeyTraits>::RemoveLocked(const K &key) {
806
795
template <typename K, typename KeyTraits>
807
796
void SglLRUCache<K, KeyTraits>::MoveToFront(
808
797
const typename std::list<K>::iterator &elem) {
809
- K tmp = *elem;
810
- ll_.erase (elem);
811
- ll_.emplace_front (tmp);
812
- cache_[tmp] = ll_.begin ();
798
+ ll_.splice (ll_.begin (), ll_, elem);
813
799
}
814
800
815
801
template <typename K, typename KeyTraits>
0 commit comments