// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file
- \brief MonitorModule non-inline non-template implementation */
+ \brief MonitorModule non-inline template implementation */
-#include "MonitorModule.hh"
//#include "MonitorModule.ih"
// Custom includes
-//#include "MonitorModule.mpp"
#define prefix_
-///////////////////////////////cc.p////////////////////////////////////////
+///////////////////////////////ct.p////////////////////////////////////////
-prefix_ void senf::ppi::module::MonitorModule::request()
+template <class PacketType>
+prefix_ void senf::ppi::module::MonitorModule<PacketType>::request()
{
- Packet p (input());
+ PacketType p (input());
v_handlePacket(p);
if (output.connected())
output(p);
}
-prefix_ void senf::ppi::module::MonitorModule::throttle()
+template <class PacketType>
+prefix_ void senf::ppi::module::MonitorModule<PacketType>::throttle()
{
if (output.connected())
input.throttle();
}
-prefix_ void senf::ppi::module::MonitorModule::unthrottle()
+template <class PacketType>
+prefix_ void senf::ppi::module::MonitorModule<PacketType>::unthrottle()
{
if (output.connected())
input.unthrottle();
}
-///////////////////////////////cc.e////////////////////////////////////////
+///////////////////////////////ct.e////////////////////////////////////////
#undef prefix_
-//#include "MonitorModule.mpp"
\f
// Local Variables:
// 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/** \file
- \brief MonitorModule inline non-template implementation */
+ \brief MonitorModule inline template implementation */
//#include "MonitorModule.ih"
// Custom includes
#define prefix_ inline
-///////////////////////////////cci.p///////////////////////////////////////
+///////////////////////////////cti.p///////////////////////////////////////
-prefix_ senf::ppi::module::MonitorModule::MonitorModule()
+template <class PacketType>
+prefix_ senf::ppi::module::MonitorModule<PacketType>::MonitorModule()
{
route(input, output).autoThrottling(false);
input.onRequest(&MonitorModule::request);
output.onUnthrottle(&MonitorModule::unthrottle);
}
-///////////////////////////////cci.e///////////////////////////////////////
+///////////////////////////////cti.e///////////////////////////////////////
#undef prefix_
\f
namespace ppi {
namespace module {
+ template <class PacketType=Packet>
class MonitorModule : public Module
{
public:
- senf::ppi::connector::PassiveInput<> input;
- senf::ppi::connector::ActiveOutput<> output;
+ senf::ppi::connector::PassiveInput<PacketType> input;
+ senf::ppi::connector::ActiveOutput<PacketType> output;
protected:
MonitorModule();
- virtual void v_handlePacket(Packet const & p) = 0;
+ virtual void v_handlePacket(PacketType const & p) = 0;
private:
void request();
}}}
///////////////////////////////hh.e////////////////////////////////////////
-#include "MonitorModule.cci"
-//#include "MonitorModule.ct"
-//#include "MonitorModule.cti"
+//#include "MonitorModule.cci"
+#include "MonitorModule.ct"
+#include "MonitorModule.cti"
#endif
\f
namespace {
- class PacketCounter : public senf::ppi::module::MonitorModule
+ class PacketCounter : public senf::ppi::module::MonitorModule<>
{
SENF_PPI_MODULE(PacketCounter);
public:
return ptr()->annotation<Annotation>();
}
+template <class Annotation>
+prefix_ Annotation const & senf::Packet::annotation()
+ const
+{
+ return ptr()->annotation<Annotation>();
+}
+
///////////////////////////////////////////////////////////////////////////
// senf::ConcretePacket<PacketType>
///@}
+ template <class Annotation>
+ Annotation const & annotation() const; ///< Get packet annotation
+ /**< \see annotation() */
+
///\name Other methods
///@{