// $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::GenericPassiveInput & senf::ppi::module::PassiveJoin::newInput()
+prefix_ void senf::ppi::module::PassiveJoin::connectorSetup(connector::PassiveInput<> & conn)
{
- inputs_.push_back(new connector::GenericPassiveInput());
- connector::GenericPassiveInput & input (inputs_.back());
-
- noroute(input);
- input.onRequest(boost::bind(&PassiveJoin::request,this,boost::ref(input)));
-
- return input;
+ noroute(conn);
+ conn.onRequest(boost::bind(&PassiveJoin::request,this,boost::ref(conn)));
}
prefix_ void senf::ppi::module::PassiveJoin::request(connector::GenericPassiveInput & input)
{
using boost::lambda::_1;
using boost::lambda::bind;
- std::for_each(inputs_.begin(), inputs_.end(),
+ std::for_each(connectors().begin(), connectors().end(),
bind(&connector::GenericPassiveInput::throttle, _1));
}
{
using boost::lambda::_1;
using boost::lambda::bind;
- std::for_each(inputs_.begin(), inputs_.end(),
+ std::for_each(connectors().begin(), connectors().end(),
bind(&connector::GenericPassiveInput::unthrottle, _1));
}
////////////////////////////////////////
// private members
-prefix_ senf::ppi::connector::GenericActiveInput & senf::ppi::module::PriorityJoin::newInput()
+prefix_ void
+senf::ppi::module::PriorityJoin::connectorSetup(PriorityJoin::ConnectorType & conn,
+ int priority)
{
- inputs_.push_back(new connector::GenericActiveInput());
- connector::GenericActiveInput & input (inputs_.back());
-
- noroute(input);
- input.onThrottle(&PriorityJoin::onThrottle);
- input.onUnthrottle(&PriorityJoin::onUnthrottle);
-
- return input;
+ noroute(conn);
+ conn.onThrottle(&PriorityJoin::onThrottle);
+ conn.onUnthrottle(&PriorityJoin::onUnthrottle);
+
+ if (priority < 0) {
+ priority = connectors().size() + priority;
+ if (priority < 0)
+ priority = 0;
+ }
+ if (priority >= int(connectors().size())-1)
+ return;
+
+ connectors().insert(connectors().begin()+priority, connectors().pop_back().release());
}
prefix_ void senf::ppi::module::PriorityJoin::request()
{
using boost::lambda::_1;
using boost::lambda::bind;
- Inputs::iterator i (std::find_if(inputs_.begin(), inputs_.end(),
- ! bind(&connector::GenericActiveInput::throttled, _1)));
- if (i != inputs_.end())
+ PriorityJoin::ContainerType::iterator i (
+ std::find_if(connectors().begin(), connectors().end(),
+ ! bind(&connector::GenericActiveInput::throttled, _1)));
+ if (i != connectors().end())
output((*i)());
}
prefix_ void senf::ppi::module::PriorityJoin::onThrottle()
{
- if (std::find_if(inputs_.begin(), inputs_.end(),
- ! bind(&connector::GenericActiveInput::throttled, _1)) == inputs_.end())
+ if (std::find_if(connectors().begin(), connectors().end(),
+ ! bind(&connector::GenericActiveInput::throttled, _1)) == connectors().end())
output.throttle();
}