34 using strategy_choice::Entry;
 
   40   : m_nameTree(nameTree)
 
   43   this->setDefaultStrategy(defaultStrategy);
 
   50     return m_strategyInstances.count(strategyName) > 0;
 
   53     return static_cast<bool>(this->getStrategy(strategyName));
 
   60   BOOST_ASSERT(static_cast<bool>(strategy));
 
   61   const Name& strategyName = strategy->getName();
 
   64     NFD_LOG_ERROR(
"install(" << strategyName << 
") duplicate strategyName");
 
   68   m_strategyInstances[strategyName] = strategy;
 
   73 StrategyChoice::getStrategy(
const Name& strategyName)
 const 
   76   for (
auto it = m_strategyInstances.lower_bound(strategyName);
 
   77        it != m_strategyInstances.end() && strategyName.isPrefixOf(it->first); ++it) {
 
   78     switch (it->first.size() - strategyName.size()) {
 
   80       return it->second.get();
 
   82       candidate = it->second.get();
 
   92   Strategy* strategy = this->getStrategy(strategyName);
 
   93   if (strategy == 
nullptr) {
 
   94     NFD_LOG_ERROR(
"insert(" << prefix << 
"," << strategyName << 
") strategy not installed");
 
   98   shared_ptr<name_tree::Entry> nte = m_nameTree.
lookup(prefix);
 
   99   shared_ptr<Entry> entry = nte->getStrategyChoiceEntry();
 
  101   if (static_cast<bool>(entry)) {
 
  102     if (entry->getStrategy().getName() == strategy->getName()) {
 
  103       NFD_LOG_TRACE(
"insert(" << prefix << 
") not changing " << strategy->getName());
 
  106     oldStrategy = &entry->getStrategy();
 
  107     NFD_LOG_TRACE(
"insert(" << prefix << 
") changing from " << oldStrategy->getName() <<
 
  108                   " to " << strategy->getName());
 
  111   if (!static_cast<bool>(entry)) {
 
  113     entry = make_shared<Entry>(prefix);
 
  114     nte->setStrategyChoiceEntry(entry);
 
  116     NFD_LOG_TRACE(
"insert(" << prefix << 
") new entry " << strategy->getName());
 
  119   this->changeStrategy(*entry, *oldStrategy, *strategy);
 
  120   entry->setStrategy(*strategy);
 
  127   BOOST_ASSERT(prefix.size() > 0);
 
  129   shared_ptr<name_tree::Entry> nte = m_nameTree.
findExactMatch(prefix);
 
  130   if (!static_cast<bool>(nte)) {
 
  134   shared_ptr<Entry> entry = nte->getStrategyChoiceEntry();
 
  135   if (!static_cast<bool>(entry)) {
 
  139   Strategy& oldStrategy = entry->getStrategy();
 
  142   this->changeStrategy(*entry, oldStrategy, parentStrategy);
 
  144   nte->setStrategyChoiceEntry(shared_ptr<Entry>());
 
  149 std::pair<bool, Name>
 
  152   shared_ptr<name_tree::Entry> nte = m_nameTree.
findExactMatch(prefix);
 
  153   if (!static_cast<bool>(nte)) {
 
  154     return { 
false, 
Name() };
 
  157   shared_ptr<Entry> entry = nte->getStrategyChoiceEntry();
 
  158   if (!static_cast<bool>(entry)) {
 
  159     return { 
false, 
Name() };
 
  162   return { 
true, entry->getStrategy().getName() };
 
  173   BOOST_ASSERT(static_cast<bool>(nte));
 
  174   return nte->getStrategyChoiceEntry()->getStrategy();
 
  180   shared_ptr<strategy_choice::Entry> entry = nte->getStrategyChoiceEntry();
 
  181   if (static_cast<bool>(entry))
 
  182     return entry->getStrategy();
 
  189   BOOST_ASSERT(static_cast<bool>(nte));
 
  190   return nte->getStrategyChoiceEntry()->getStrategy();
 
  196   shared_ptr<name_tree::Entry> nte = m_nameTree.
get(pitEntry);
 
  198   BOOST_ASSERT(static_cast<bool>(nte));
 
  205   shared_ptr<name_tree::Entry> nte = m_nameTree.
get(measurementsEntry);
 
  207   BOOST_ASSERT(static_cast<bool>(nte));
 
  212 StrategyChoice::setDefaultStrategy(shared_ptr<Strategy> strategy)
 
  218   shared_ptr<name_tree::Entry> nte = m_nameTree.
lookup(
Name());
 
  219   shared_ptr<Entry> entry = make_shared<Entry>(
Name());
 
  222   NFD_LOG_INFO(
"setDefaultStrategy " << strategy->getName());
 
  224   entry->setStrategy(*strategy);
 
  232   for (
const shared_ptr<pit::Entry>& pitEntry : nte.
getPitEntries()) {
 
  233     pitEntry->clearStrategyInfo();
 
  234     for (
const pit::InRecord& inRecord : pitEntry->getInRecords()) {
 
  237     for (
const pit::OutRecord& outRecord : pitEntry->getOutRecords()) {
 
  247 StrategyChoice::changeStrategy(strategy_choice::Entry& entry,
 
  251   if (&oldStrategy == &newStrategy) {
 
  255   NFD_LOG_INFO(
"changeStrategy(" << entry.getPrefix() << 
")" 
  256                << 
" from " << oldStrategy.getName()
 
  257                << 
" to " << newStrategy.getName());
 
  261   const name_tree::Entry* rootNte = m_nameTree.
get(entry).get();
 
  263     [&rootNte] (
const name_tree::Entry& nte) -> std::pair<bool, bool> {
 
  264       if (&nte == rootNte) {
 
  267       if (static_cast<bool>(nte.getStrategyChoiceEntry())) {
 
  268         return {
false, 
false};
 
  272   for (
const name_tree::Entry& nte : ntChanged) {
 
  277 StrategyChoice::const_iterator
 
boost::iterator_range< const_iterator > partialEnumerate(const Name &prefix, const name_tree::EntrySubTreeSelector &entrySubTreeSelector=name_tree::AnyEntrySubTree()) const 
Enumerate all entries under a prefix, optionally filtered by an EntrySubTreeSelector. 
 
fw::Strategy & findEffectiveStrategy(const Name &prefix) const 
get effective strategy for prefix 
 
const std::vector< shared_ptr< pit::Entry > > & getPitEntries() const 
 
bool eraseEntryIfEmpty(shared_ptr< name_tree::Entry > entry)
Delete a Name Tree Entry if this entry is empty. 
 
StrategyChoice(NameTree &nameTree, shared_ptr< fw::Strategy > defaultStrategy)
 
bool insert(const Name &prefix, const Name &strategyName)
set strategy of prefix to be strategyName 
 
contains information about an Interest from an incoming face 
 
shared_ptr< name_tree::Entry > get(const fib::Entry &fibEntry) const 
get NameTree entry from attached FIB entry 
 
#define NFD_LOG_ERROR(expression)
 
shared_ptr< name_tree::Entry > findLongestPrefixMatch(const Name &prefix, const name_tree::EntrySelector &entrySelector=name_tree::AnyEntry()) const 
Longest prefix matching for the given name. 
 
void setStrategyChoiceEntry(shared_ptr< strategy_choice::Entry > strategyChoiceEntry)
 
std::pair< bool, Name > get(const Name &prefix) const 
get strategy Name of prefix 
 
represents a Measurements entry 
 
#define NFD_LOG_INFO(expression)
 
void erase(const Name &prefix)
make prefix to inherit strategy from its parent 
 
shared_ptr< strategy_choice::Entry > getStrategyChoiceEntry() const 
 
bool install(shared_ptr< fw::Strategy > strategy)
install a strategy 
 
shared_ptr< name_tree::Entry > lookup(const Name &prefix)
Look for the Name Tree Entry that contains this name prefix. 
 
bool hasStrategy(const Name &strategyName, bool isExact=false) const 
determines if a strategy is installed 
 
const_iterator begin() const 
 
represents a forwarding strategy 
 
const Name & getPrefix() const 
 
#define NFD_LOG_INIT(name)
 
#define NFD_LOG_TRACE(expression)
 
contains information about an Interest toward an outgoing face 
 
shared_ptr< name_tree::Entry > findExactMatch(const Name &prefix) const 
Exact match lookup for the given name prefix. 
 
shared_ptr< measurements::Entry > getMeasurementsEntry() const 
 
static void clearStrategyInfo(const name_tree::Entry &nte)
 
boost::iterator_range< const_iterator > fullEnumerate(const name_tree::EntrySelector &entrySelector=name_tree::AnyEntry()) const 
Enumerate all entries, optionally filtered by an EntrySelector.