ndn-cxx: NDN C++ Library 0.9.0-33-g832ea91d
Loading...
Searching...
No Matches
in-memory-storage-lru.hpp
Go to the documentation of this file.
1/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/*
3 * Copyright (c) 2013-2023 Regents of the University of California.
4 *
5 * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6 *
7 * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8 * terms of the GNU Lesser General Public License as published by the Free Software
9 * Foundation, either version 3 of the License, or (at your option) any later version.
10 *
11 * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13 * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14 *
15 * You should have received copies of the GNU General Public License and GNU Lesser
16 * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17 * <http://www.gnu.org/licenses/>.
18 *
19 * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20 */
21
22#ifndef NDN_CXX_IMS_IN_MEMORY_STORAGE_LRU_HPP
23#define NDN_CXX_IMS_IN_MEMORY_STORAGE_LRU_HPP
24
26
27#include <boost/multi_index_container.hpp>
28#include <boost/multi_index/hashed_index.hpp>
29#include <boost/multi_index/identity.hpp>
30#include <boost/multi_index/member.hpp>
31#include <boost/multi_index/sequenced_index.hpp>
32
33namespace ndn {
34
39{
40public:
41 explicit
42 InMemoryStorageLru(size_t limit = 16);
43
44 explicit
45 InMemoryStorageLru(boost::asio::io_context& ioCtx, size_t limit = 16);
46
52 bool
53 evictItem() override;
54
58 void
59 afterAccess(InMemoryStorageEntry* entry) override;
60
63 void
64 afterInsert(InMemoryStorageEntry* entry) override;
65
69 void
70 beforeErase(InMemoryStorageEntry* entry) override;
71
72private:
73 // multi_index_container to implement LRU
74 class byUsedTime;
75 class byEntity;
76
77 using CleanupIndex = boost::multi_index_container<
79 boost::multi_index::indexed_by<
80 // by Entry itself
81 boost::multi_index::hashed_unique<
82 boost::multi_index::tag<byEntity>,
83 boost::multi_index::identity<InMemoryStorageEntry*>
84 >,
85 // by last used time (LRU)
86 boost::multi_index::sequenced<
87 boost::multi_index::tag<byUsedTime>
88 >
89 >
90 >;
91
92 CleanupIndex m_cleanupIndex;
93};
94
95} // namespace ndn
96
97#endif // NDN_CXX_IMS_IN_MEMORY_STORAGE_LRU_HPP
Represents an in-memory storage entry.
Provides in-memory storage employing Least Recently Used (LRU) replacement policy.
void beforeErase(InMemoryStorageEntry *entry) override
Update the entry or other data structures before a entry is successfully erased, erase it from the cl...
void afterAccess(InMemoryStorageEntry *entry) override
Update the entry when the entry is returned by the find() function, update the last used time accordi...
bool evictItem() override
Removes one Data packet from in-memory storage based on LRU, i.e.
void afterInsert(InMemoryStorageEntry *entry) override
Update the entry after a entry is successfully inserted, add it to the cleanupIndex.
Represents in-memory storage.
#define NDN_CXX_PUBLIC_WITH_TESTS_ELSE_PROTECTED
Definition common.hpp:48
Definition data.cpp:25