X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FJoins.cc;h=653149a53720906d73b08ba2151afd970388e230;hb=26dafbf86c16535110eeee3e6084111aa7b01e87;hp=4be6c97554fec2c1936a8e24f5f68a8f6c7c319a;hpb=914af680a37d303da51e3877972ca9bd68d6190b;p=senf.git diff --git a/PPI/Joins.cc b/PPI/Joins.cc index 4be6c97..653149a 100644 --- a/PPI/Joins.cc +++ b/PPI/Joins.cc @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -42,18 +42,13 @@ //////////////////////////////////////// // private members -prefix_ senf::ppi::connector::PassiveInput & senf::ppi::module::PassiveJoin::newInput() +prefix_ void senf::ppi::module::PassiveJoin::connectorSetup(connector::PassiveInput<> & conn) { - 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; + noroute(conn); + conn.onRequest(boost::bind(&PassiveJoin::request,this,boost::ref(conn))); } -prefix_ void senf::ppi::module::PassiveJoin::request(connector::PassiveInput & input) +prefix_ void senf::ppi::module::PassiveJoin::request(connector::GenericPassiveInput & input) { output(input()); } @@ -62,16 +57,16 @@ prefix_ void senf::ppi::module::PassiveJoin::onThrottle() { using boost::lambda::_1; using boost::lambda::bind; - std::for_each(inputs_.begin(), inputs_.end(), - bind(&connector::PassiveInput::throttle, _1)); + std::for_each(connectors().begin(), connectors().end(), + 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)); + std::for_each(connectors().begin(), connectors().end(), + bind(&connector::GenericPassiveInput::unthrottle, _1)); } /////////////////////////////////////////////////////////////////////////// @@ -80,32 +75,40 @@ prefix_ void senf::ppi::module::PassiveJoin::onUnthrottle() //////////////////////////////////////// // private members -prefix_ senf::ppi::connector::ActiveInput & senf::ppi::module::PriorityJoin::newInput() +prefix_ void +senf::ppi::module::PriorityJoin::connectorSetup(PriorityJoin::ConnectorType & conn, + int priority) { - inputs_.push_back(new connector::ActiveInput()); - connector::ActiveInput & 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::ActiveInput::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::ActiveInput::throttled, _1)) == inputs_.end()) + if (std::find_if(connectors().begin(), connectors().end(), + ! bind(&connector::GenericActiveInput::throttled, _1)) == connectors().end()) output.throttle(); }