NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: 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 #include <ndn-cxx/util/signal.hpp>
29 
30 namespace nfd {
31 namespace cs {
32 namespace lru {
33 
34 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:171
Copyright (c) 2014-2016, Regents of the University of California, Arizona Board of Regents...
signal::Signal< Policy, iterator > beforeEvict
emits when an entry is being evicted
Definition: cs-policy.hpp:81
Table::const_iterator iterator
Definition: cs-internal.hpp:41
represents a CS replacement policy
Definition: cs-policy.hpp:39
#define emitSignal(...)
(implementation detail)
Definition: signal-emit.hpp:76
Copyright (c) 2011-2015 Regents of the University of California.
Definition: ndn-common.hpp:40
size_t getLimit() const
gets hard limit (in number of entries)
Definition: cs-policy.hpp:183
static const std::string POLICY_NAME