bool StrategyChoice::insert(const Name& prefix, const Name& strategyName) { Strategy* strategy = this->getStrategy(strategyName); if (strategy == nullptr) { NFD_LOG_ERROR("insert(" << prefix << "," << strategyName << ") strategy not installed"); return false; } shared_ptr<name_tree::Entry> nte = m_nameTree.lookup(prefix); shared_ptr<Entry> entry = nte->getStrategyChoiceEntry(); Strategy* oldStrategy = nullptr; if (entry != nullptr) { if (entry->getStrategy().getName() == strategy->getName()) { NFD_LOG_TRACE("insert(" << prefix << ") not changing " << strategy->getName()); return true; } oldStrategy = &entry->getStrategy(); NFD_LOG_TRACE("insert(" << prefix << ") changing from " << oldStrategy->getName() << " to " << strategy->getName()); } if (entry == nullptr) { oldStrategy = &this->findEffectiveStrategy(prefix); entry = make_shared<Entry>(prefix); nte->setStrategyChoiceEntry(entry); ++m_nItems; NFD_LOG_TRACE("insert(" << prefix << ") new entry " << strategy->getName()); } this->changeStrategy(*entry, *oldStrategy, *strategy); entry->setStrategy(*strategy); return true; }
void Engine::addStrategy(string name) { removeStrategy(name); Strategy* strategy = aiObjectContext->GetStrategy(name); if (strategy) { set<string> siblings = aiObjectContext->GetSiblingStrategy(name); for (set<string>::iterator i = siblings.begin(); i != siblings.end(); i++) removeStrategy(*i); LogAction("S:+%s", strategy->getName().c_str()); strategies[strategy->getName()] = strategy; } Init(); }