blob: 872cff2b3fc464e2e8165b771c2f09a7834768a5 [file] [log] [blame]
Junxiao Shidbe71732014-02-21 22:23:28 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Junxiao Shiee5a4442014-07-27 17:13:43 -07003 * Copyright (c) 2014, Regents of the University of California,
4 * Arizona Board of Regents,
5 * Colorado State University,
6 * University Pierre & Marie Curie, Sorbonne University,
7 * Washington University in St. Louis,
8 * Beijing Institute of Technology,
9 * The University of Memphis
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070010 *
11 * This file is part of NFD (Named Data Networking Forwarding Daemon).
12 * See AUTHORS.md for complete list of NFD authors and contributors.
13 *
14 * NFD is free software: you can redistribute it and/or modify it under the terms
15 * of the GNU General Public License as published by the Free Software Foundation,
16 * either version 3 of the License, or (at your option) any later version.
17 *
18 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
19 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
20 * PURPOSE. See the GNU General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License along with
23 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
Junxiao Shiee5a4442014-07-27 17:13:43 -070024 */
Junxiao Shidbe71732014-02-21 22:23:28 -070025
Alexander Afanasyev613e2a92014-04-15 13:36:58 -070026#ifndef NFD_DAEMON_TABLE_MEASUREMENTS_ACCESSOR_HPP
27#define NFD_DAEMON_TABLE_MEASUREMENTS_ACCESSOR_HPP
Junxiao Shidbe71732014-02-21 22:23:28 -070028
29#include "measurements.hpp"
Junxiao Shi7bb01512014-03-05 21:34:09 -070030#include "strategy-choice.hpp"
Junxiao Shidbe71732014-02-21 22:23:28 -070031
32namespace nfd {
33
34namespace fw {
35class Strategy;
36}
37
38/** \brief allows Strategy to access portion of Measurements table under its namespace
39 */
40class MeasurementsAccessor : noncopyable
41{
42public:
Junxiao Shi7bb01512014-03-05 21:34:09 -070043 MeasurementsAccessor(Measurements& measurements, StrategyChoice& strategyChoice,
44 fw::Strategy* strategy);
Junxiao Shidbe71732014-02-21 22:23:28 -070045
46 ~MeasurementsAccessor();
47
Junxiao Shie368d992014-12-02 23:44:31 -070048 /** \brief find or insert a Measurements entry for name
49 */
Junxiao Shidbe71732014-02-21 22:23:28 -070050 shared_ptr<measurements::Entry>
51 get(const Name& name);
52
Junxiao Shie368d992014-12-02 23:44:31 -070053 /** \brief find or insert a Measurements entry for fibEntry->getPrefix()
54 */
Junxiao Shidbe71732014-02-21 22:23:28 -070055 shared_ptr<measurements::Entry>
56 get(const fib::Entry& fibEntry);
57
Junxiao Shie368d992014-12-02 23:44:31 -070058 /** \brief find or insert a Measurements entry for pitEntry->getName()
59 */
Junxiao Shidbe71732014-02-21 22:23:28 -070060 shared_ptr<measurements::Entry>
61 get(const pit::Entry& pitEntry);
62
63 /** \brief find or insert a Measurements entry for child's parent
Junxiao Shie368d992014-12-02 23:44:31 -070064 * \retval nullptr if child is the root entry
Junxiao Shidbe71732014-02-21 22:23:28 -070065 */
66 shared_ptr<measurements::Entry>
Junxiao Shie368d992014-12-02 23:44:31 -070067 getParent(const measurements::Entry& child);
Junxiao Shidbe71732014-02-21 22:23:28 -070068
Junxiao Shidbe71732014-02-21 22:23:28 -070069 /** \brief extend lifetime of an entry
70 *
71 * The entry will be kept until at least now()+lifetime.
72 */
73 void
Junxiao Shie368d992014-12-02 23:44:31 -070074 extendLifetime(measurements::Entry& entry, const time::nanoseconds& lifetime);
Junxiao Shidbe71732014-02-21 22:23:28 -070075
76private:
77 /** \brief perform access control to Measurements entry
Junxiao Shie368d992014-12-02 23:44:31 -070078 * \return entry if strategy has access to namespace, otherwise nullptr
Junxiao Shidbe71732014-02-21 22:23:28 -070079 */
80 shared_ptr<measurements::Entry>
81 filter(const shared_ptr<measurements::Entry>& entry);
82
83private:
84 Measurements& m_measurements;
Junxiao Shi7bb01512014-03-05 21:34:09 -070085 StrategyChoice& m_strategyChoice;
Junxiao Shidbe71732014-02-21 22:23:28 -070086 fw::Strategy* m_strategy;
87};
88
89inline shared_ptr<measurements::Entry>
90MeasurementsAccessor::get(const Name& name)
91{
92 return this->filter(m_measurements.get(name));
93}
94
95inline shared_ptr<measurements::Entry>
96MeasurementsAccessor::get(const fib::Entry& fibEntry)
97{
Junxiao Shi7bb01512014-03-05 21:34:09 -070098 return this->filter(m_measurements.get(fibEntry));
Junxiao Shidbe71732014-02-21 22:23:28 -070099}
100
101inline shared_ptr<measurements::Entry>
102MeasurementsAccessor::get(const pit::Entry& pitEntry)
103{
104 return this->filter(m_measurements.get(pitEntry));
105}
106
107inline shared_ptr<measurements::Entry>
Junxiao Shie368d992014-12-02 23:44:31 -0700108MeasurementsAccessor::getParent(const measurements::Entry& child)
Junxiao Shidbe71732014-02-21 22:23:28 -0700109{
110 return this->filter(m_measurements.getParent(child));
111}
112
Junxiao Shidbe71732014-02-21 22:23:28 -0700113inline void
Junxiao Shie368d992014-12-02 23:44:31 -0700114MeasurementsAccessor::extendLifetime(measurements::Entry& entry,
Junxiao Shiee5a4442014-07-27 17:13:43 -0700115 const time::nanoseconds& lifetime)
Junxiao Shidbe71732014-02-21 22:23:28 -0700116{
117 m_measurements.extendLifetime(entry, lifetime);
118}
119
120} // namespace nfd
121
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700122#endif // NFD_DAEMON_TABLE_MEASUREMENTS_ACCESSOR_HPP