Search:

SENF Extensible Network Framework

  • Home
  • Download
  • Wiki
  • BerliOS
  • ChangeLog
  • Browse SVN
  • Bug Tracker
  • Overview
  • Examples
  • HowTos
  • Glossary
  • PPI
  • Packets
  • Scheduler
  • Socket
  • Utils
  • Console
  • Daemon
  • Logger
  • Termlib
  • Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

PacketRegistry.cti

Go to the documentation of this file.
00001 // $Id: PacketRegistry.cti 1742 2010-11-04 14:51:56Z g0dil $
00002 //
00003 // Copyright (C) 2006
00004 // Fraunhofer (FOKUS)
00005 // Competence Center NETwork research (NET), St. Augustin, GERMANY
00006 //     Stefan Bund <g0dil@berlios.de>
00007 //
00008 // This program is free software; you can redistribute it and/or modify
00009 // it under the terms of the GNU General Public License as published by
00010 // the Free Software Foundation; either version 2 of the License, or
00011 // (at your option) any later version.
00012 //
00013 // This program is distributed in the hope that it will be useful,
00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016 // GNU General Public License for more details.
00017 //
00018 // You should have received a copy of the GNU General Public License
00019 // along with this program; if not, write to the
00020 // Free Software Foundation, Inc.,
00021 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
00022 
00026 #include "PacketRegistry.ih"
00027 
00028 // Custom includes
00029 
00030 #define prefix_ inline
00031 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00032 
00033 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00034 // senf::PacketRegistry<Tag>::ScopedRegistrationProxy<PacketType>
00035 
00036 template <class Tag>
00037 template <class PacketType>
00038 prefix_ senf::PacketRegistry<Tag>::ScopedRegistrationProxy<PacketType>::
00039 ScopedRegistrationProxy(typename Tag::key_t key, int priority)
00040 {
00041     PacketRegistry<Tag>::template registerPacket<PacketType>(key,priority);
00042 }
00043 
00044 template <class Tag>
00045 template <class PacketType>
00046 prefix_ senf::PacketRegistry<Tag>::ScopedRegistrationProxy<PacketType>::~ScopedRegistrationProxy()
00047 {
00048     try {
00049         PacketRegistry<Tag>::template unregisterPacket<PacketType>();
00050     }
00051     catch (PacketTypeNotRegisteredException & ex)
00052     {}
00053 }
00054 
00055 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00056 // senf::PacketRegistry<Tag>
00057 
00058 template <class Tag>
00059 template <class PacketType>
00060 prefix_ void senf::PacketRegistry<Tag>::registerPacket(typename Tag::key_t key, int priority)
00061 {
00062     registry().registerPacket<PacketType>(key, priority);
00063 }
00064 
00065 template <class Tag>
00066 template <class PacketType>
00067 prefix_ void senf::PacketRegistry<Tag>::unregisterPacket()
00068 {
00069     if (alive())
00070         registry().unregisterPacket<PacketType>();
00071 }
00072 
00073 template <class Tag>
00074 prefix_ void senf::PacketRegistry<Tag>::unregisterPacket(typename Tag::key_t key, int priority)
00075 {
00076     if (alive())
00077         registry().unregisterPacket(key, priority);
00078 }
00079 
00080 template <class Tag>
00081 template <class PacketType>
00082 prefix_ typename Tag::key_t senf::PacketRegistry<Tag>::key()
00083 {
00084     return registry().key(senf::typeIdValue<PacketType>());
00085 }
00086 
00087 template <class Tag>
00088 template <class PacketType>
00089 prefix_ typename boost::optional<typename Tag::key_t> senf::PacketRegistry<Tag>::key(NoThrow_t)
00090 {
00091     return registry().key(senf::typeIdValue<PacketType>(),true);
00092 }
00093 
00094 template <class Tag>
00095 prefix_ typename Tag::key_t senf::PacketRegistry<Tag>::key(Packet const & packet)
00096 {
00097     return registry().key(packet.typeId());
00098 }
00099 
00100 template <class Tag>
00101 prefix_ typename boost::optional<typename Tag::key_t>
00102 senf::PacketRegistry<Tag>::key(Packet const & packet, NoThrow_t)
00103 {
00104     return registry().key(packet.typeId(),true);
00105 }
00106 
00107 template <class Tag>
00108 prefix_ typename senf::PacketRegistry<Tag>::Entry const &
00109 senf::PacketRegistry<Tag>::lookup(typename Tag::key_t key)
00110 {
00111     return registry().lookup(key);
00112 }
00113 
00114 template <class Tag>
00115 prefix_ typename senf::PacketRegistry<Tag>::Entry const *
00116 senf::PacketRegistry<Tag>::lookup(typename Tag::key_t key, NoThrow_t)
00117 {
00118     return registry().lookup(key,true);
00119 }
00120 
00121 template <class Tag>
00122 prefix_ typename senf::PacketRegistry<Tag>::iterator senf::PacketRegistry<Tag>::begin()
00123 {
00124     return registry().begin();
00125 }
00126 
00127 template <class Tag>
00128 prefix_ typename senf::PacketRegistry<Tag>::iterator senf::PacketRegistry<Tag>::end()
00129 {
00130     return registry().end();
00131 }
00132 
00133 template <class Tag>
00134 prefix_ senf::PacketRegistry<Tag>::PacketRegistry()
00135     : registry_ (prettyName(typeid(Tag)))
00136 {}
00137 
00138 template <class Tag>
00139 prefix_ typename senf::PacketRegistry<Tag>::Registry &
00140 senf::PacketRegistry<Tag>::registry()
00141 {
00142     return instance().registry_;
00143 }
00144 
00145 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00146 // senf::detail::PacketRegistryImpl<KeyType>
00147 
00148 template <class KeyType>
00149 prefix_ senf::detail::PacketRegistryImpl<KeyType>::PacketRegistryImpl(std::string const & name)
00150 {
00151     registries()[name] = this;
00152 }
00153 
00154 template <class KeyType>
00155 prefix_ typename senf::detail::PacketRegistryImpl<KeyType>::iterator
00156 senf::detail::PacketRegistryImpl<KeyType>::begin()
00157     const
00158 {
00159     return registry_.begin();
00160 }
00161 
00162 template <class KeyType>
00163 prefix_ typename senf::detail::PacketRegistryImpl<KeyType>::iterator
00164 senf::detail::PacketRegistryImpl<KeyType>::end()
00165     const
00166 {
00167     return registry_.end();
00168 }
00169 
00170 //-/////////////////////////////////////////////////////////////////////////////////////////////////
00171 #undef prefix_
00172 
00173 
00174 // Local Variables:
00175 // mode: c++
00176 // fill-column: 100
00177 // c-file-style: "senf"
00178 // indent-tabs-mode: nil
00179 // ispell-local-dictionary: "american"
00180 // compile-command: "scons -u test"
00181 // comment-column: 40
00182 // End:

Contact: senf-dev@lists.berlios.de | © 2006-2010 Fraunhofer Institute for Open Communication Systems, Network Research