// $Id$
//
// Copyright (C) 2007
-// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
-// Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
+// 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
\brief DebugModules inline non-template implementation */
// Custom includes
+#include "Setup.hh"
#define prefix_ inline
///////////////////////////////cci.p///////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::module::debug::ActivePacketSource
+// senf::ppi::module::debug::ActiveSource
-prefix_ senf::ppi::module::debug::ActivePacketSource::ActivePacketSource()
+prefix_ senf::ppi::module::debug::ActiveSource::ActiveSource()
{
noroute(output);
}
-prefix_ void senf::ppi::module::debug::ActivePacketSource::submit(Packet packet)
+prefix_ void senf::ppi::module::debug::ActiveSource::submit(Packet packet)
{
output(packet);
}
+prefix_ bool senf::ppi::module::debug::ActiveSource::boolean_test()
+ const
+{
+ return output;
+}
+
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::module::debug::PassivePacketSource
+// senf::ppi::module::debug::PassiveSource
-prefix_ senf::ppi::module::debug::PassivePacketSource::PassivePacketSource()
+prefix_ senf::ppi::module::debug::PassiveSource::PassiveSource()
{
noroute(output);
- output.onRequest(&PassivePacketSource::request);
+ output.onRequest(&PassiveSource::request);
+}
+
+prefix_ void senf::ppi::module::debug::PassiveSource::throttle()
+{
+ output.throttle();
+}
+
+prefix_ void senf::ppi::module::debug::PassiveSource::unthrottle()
+{
+ output.unthrottle();
}
-prefix_ void senf::ppi::module::debug::PassivePacketSource::submit(Packet packet)
+prefix_ void senf::ppi::module::debug::PassiveSource::submit(Packet packet)
{
packets_.push_back(packet);
+ output.unthrottle();
}
-prefix_ bool senf::ppi::module::debug::PassivePacketSource::empty()
+prefix_ bool senf::ppi::module::debug::PassiveSource::empty()
{
return packets_.empty();
}
-prefix_ senf::ppi::module::debug::PassivePacketSource::size_type
-senf::ppi::module::debug::PassivePacketSource::size()
+prefix_ senf::ppi::module::debug::PassiveSource::size_type
+senf::ppi::module::debug::PassiveSource::size()
{
return packets_.size();
}
////////////////////////////////////////
// private members
-prefix_ void senf::ppi::module::debug::PassivePacketSource::request()
+prefix_ void senf::ppi::module::debug::PassiveSource::request()
{
+ BOOST_ASSERT( ! packets_.empty() );
output(packets_.front());
packets_.pop_front();
+ if (packets_.empty())
+ output.throttle();
+}
+
+prefix_ void senf::ppi::module::debug::PassiveSource::init()
+{
+ if (empty())
+ output.throttle();
}
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::module::debug::ActivePacketSink
+// senf::ppi::module::debug::ActiveSink
-prefix_ senf::ppi::module::debug::ActivePacketSink::ActivePacketSink()
+prefix_ senf::ppi::module::debug::ActiveSink::ActiveSink()
{
noroute(input);
}
-prefix_ senf::Packet senf::ppi::module::debug::ActivePacketSink::request()
+prefix_ senf::Packet senf::ppi::module::debug::ActiveSink::request()
{
return input();
}
+prefix_ bool senf::ppi::module::debug::ActiveSink::boolean_test()
+ const
+{
+ return input;
+}
+
///////////////////////////////////////////////////////////////////////////
-// senf::ppi::module::debug::PassivePacketSink
+// senf::ppi::module::debug::PassiveSink
-prefix_ senf::ppi::module::debug::PassivePacketSink::PassivePacketSink()
+prefix_ senf::ppi::module::debug::PassiveSink::PassiveSink()
{
noroute(input);
- input.onRequest(&PassivePacketSink::request);
+ input.onRequest(&PassiveSink::request);
}
-prefix_ bool senf::ppi::module::debug::PassivePacketSink::empty()
+prefix_ void senf::ppi::module::debug::PassiveSink::throttle()
+{
+ input.throttle();
+}
+
+prefix_ void senf::ppi::module::debug::PassiveSink::unthrottle()
+{
+ input.unthrottle();
+}
+
+prefix_ bool senf::ppi::module::debug::PassiveSink::empty()
{
return packets_.empty();
}
-prefix_ senf::ppi::module::debug::PassivePacketSink::size_type
-senf::ppi::module::debug::PassivePacketSink::size()
+prefix_ senf::ppi::module::debug::PassiveSink::size_type
+senf::ppi::module::debug::PassiveSink::size()
{
return packets_.size();
}
-prefix_ senf::ppi::module::debug::PassivePacketSink::iterator
-senf::ppi::module::debug::PassivePacketSink::begin()
+prefix_ senf::ppi::module::debug::PassiveSink::iterator
+senf::ppi::module::debug::PassiveSink::begin()
{
return packets_.begin();
}
-prefix_ senf::ppi::module::debug::PassivePacketSink::iterator
-senf::ppi::module::debug::PassivePacketSink::end()
+prefix_ senf::ppi::module::debug::PassiveSink::iterator
+senf::ppi::module::debug::PassiveSink::end()
{
return packets_.end();
}
-prefix_ senf::Packet senf::ppi::module::debug::PassivePacketSink::back()
+prefix_ senf::Packet senf::ppi::module::debug::PassiveSink::front()
{
if (empty())
return Packet();
else
- return packets_.back();
+ return packets_.front();
}
-prefix_ senf::Packet senf::ppi::module::debug::PassivePacketSink::pop_back()
+prefix_ senf::Packet senf::ppi::module::debug::PassiveSink::pop_front()
{
- Packet p (back());
+ Packet p (front());
if (p)
- packets_.pop_back();
+ packets_.pop_front();
return p;
}
-prefix_ void senf::ppi::module::debug::PassivePacketSink::clear()
+prefix_ void senf::ppi::module::debug::PassiveSink::clear()
{
packets_.erase(packets_.begin(), packets_.end());
}
////////////////////////////////////////
// private members
-prefix_ void senf::ppi::module::debug::PassivePacketSink::request()
+prefix_ void senf::ppi::module::debug::PassiveSink::request()
{
packets_.push_back(input());
}
+///////////////////////////////////////////////////////////////////////////
+// senf::ppi::module::debug::ActiveFeederSource
+
+prefix_ senf::ppi::module::debug::ActiveFeederSource::ActiveFeederSource()
+ : output(feeder.output)
+{
+ ppi::connect(source,feeder);
+}
+
+prefix_ void senf::ppi::module::debug::ActiveFeederSource::submit(Packet packet)
+{
+ source.submit(packet);
+}
+
+prefix_ bool senf::ppi::module::debug::ActiveFeederSource::empty()
+{
+ return source.empty();
+}
+
+prefix_ senf::ppi::module::debug::ActiveFeederSource::size_type
+senf::ppi::module::debug::ActiveFeederSource::size()
+{
+ return source.size();
+}
+
+///////////////////////////////////////////////////////////////////////////
+// senf::ppi::module::debug::ActiveFeederSink
+
+prefix_ senf::ppi::module::debug::ActiveFeederSink::ActiveFeederSink()
+ : input(feeder.input)
+{
+ ppi::connect(feeder, sink);
+}
+
+prefix_ bool senf::ppi::module::debug::ActiveFeederSink::empty()
+{
+ return sink.empty();
+}
+
+prefix_ senf::ppi::module::debug::ActiveFeederSink::size_type
+senf::ppi::module::debug::ActiveFeederSink::size()
+{
+ return sink.size();
+}
+
+prefix_ senf::ppi::module::debug::ActiveFeederSink::iterator
+senf::ppi::module::debug::ActiveFeederSink::begin()
+{
+ return sink.begin();
+}
+
+prefix_ senf::ppi::module::debug::ActiveFeederSink::iterator
+senf::ppi::module::debug::ActiveFeederSink::end()
+{
+ return sink.end();
+}
+
+prefix_ senf::Packet senf::ppi::module::debug::ActiveFeederSink::front()
+{
+ return sink.front();
+}
+
+prefix_ senf::Packet senf::ppi::module::debug::ActiveFeederSink::pop_front()
+{
+ return sink.pop_front();
+}
+
+prefix_ void senf::ppi::module::debug::ActiveFeederSink::clear()
+{
+ sink.clear();
+}
+
///////////////////////////////cci.e///////////////////////////////////////
#undef prefix_