ndn-cxx: NDN C++ Library 0.9.0-33-g832ea91d
Loading...
Searching...
No Matches
in-memory-storage-fifo.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_FIFO_HPP
23#define NDN_CXX_IMS_IN_MEMORY_STORAGE_FIFO_HPP
24
26
27#include <boost/multi_index_container.hpp>
28#include <boost/multi_index/hashed_index.hpp>
29#include <boost/multi_index/sequenced_index.hpp>
30
31namespace ndn {
32
37{
38public:
39 explicit
40 InMemoryStorageFifo(size_t limit = 16);
41
42 explicit
43 InMemoryStorageFifo(boost::asio::io_context& ioCtx, size_t limit = 16);
44
49 bool
50 evictItem() override;
51
54 void
55 afterInsert(InMemoryStorageEntry* entry) override;
56
60 void
61 beforeErase(InMemoryStorageEntry* entry) override;
62
63private:
64 // multi_index_container to implement FIFO
65 class byArrival;
66 class byEntity;
67
68 using CleanupIndex = boost::multi_index_container<
70 boost::multi_index::indexed_by<
71 // by Entry itself
72 boost::multi_index::hashed_unique<
73 boost::multi_index::tag<byEntity>,
74 boost::multi_index::identity<InMemoryStorageEntry*>
75 >,
76 // by arrival (FIFO)
77 boost::multi_index::sequenced<
78 boost::multi_index::tag<byArrival>
79 >
80 >
81 >;
82
83 CleanupIndex m_cleanupIndex;
84};
85
86} // namespace ndn
87
88#endif // NDN_CXX_IMS_IN_MEMORY_STORAGE_FIFO_HPP
Represents an in-memory storage entry.
Provides in-memory storage employing First-In-First-Out (FIFO) 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...
bool evictItem() override
Removes one Data packet from in-memory storage based on FIFO.
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