PPI: Missing commit
[senf.git] / PPI / Joins.cc
index 3f15955..b8ce2d6 100644 (file)
@@ -1,8 +1,8 @@
 // $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
@@ -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);