5 #include <unordered_map>
7 #if __cplusplus > 199711L || _MSC_VER >= 1800
26 using ListIterator =
typename std::list<T>::iterator;
27 using MapIterator =
typename std::unordered_map<T, ListIterator>::iterator;
31 explicit LRUList(std::size_t maxSize) : m_MaxSize(maxSize)
44 int put(
const T& element, T* deletedValue =
nullptr)
46 m_CacheItemsList.push_front(element);
50 std::pair<MapIterator, bool> pair =
51 m_CacheItemsMap.insert(std::make_pair(element, m_CacheItemsList.begin()));
54 m_CacheItemsList.erase(pair.first->second);
55 pair.first->second = m_CacheItemsList.begin();
58 if (m_CacheItemsMap.size() > m_MaxSize)
60 ListIterator lruIter = m_CacheItemsList.end();
63 if (deletedValue !=
nullptr)
65 #if __cplusplus > 199711L || _MSC_VER >= 1800
66 *deletedValue = std::move(*lruIter);
68 *deletedValue = *lruIter;
71 m_CacheItemsMap.erase(*lruIter);
72 m_CacheItemsList.erase(lruIter);
83 return m_CacheItemsList.front();
90 return m_CacheItemsList.back();
97 MapIterator iter = m_CacheItemsMap.find(element);
98 if (iter == m_CacheItemsMap.end())
103 m_CacheItemsList.erase(iter->second);
104 m_CacheItemsMap.erase(iter);
116 return m_CacheItemsMap.size();
120 std::list<T> m_CacheItemsList;
121 std::unordered_map<T, ListIterator> m_CacheItemsMap;
size_t getMaxSize() const
Definition: LRUList.h:108
const T & getLRUElement() const
Definition: LRUList.h:88
int put(const T &element, T *deletedValue=nullptr)
Definition: LRUList.h:44
const T & getMRUElement() const
Definition: LRUList.h:81
void eraseElement(const T &element)
Definition: LRUList.h:95
LRUList(std::size_t maxSize)
Definition: LRUList.h:31
size_t getSize() const
Definition: LRUList.h:114
The main namespace for the PcapPlusPlus lib.