NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
cs-policy-lru.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
26 #include "cs-policy-lru.hpp"
27 #include "cs.hpp"
28 
29 namespace nfd {
30 namespace cs {
31 namespace lru {
32 
33 const std::string LruPolicy::POLICY_NAME = "lru";
35 
37  : Policy(POLICY_NAME)
38 {
39 }
40 
41 void
42 LruPolicy::doAfterInsert(iterator i)
43 {
44  this->insertToQueue(i, true);
45  this->evictEntries();
46 }
47 
48 void
49 LruPolicy::doAfterRefresh(iterator i)
50 {
51  this->insertToQueue(i, false);
52 }
53 
54 void
55 LruPolicy::doBeforeErase(iterator i)
56 {
57  m_queue.get<1>().erase(i);
58 }
59 
60 void
61 LruPolicy::doBeforeUse(iterator i)
62 {
63  this->insertToQueue(i, false);
64 }
65 
66 void
67 LruPolicy::evictEntries()
68 {
69  BOOST_ASSERT(this->getCs() != nullptr);
70  while (this->getCs()->size() > this->getLimit()) {
71  BOOST_ASSERT(!m_queue.empty());
72  iterator i = m_queue.front();
73  m_queue.pop_front();
74  this->emitSignal(beforeEvict, i);
75  }
76 }
77 
78 void
79 LruPolicy::insertToQueue(iterator i, bool isNewEntry)
80 {
81  Queue::iterator it;
82  bool isNew = false;
83  // push_back only if iterator i does not exist
84  std::tie(it, isNew) = m_queue.push_back(i);
85 
86  BOOST_ASSERT(isNew == isNewEntry);
87  if (!isNewEntry) {
88  m_queue.relocate(m_queue.end(), it);
89  }
90 }
91 
92 } // namespace lru
93 } // namespace cs
94 } // namespace nfd
Cs * getCs() const
gets cs
Definition: cs-policy.hpp:199
signal::Signal< Policy, iterator > beforeEvict
emits when an entry is being evicted
Definition: cs-policy.hpp:102
#define emitSignal(...)
(implementation detail)
Definition: emit.hpp:76
Table::const_iterator iterator
Definition: cs-internal.hpp:41
represents a CS replacement policy
Definition: cs-policy.hpp:39
Copyright (c) 2011-2015 Regents of the University of California.
Definition: ndn-common.hpp:40
NFD_REGISTER_CS_POLICY(LruPolicy)
LRU cs replacement policy.
size_t getLimit() const
gets hard limit (in number of entries)
Definition: cs-policy.hpp:211
static const std::string POLICY_NAME