X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketRegistry.cti;h=fa4096db0d0182d56ea7e54cc1df8d335d14b2bc;hb=5443435c4c2b6e4386c5334b5b8358273f2bae93;hp=a09c249d3bb4642be9b5fdf9912653cd59f75360;hpb=ac6a813d9d99f7add4e13aff7a4bcd314d5604a6;p=senf.git diff --git a/Packets/PacketRegistry.cti b/Packets/PacketRegistry.cti index a09c249..fa4096d 100644 --- a/Packets/PacketRegistry.cti +++ b/Packets/PacketRegistry.cti @@ -1,9 +1,9 @@ // $Id$ // -// Copyright (C) 2006 -// Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) -// Kompetenzzentrum fuer Satelitenkommunikation (SatCom) -// Stefan Bund +// Copyright (C) 2006 +// 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 // it under the terms of the GNU General Public License as published by @@ -20,64 +20,126 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -// Definition of inline template funPacketRegistry.ons +/** \file + \brief PacketRegistry inline template implementation */ #include "PacketRegistry.ih" // Custom includes -#include "Packet.hh" #define prefix_ inline ///////////////////////////////PacketRegistry..p/////////////////////////////////////// +/////////////////////////////////////////////////////////////////////////// +// senf::PacketRegistry::RegistrationProxy + template -template -prefix_ void senf::PacketRegistry::registerPacket(typename Tag::key_t key) +template +prefix_ senf::PacketRegistry::RegistrationProxy:: +RegistrationProxy(typename Tag::key_t key) { - registry().registerPacket(key); + PacketRegistry::template registerPacket(key); } +/////////////////////////////////////////////////////////////////////////// +// senf::PacketRegistry + template -template -prefix_ senf::PacketRegistry::RegistrationProxy:: -RegistrationProxy(typename Tag::key_t key) +template +prefix_ void senf::PacketRegistry::registerPacket(typename Tag::key_t key) { - PacketRegistry::template registerPacket(key); + registry().registerPacket(key); } template -template +template prefix_ typename Tag::key_t senf::PacketRegistry::key() { - return registry().key(senf::typeIdValue()); + return registry().key(senf::typeIdValue()); +} + +template +template +prefix_ typename boost::optional senf::PacketRegistry::key(NoThrow_t) +{ + return registry().key(senf::typeIdValue(),true); +} + +template +prefix_ typename Tag::key_t senf::PacketRegistry::key(Packet const & packet) +{ + return registry().key(packet.typeId()); +} + +template +prefix_ typename boost::optional +senf::PacketRegistry::key(Packet const & packet, NoThrow_t) +{ + return registry().key(packet.typeId(),true); +} + +template +prefix_ senf::PkReg_Entry const & senf::PacketRegistry::lookup(typename Tag::key_t key) +{ + return registry().lookup(key); +} + +template +prefix_ senf::PkReg_Entry const * senf::PacketRegistry::lookup(typename Tag::key_t key, + NoThrow_t) +{ + return registry().lookup(key,true); +} + +template +prefix_ typename senf::PacketRegistry::iterator senf::PacketRegistry::begin() +{ + return registry().begin(); +} + +template +prefix_ typename senf::PacketRegistry::iterator senf::PacketRegistry::end() +{ + return registry().end(); +} + +/////////////////////////////////////////////////////////////////////////// +// senf::detail::PacketRegistryImpl + +template +prefix_ senf::detail::PacketRegistryImpl::PacketRegistryImpl(std::string const & name) +{ + registries()[name] = this; } template -template -prefix_ void -senf::impl::PacketRegistryImpl::registerInterpreter(Packet * p, - Packet::iterator b, - Packet::iterator e) +prefix_ typename senf::detail::PacketRegistryImpl::iterator +senf::detail::PacketRegistryImpl::begin() + const { - p->registerInterpreter(b,e); + return boost::make_transform_iterator( + registry_.begin(), ::__gnu_cxx::select1st()); } -template -prefix_ void -senf::PacketRegistryMixin::registerInterpreter(typename Tag::key_t key, - Packet::iterator b, - Packet::iterator e) +template +prefix_ typename senf::detail::PacketRegistryImpl::iterator +senf::detail::PacketRegistryImpl::end() const { - PacketRegistry::registry().lookup(key)->registerInterpreter( - static_cast(this),b,e); + return boost::make_transform_iterator( + registry_.end(), ::__gnu_cxx::select1st()); } ///////////////////////////////PacketRegistry..e/////////////////////////////////////// #undef prefix_ - + // Local Variables: // mode: c++ +// fill-column: 100 // c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: