X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=PPI%2FJoins.cc;h=b8ce2d6763db2e95440f7d2915d3822b78efda6f;hb=a1fdb7bb122f0b05be809a922d4b7ef5e125fa67;hp=4be6c97554fec2c1936a8e24f5f68a8f6c7c319a;hpb=914af680a37d303da51e3877972ca9bd68d6190b;p=senf.git diff --git a/PPI/Joins.cc b/PPI/Joins.cc index 4be6c97..b8ce2d6 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,10 +42,10 @@ //////////////////////////////////////// // 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))); @@ -53,7 +53,7 @@ prefix_ senf::ppi::connector::PassiveInput & senf::ppi::module::PassiveJoin::new return input; } -prefix_ void senf::ppi::module::PassiveJoin::request(connector::PassiveInput & input) +prefix_ void senf::ppi::module::PassiveJoin::request(connector::GenericPassiveInput & input) { output(input()); } @@ -63,7 +63,7 @@ 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)); + bind(&connector::GenericPassiveInput::throttle, _1)); } prefix_ void senf::ppi::module::PassiveJoin::onUnthrottle() @@ -71,7 +71,7 @@ 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)); } /////////////////////////////////////////////////////////////////////////// @@ -80,10 +80,19 @@ prefix_ void senf::ppi::module::PassiveJoin::onUnthrottle() //////////////////////////////////////// // 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); @@ -97,7 +106,7 @@ 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))); + ! bind(&connector::GenericActiveInput::throttled, _1))); if (i != inputs_.end()) output((*i)()); } @@ -105,7 +114,7 @@ prefix_ void senf::ppi::module::PriorityJoin::request() 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(); }