예제 #1
0
typename std::enable_if<std::is_base_of<fw::Strategy, S>::value, S&>::type
install(Forwarder& forwarder, Args&&... args)
{
    auto strategy = make_unique<S>(ref(forwarder), std::forward<Args>(args)...);
    fw::Strategy* installed = forwarder.getStrategyChoice().install(std::move(strategy)).second;
    return dynamic_cast<S&>(*installed);
}
예제 #2
0
typename std::enable_if<std::is_base_of<fw::Strategy, S>::value, S&>::type
choose(Forwarder& forwarder, const Name& prefix, Args&&... args)
{
    S& strategy = install<S>(forwarder, std::forward<Args>(args)...);
    forwarder.getStrategyChoice().insert(prefix, strategy.getName());
    return strategy;
}
예제 #3
0
typename std::enable_if<std::is_base_of<fw::Strategy, S>::value, S&>::type
choose(Forwarder& forwarder, const Name& prefix = "/",
       const Name& instanceName = S::getStrategyName())
{
  StrategyChoice& sc = forwarder.getStrategyChoice();
  auto insertRes = sc.insert(prefix, instanceName);
  if (!insertRes) {
    BOOST_THROW_EXCEPTION(std::invalid_argument(boost::lexical_cast<std::string>(insertRes)));
  }
  return dynamic_cast<S&>(sc.findEffectiveStrategy(prefix));
}
예제 #4
0
MadmStrategy::MadmStrategy(Forwarder& forwarder, const Name& name) :
    Strategy(forwarder, name), ownStrategyChoice(forwarder.getStrategyChoice())
{
}