#include <iomanip>
#include <cmath>
#include <senf/Utils/TypeInfo.hh>
+#include <senf/Utils/Format.hh>
#define prefix_
///////////////////////////////ct.p////////////////////////////////////////
return prettyName(typeid(PacketType));
}
+template <class PacketType>
+prefix_ senf::TypeIdValue senf::detail::PkReg_EntryImpl<PacketType>::typeIdValue()
+ const
+{
+ return typeid(PacketType);
+}
+
///////////////////////////////////////////////////////////////////////////
// senf::PacketRegistry<Tag>
}
template <class KeyType>
+template <class PacketType>
+prefix_ void senf::detail::PacketRegistryImpl<KeyType>::unregisterPacket()
+{
+ typename PacketMap::iterator i (registry_.find(key(typeIdValue<PacketType>())));
+ typename ReversePacketMap::iterator j (reverseRegistry_.find(typeIdValue<PacketType>()));
+ if (i != registry_.end())
+ registry_.erase(i);
+ if (j != reverseRegistry_.end())
+ reverseRegistry_.erase(j);
+}
+
+template <class KeyType>
+prefix_ void senf::detail::PacketRegistryImpl<KeyType>::unregisterPacket(key_t key)
+{
+ typename PacketMap::iterator i (registry_.find(key));
+ if (i == registry_.end())
+ throw PacketTypeNotRegisteredException();
+ typename ReversePacketMap::iterator j (reverseRegistry_.find(i->second->typeIdValue()));
+ registry_.erase(i);
+ if (j != reverseRegistry_.end())
+ reverseRegistry_.erase(j);
+}
+
+template <class KeyType>
prefix_ typename senf::detail::PacketRegistryImpl<KeyType>::key_t
senf::detail::PacketRegistryImpl<KeyType>::key(senf::TypeIdValue const & type)
{
template <class KeyType>
prefix_ void senf::detail::DumpKey<KeyType, true>::dump(KeyType const & v, std::ostream & os)
{
- int bytes ((std::numeric_limits<KeyType>::digits+7)/8);
- int digs (int(2.4*bytes)+1);
-
- os << " 0x" << std::setw(2*bytes) << std::setfill('0') << std::hex
- << typename senf::detail::CharToInt<KeyType>::type (v)
- << " (" << std::setw(digs) << std::setfill(' ') << std::dec
- << typename senf::detail::CharToInt<KeyType>::type (v)
- << ") (";
- for (int i (bytes-1); i>=0; --i) {
- char c ((v>>(8*i))&0xff);
- os << ((c>=32 && c<=127) ? c : '.');
- }
- os << ')';
+ os << " " << senf::format::dumpint(v);
}
///////////////////////////////ct.e////////////////////////////////////////