X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Packets%2FPacketRegistry.ih;h=0c83b8eef72d0edad593a2e350a9a63bc5d644ca;hb=81ffa1c459b96dd44472bcef37e1e373934ee138;hp=2a752b2c68e15c6f6bdcd9473cfe0e6ebd056875;hpb=c52cd7d87dbb525c1267aad27391b8b7365dbb57;p=senf.git diff --git a/Packets/PacketRegistry.ih b/Packets/PacketRegistry.ih index 2a752b2..0c83b8e 100644 --- a/Packets/PacketRegistry.ih +++ b/Packets/PacketRegistry.ih @@ -1,6 +1,6 @@ // $Id$ // -// Copyright (C) 2006 +// Copyright (C) 2006 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS) // Kompetenzzentrum fuer Satelitenkommunikation (SatCom) // Stefan Bund @@ -20,46 +20,48 @@ // Free Software Foundation, Inc., // 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +/** \file + \brief PacketRegistry internal header */ + #ifndef IH_PacketRegistryImpl_ #define IH_PacketRegistryImpl_ 1 // Custom includes -#include "Packet.hh" -#include "DataPacket.hh" -#include "typeidvalue.hh" +#include +#include "Utils/TypeIdValue.hh" ///////////////////////////////ih.p//////////////////////////////////////// -namespace satcom { -namespace pkf { -namespace impl { - - struct PkReg_Entry { - virtual void registerInterpreter(Packet const * p, - Packet::iterator b, Packet::iterator e) = 0; - virtual Packet::ptr reinterpret(Packet * p) = 0; - }; +namespace senf { +namespace detail { + + /** \brief Internal: Registry entry implementation for a specific packet type - template + \internal + */ + template struct PkReg_EntryImpl : public PkReg_Entry { - virtual void registerInterpreter(Packet const * p, Packet::iterator b, Packet::iterator e); - virtual Packet::ptr reinterpret(Packet * p); + virtual Packet::factory_t factory() const; }; + /** \brief Internal: Singleton class implementing the packet registry. + \internal + */ template - class PacketRegistryImpl : private boost::noncopyable + class PacketRegistryImpl + : private boost::noncopyable { public: /////////////////////////////////////////////////////////////////////////// // Types - + typedef KeyType key_t; - typedef impl::PkReg_Entry Entry; - + typedef PkReg_Entry Entry; + /////////////////////////////////////////////////////////////////////////// ///\name Structors and default members ///@{ @@ -73,30 +75,27 @@ namespace impl { ///@} /////////////////////////////////////////////////////////////////////////// - template + template void registerPacket(key_t key); - key_t key(satcom::lib::TypeIdValue const & type); + key_t key(senf::TypeIdValue const & type); + boost::optional key(senf::TypeIdValue const & type, bool); - Entry * lookup(key_t key); + Entry const & lookup(key_t key); + Entry const * lookup(key_t key, bool); protected: private: - template - static void registerInterpreter(Packet * p, Packet::iterator b, Packet::iterator e); - - typedef boost::shared_ptr Entry_ptr; + typedef boost::intrusive_ptr Entry_ptr; typedef std::map PacketMap; - typedef std::map ReversePacketMap; + typedef std::map ReversePacketMap; PacketMap registry_; ReversePacketMap reverseRegistry_; }; - extern PkReg_EntryImpl pkreg_dataEntry; - -}}} +}} ///////////////////////////////ih.e//////////////////////////////////////// #endif @@ -104,5 +103,10 @@ namespace impl { // Local Variables: // mode: c++ -// c-file-style: "satcom" +// fill-column: 100 +// c-file-style: "senf" +// indent-tabs-mode: nil +// ispell-local-dictionary: "american" +// compile-command: "scons -u test" +// comment-column: 40 // End: