// $Id$
//
-// Copyright (C) 2007
-// Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
+// Copyright (C) 2007
+// Fraunhofer Institute for Open Communication Systems (FOKUS)
+// Competence Center NETwork research (NET), St. Augustin, GERMANY
// Stefan Bund <g0dil@berlios.de>
//
// This program is free software; you can redistribute it and/or modify
////////////////////////////////////////
// private members
-prefix_ senf::ppi::connector::PassiveInput & senf::ppi::module::PassiveJoin::newInput()
+prefix_ senf::ppi::connector::PassiveInput<> & senf::ppi::module::PassiveJoin::newInput()
{
- inputs_.push_back(new connector::PassiveInput());
- connector::PassiveInput & input (inputs_.back());
+ inputs_.push_back(new connector::PassiveInput<>());
+ connector::PassiveInput<> & input (inputs_.back());
noroute(input);
input.onRequest(boost::bind(&PassiveJoin::request,this,boost::ref(input)));
return input;
}
-prefix_ void senf::ppi::module::PassiveJoin::request(connector::PassiveInput & input)
+prefix_ void senf::ppi::module::PassiveJoin::request(connector::GenericPassiveInput & input)
{
output(input());
}
using boost::lambda::_1;
using boost::lambda::bind;
std::for_each(inputs_.begin(), inputs_.end(),
- bind(&connector::PassiveInput::throttle, _1));
+ bind(&connector::GenericPassiveInput::throttle, _1));
}
prefix_ void senf::ppi::module::PassiveJoin::onUnthrottle()
using boost::lambda::_1;
using boost::lambda::bind;
std::for_each(inputs_.begin(), inputs_.end(),
- bind(&connector::PassiveInput::unthrottle, _1));
+ bind(&connector::GenericPassiveInput::unthrottle, _1));
}
///////////////////////////////////////////////////////////////////////////
////////////////////////////////////////
// private members
-prefix_ senf::ppi::connector::ActiveInput & senf::ppi::module::PriorityJoin::newInput()
+prefix_ senf::ppi::connector::ActiveInput<> &
+senf::ppi::module::PriorityJoin::newInput(int priority)
{
- inputs_.push_back(new connector::ActiveInput());
- connector::ActiveInput & input (inputs_.back());
+ if (priority > int(inputs_.size()))
+ priority = inputs_.size();
+ else if (priority < 0) {
+ priority = inputs_.size() + priority + 1;
+ if (priority < 0)
+ priority = 0;
+ }
+
+ connector::ActiveInput<> & input (
+ *inputs_.insert(inputs_.begin()+priority, new connector::ActiveInput<>()));
noroute(input);
input.onThrottle(&PriorityJoin::onThrottle);
using boost::lambda::_1;
using boost::lambda::bind;
Inputs::iterator i (std::find_if(inputs_.begin(), inputs_.end(),
- ! bind(&connector::ActiveInput::throttled, _1)));
+ ! bind(&connector::GenericActiveInput::throttled, _1)));
if (i != inputs_.end())
output((*i)());
}
prefix_ void senf::ppi::module::PriorityJoin::onThrottle()
{
if (std::find_if(inputs_.begin(), inputs_.end(),
- ! bind(&connector::ActiveInput::throttled, _1)) == inputs_.end())
+ ! bind(&connector::GenericActiveInput::throttled, _1)) == inputs_.end())
output.throttle();
}