From b7f0c35815d3441d282e8339cc8f9cc9e5ce3358 Mon Sep 17 00:00:00 2001 From: g0dil <g0dil@wiback.org> Date: Thu, 22 Jan 2009 10:22:44 +0000 Subject: [PATCH] PPI: Add PacketType template argument to MonitorModule Packets: Allow const access to annotations --- PPI/{MonitorModule.cc => MonitorModule.ct} | 20 ++++++++++---------- PPI/{MonitorModule.cci => MonitorModule.cti} | 9 +++++---- PPI/MonitorModule.hh | 13 +++++++------ PPI/MonitorModule.test.cc | 2 +- Packets/Packet.cti | 7 +++++++ Packets/Packet.hh | 4 ++++ 6 files changed, 34 insertions(+), 21 deletions(-) rename PPI/{MonitorModule.cc => MonitorModule.ct} (73%) rename PPI/{MonitorModule.cci => MonitorModule.cti} (83%) diff --git a/PPI/MonitorModule.cc b/PPI/MonitorModule.ct similarity index 73% rename from PPI/MonitorModule.cc rename to PPI/MonitorModule.ct index 2a5420a3c..1945293d9 100644 --- a/PPI/MonitorModule.cc +++ b/PPI/MonitorModule.ct @@ -21,40 +21,40 @@ // 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" // Local Variables: diff --git a/PPI/MonitorModule.cci b/PPI/MonitorModule.cti similarity index 83% rename from PPI/MonitorModule.cci rename to PPI/MonitorModule.cti index 9c0e62c38..e2f101ad1 100644 --- a/PPI/MonitorModule.cci +++ b/PPI/MonitorModule.cti @@ -21,16 +21,17 @@ // 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); @@ -38,7 +39,7 @@ prefix_ senf::ppi::module::MonitorModule::MonitorModule() output.onUnthrottle(&MonitorModule::unthrottle); } -///////////////////////////////cci.e/////////////////////////////////////// +///////////////////////////////cti.e/////////////////////////////////////// #undef prefix_ diff --git a/PPI/MonitorModule.hh b/PPI/MonitorModule.hh index c5517eb80..30c8ff1d5 100644 --- a/PPI/MonitorModule.hh +++ b/PPI/MonitorModule.hh @@ -37,16 +37,17 @@ namespace senf { 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(); @@ -58,9 +59,9 @@ namespace module { }}} ///////////////////////////////hh.e//////////////////////////////////////// -#include "MonitorModule.cci" -//#include "MonitorModule.ct" -//#include "MonitorModule.cti" +//#include "MonitorModule.cci" +#include "MonitorModule.ct" +#include "MonitorModule.cti" #endif diff --git a/PPI/MonitorModule.test.cc b/PPI/MonitorModule.test.cc index b0f47c21d..9fd3ee7b5 100644 --- a/PPI/MonitorModule.test.cc +++ b/PPI/MonitorModule.test.cc @@ -38,7 +38,7 @@ namespace { - class PacketCounter : public senf::ppi::module::MonitorModule + class PacketCounter : public senf::ppi::module::MonitorModule<> { SENF_PPI_MODULE(PacketCounter); public: diff --git a/Packets/Packet.cti b/Packets/Packet.cti index 0eb6ddcfb..afae6069d 100644 --- a/Packets/Packet.cti +++ b/Packets/Packet.cti @@ -141,6 +141,13 @@ prefix_ Annotation & senf::Packet::annotation() return ptr()->annotation<Annotation>(); } +template <class Annotation> +prefix_ Annotation const & senf::Packet::annotation() + const +{ + return ptr()->annotation<Annotation>(); +} + /////////////////////////////////////////////////////////////////////////// // senf::ConcretePacket<PacketType> diff --git a/Packets/Packet.hh b/Packets/Packet.hh index d3b42a402..4a25789f1 100644 --- a/Packets/Packet.hh +++ b/Packets/Packet.hh @@ -376,6 +376,10 @@ namespace senf { ///@} + template <class Annotation> + Annotation const & annotation() const; ///< Get packet annotation + /**< \see annotation() */ + ///\name Other methods ///@{ -- GitLab