42 for (
auto entryInfoMapPair : m_entryInfoMap) {
43 delete entryInfoMapPair.second;
48 PriorityFifoPolicy::doAfterInsert(EntryRef i)
55 PriorityFifoPolicy::doAfterRefresh(EntryRef i)
62 PriorityFifoPolicy::doBeforeErase(EntryRef i)
68 PriorityFifoPolicy::doBeforeUse(EntryRef i)
70 BOOST_ASSERT(m_entryInfoMap.find(i) != m_entryInfoMap.end());
74 PriorityFifoPolicy::evictEntries()
76 BOOST_ASSERT(this->
getCs() !=
nullptr);
84 PriorityFifoPolicy::evictOne()
101 this->detachQueue(i);
106 PriorityFifoPolicy::attachQueue(EntryRef i)
108 BOOST_ASSERT(m_entryInfoMap.find(i) == m_entryInfoMap.end());
110 EntryInfo* entryInfo =
new EntryInfo();
111 if (i->isUnsolicited()) {
114 else if (!i->isFresh()) {
119 entryInfo->moveStaleEventId =
getScheduler().schedule(i->getData().getFreshnessPeriod(),
120 [=] { moveToStaleQueue(i); });
123 Queue& queue = m_queues[entryInfo->queueType];
124 entryInfo->queueIt = queue.insert(queue.end(), i);
125 m_entryInfoMap[i] = entryInfo;
129 PriorityFifoPolicy::detachQueue(EntryRef i)
131 BOOST_ASSERT(m_entryInfoMap.find(i) != m_entryInfoMap.end());
133 EntryInfo* entryInfo = m_entryInfoMap[i];
135 entryInfo->moveStaleEventId.cancel();
138 m_queues[entryInfo->queueType].erase(entryInfo->queueIt);
139 m_entryInfoMap.erase(i);
144 PriorityFifoPolicy::moveToStaleQueue(EntryRef i)
146 BOOST_ASSERT(m_entryInfoMap.find(i) != m_entryInfoMap.end());
148 EntryInfo* entryInfo = m_entryInfoMap[i];
149 BOOST_ASSERT(entryInfo->queueType ==
QUEUE_FIFO);
151 m_queues[
QUEUE_FIFO].erase(entryInfo->queueIt);
155 entryInfo->queueIt = queue.insert(queue.end(), i);
156 m_entryInfoMap[i] = entryInfo;
Represents a CS replacement policy.
Cs * getCs() const noexcept
Returns a pointer to the associated CS instance.
Table::const_iterator EntryRef
A reference to a CS entry.
size_t getLimit() const noexcept
Gets hard limit (in number of entries).
signal::Signal< Policy, EntryRef > beforeEvict
Signal emitted when an entry is being evicted.
Priority First-In-First-Out (FIFO) replacement policy.
~PriorityFifoPolicy() final
static const std::string POLICY_NAME
#define NFD_REGISTER_CS_POLICY(P)
Registers a CS policy.
std::list< Policy::EntryRef > Queue
Scheduler & getScheduler()
Returns the global Scheduler instance for the calling thread.