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)
48 auto pair = m_CacheItemsMap.emplace(element, m_CacheItemsList.end());
52 m_CacheItemsList.splice(m_CacheItemsList.begin(), m_CacheItemsList, pair.first->second);
57 m_CacheItemsList.push_front(element);
58 pair.first->second = m_CacheItemsList.begin();
60 if (m_CacheItemsMap.size() > m_MaxSize)
62 auto& item = m_CacheItemsList.back();
64 if (deletedValue !=
nullptr)
66 #if __cplusplus > 199711L || _MSC_VER >= 1800
67 *deletedValue = std::move(item);
72 m_CacheItemsMap.erase(item);
73 m_CacheItemsList.pop_back();
84 return m_CacheItemsList.front();
91 return m_CacheItemsList.back();
98 MapIterator iter = m_CacheItemsMap.find(element);
99 if (iter == m_CacheItemsMap.end())
104 m_CacheItemsList.erase(iter->second);
105 m_CacheItemsMap.erase(iter);
117 return m_CacheItemsMap.size();
121 std::list<T> m_CacheItemsList;
122 std::unordered_map<T, ListIterator> m_CacheItemsMap;
size_t getMaxSize() const
Definition: LRUList.h:109
const T & getLRUElement() const
Definition: LRUList.h:89
int put(const T &element, T *deletedValue=nullptr)
Definition: LRUList.h:44
const T & getMRUElement() const
Definition: LRUList.h:82
void eraseElement(const T &element)
Definition: LRUList.h:96
LRUList(std::size_t maxSize)
Definition: LRUList.h:31
size_t getSize() const
Definition: LRUList.h:115
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19