blob: c7aa7da69750c96dcf4eaa9797aece84a8cdb915 [file] [log] [blame]
Junxiao Shie5e2fce2014-02-10 20:01:53 -07001/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2/**
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -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 *
10 * This file is part of NFD (Named Data Networking Forwarding Daemon).
11 * See AUTHORS.md for complete list of NFD authors and contributors.
12 *
13 * NFD is free software: you can redistribute it and/or modify it under the terms
14 * of the GNU General Public License as published by the Free Software Foundation,
15 * either version 3 of the License, or (at your option) any later version.
16 *
17 * NFD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
18 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
19 * PURPOSE. See the GNU General Public License for more details.
20 *
21 * You should have received a copy of the GNU General Public License along with
22 * NFD, e.g., in COPYING.md file. If not, see <http://www.gnu.org/licenses/>.
23 **/
Junxiao Shie5e2fce2014-02-10 20:01:53 -070024
Alexander Afanasyev613e2a92014-04-15 13:36:58 -070025#ifndef NFD_DAEMON_TABLE_STRATEGY_INFO_HOST_HPP
26#define NFD_DAEMON_TABLE_STRATEGY_INFO_HOST_HPP
Junxiao Shie5e2fce2014-02-10 20:01:53 -070027
28#include "fw/strategy-info.hpp"
29
30namespace nfd {
31
32/** \class StrategyInfoHost
33 * \brief base class for an entity onto which StrategyInfo may be placed
34 */
35class StrategyInfoHost
36{
37public:
38 template<typename T>
39 void
40 setStrategyInfo(shared_ptr<T> strategyInfo);
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070041
Junxiao Shie5e2fce2014-02-10 20:01:53 -070042 template<typename T>
43 shared_ptr<T>
Junxiao Shid938a6b2014-05-11 23:40:29 -070044 getStrategyInfo() const;
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070045
Junxiao Shi0b5fbbb2014-02-20 15:54:03 -070046 template<typename T>
47 shared_ptr<T>
48 getOrCreateStrategyInfo();
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070049
Junxiao Shi0b5fbbb2014-02-20 15:54:03 -070050 template<typename T, typename T1>
51 shared_ptr<T>
52 getOrCreateStrategyInfo(T1& a1);
Alexander Afanasyev9bcbc7c2014-04-06 19:37:37 -070053
Junxiao Shie5e2fce2014-02-10 20:01:53 -070054 void
55 clearStrategyInfo();
56
57private:
58 shared_ptr<fw::StrategyInfo> m_strategyInfo;
59};
60
61
62template<typename T>
63void
64StrategyInfoHost::setStrategyInfo(shared_ptr<T> strategyInfo)
65{
66 m_strategyInfo = strategyInfo;
67}
68
69template<typename T>
70shared_ptr<T>
Junxiao Shid938a6b2014-05-11 23:40:29 -070071StrategyInfoHost::getStrategyInfo() const
Junxiao Shie5e2fce2014-02-10 20:01:53 -070072{
73 return static_pointer_cast<T, fw::StrategyInfo>(m_strategyInfo);
74}
75
Junxiao Shi0b5fbbb2014-02-20 15:54:03 -070076template<typename T>
77shared_ptr<T>
78StrategyInfoHost::getOrCreateStrategyInfo()
79{
80 shared_ptr<T> info = this->getStrategyInfo<T>();
81 if (!static_cast<bool>(info)) {
82 info = make_shared<T>();
83 this->setStrategyInfo(info);
84 }
85 return info;
86}
87
88template<typename T, typename T1>
89shared_ptr<T>
90StrategyInfoHost::getOrCreateStrategyInfo(T1& a1)
91{
92 shared_ptr<T> info = this->getStrategyInfo<T>();
93 if (!static_cast<bool>(info)) {
Alexander Afanasyevf6980282014-05-13 18:28:40 -070094 info = make_shared<T>(ref(a1));
Junxiao Shi0b5fbbb2014-02-20 15:54:03 -070095 this->setStrategyInfo(info);
96 }
97 return info;
98}
99
Junxiao Shie5e2fce2014-02-10 20:01:53 -0700100} // namespace nfd
101
Alexander Afanasyev613e2a92014-04-15 13:36:58 -0700102#endif // NFD_DAEMON_TABLE_STRATEGY_INFO_HOST_HPP