stop using ChunkRegistry to get header and trailer uids
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Mon, 17 Mar 2008 14:01:55 -0700
changeset 2645 139b2dec56c0
parent 2644 b50c3f20ab88
child 2646 c1fef7686472
stop using ChunkRegistry to get header and trailer uids
src/common/packet-metadata.cc
src/common/packet-metadata.h
src/core/type-id.cc
--- a/src/common/packet-metadata.cc	Mon Mar 17 13:31:08 2008 -0700
+++ b/src/common/packet-metadata.cc	Mon Mar 17 14:01:55 2008 -0700
@@ -24,7 +24,8 @@
 #include "ns3/log.h"
 #include "packet-metadata.h"
 #include "buffer.h"
-#include "chunk-registry.h"
+#include "header.h"
+#include "trailer.h"
 
 NS_LOG_COMPONENT_DEFINE ("PacketMetadata");
 
@@ -696,6 +697,12 @@
 }
 
 void 
+PacketMetadata::AddHeader (const Header &header, uint32_t size)
+{
+  uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
+  DoAddHeader (uid, size);
+}
+void
 PacketMetadata::DoAddHeader (uint32_t uid, uint32_t size)
 {
   if (!m_enable)
@@ -703,7 +710,7 @@
       m_metadataSkipped = true;
       return;
     }
-  NS_LOG_PARAMS ("(uid=" << uid << ", size=" << size << ")");
+  NS_LOG_PARAMS ("uid=" << uid << "size=" << size << "");
 
   struct PacketMetadata::SmallItem item;
   item.next = m_head;
@@ -716,8 +723,9 @@
   UpdateHead (written);
 }
 void 
-PacketMetadata::DoRemoveHeader (uint32_t uid, uint32_t size)
+PacketMetadata::RemoveHeader (const Header &header, uint32_t size)
 {
+  uint32_t uid = header.GetInstanceTypeId ().GetUid () << 1;
   if (!m_enable) 
     {
       m_metadataSkipped = true;
@@ -753,13 +761,15 @@
     }
 }
 void 
-PacketMetadata::DoAddTrailer (uint32_t uid, uint32_t size)
+PacketMetadata::AddTrailer (const Trailer &trailer, uint32_t size)
 {
+  uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
   if (!m_enable)
     {
       m_metadataSkipped = true;
       return;
     }
+  NS_LOG_PARAMS ("(uid=" << uid << ", size=" << size << ")");
   struct PacketMetadata::SmallItem item;
   item.next = 0xffff;
   item.prev = m_tail;
@@ -771,13 +781,15 @@
   UpdateTail (written);
 }
 void 
-PacketMetadata::DoRemoveTrailer (uint32_t uid, uint32_t size)
+PacketMetadata::RemoveTrailer (const Trailer &trailer, uint32_t size)
 {
+  uint32_t uid = trailer.GetInstanceTypeId ().GetUid () << 1;
   if (!m_enable) 
     {
       m_metadataSkipped = true;
       return;
     }
+  NS_LOG_PARAMS ("(uid=" << uid << ", size=" << size << ")");
   struct PacketMetadata::SmallItem item;
   struct PacketMetadata::ExtraItem extraItem;
   uint32_t read = ReadItems (m_tail, &item, &extraItem);
@@ -1065,11 +1077,13 @@
     {
       item.isFragment = false;
     }
+  TypeId tid;
+  tid.SetUid (uid);
   if (uid == 0)
     {
       item.type = PacketMetadata::Item::PAYLOAD;
     }
-  else if (ChunkRegistry::IsHeader (uid))
+  else if (tid.IsChildOf (Header::GetTypeId ()))
     {
       item.type = PacketMetadata::Item::HEADER;
       if (!item.isFragment)
@@ -1079,7 +1093,7 @@
           item.current = j;
         }
     }
-  else if (ChunkRegistry::IsTrailer (uid))
+  else if (tid.IsChildOf (Trailer::GetTypeId ()))
     {
       item.type = PacketMetadata::Item::TRAILER;
       if (!item.isFragment)
@@ -1119,7 +1133,9 @@
         }
       else
         {
-          totalSize += 4 + ChunkRegistry::GetUidStringFromUid (uid).size ();
+          TypeId tid;
+          tid.SetUid (uid);
+          totalSize += 4 + tid.GetName ().size ();
         }
       totalSize += 1 + 4 + 2 + 4 + 4 + 4;
       if (current == m_tail)
@@ -1150,7 +1166,9 @@
       uint32_t uid = (item.typeUid & 0xfffffffe) >> 1;
       if (uid != 0)
         {
-          std::string uidString = ChunkRegistry::GetUidStringFromUid (uid);
+          TypeId tid;
+          tid.SetUid (uid);
+          std::string uidString = tid.GetName ();
           i.WriteU32 (uidString.size ());
           bytesWritten += 4;
           i.Write ((uint8_t *)uidString.c_str (), uidString.size ());
@@ -1210,7 +1228,8 @@
               uidString.push_back (i.ReadU8 ());
               size --;
             }
-          uid = ChunkRegistry::GetUidFromUidString (uidString);
+          TypeId tid = TypeId::LookupByName (uidString);
+          uid = tid.GetUid ();
         }
       uint8_t isBig = i.ReadU8 ();
       size --;
--- a/src/common/packet-metadata.h	Mon Mar 17 13:31:08 2008 -0700
+++ b/src/common/packet-metadata.h	Mon Mar 17 14:01:55 2008 -0700
@@ -31,6 +31,8 @@
 
 class Chunk;
 class Buffer;
+class Header;
+class Trailer;
 
 /**
  * \internal
@@ -128,15 +130,11 @@
   inline PacketMetadata &operator = (PacketMetadata const& o);
   inline ~PacketMetadata ();
 
-  template <typename T>
-  void AddHeader (T const &header, uint32_t size);
-  template <typename T>
-  void RemoveHeader (T const &header, uint32_t size);
+  void AddHeader (Header const &header, uint32_t size);
+  void RemoveHeader (Header const &header, uint32_t size);
 
-  template <typename T>
-  void AddTrailer (T const &trailer, uint32_t size);
-  template <typename T>
-  void RemoveTrailer (T const &trailer, uint32_t size);
+  void AddTrailer (Trailer const &trailer, uint32_t size);
+  void RemoveTrailer (Trailer const &trailer, uint32_t size);
 
   PacketMetadata CreateFragment (uint32_t start, uint32_t end) const;
   void AddAtEnd (PacketMetadata const&o);
@@ -241,10 +239,6 @@
   friend class ItemIterator;
 
   PacketMetadata ();
-  void DoAddHeader (uint32_t uid, uint32_t size);
-  void DoRemoveHeader (uint32_t uid, uint32_t size);
-  void DoAddTrailer (uint32_t uid, uint32_t size);
-  void DoRemoveTrailer (uint32_t uid, uint32_t size);
 
   inline uint16_t AddSmall (const PacketMetadata::SmallItem *item);
   uint16_t AddBig (uint32_t head, uint32_t tail,
@@ -270,6 +264,7 @@
   uint32_t ReadItems (uint16_t current, 
                       struct PacketMetadata::SmallItem *item,
                       struct PacketMetadata::ExtraItem *extraItem) const;
+  void DoAddHeader (uint32_t uid, uint32_t size);
 
 
   static struct PacketMetadata::Data *Create (uint32_t size);
@@ -304,33 +299,6 @@
 
 namespace ns3 {
 
-template <typename T>
-void 
-PacketMetadata::AddHeader (T const &header, uint32_t size)
-{
-  DoAddHeader (T::GetUid () << 1, size);
-}
-
-template <typename T>
-void 
-PacketMetadata::RemoveHeader (T const &header, uint32_t size)
-{
-  DoRemoveHeader (T::GetUid () << 1, size);
-}
-template <typename T>
-void 
-PacketMetadata::AddTrailer (T const &trailer, uint32_t size)
-{
-  DoAddTrailer (T::GetUid () << 1, size);
-}
-template <typename T>
-void 
-PacketMetadata::RemoveTrailer (T const &trailer, uint32_t size)
-{
-  DoRemoveTrailer (T::GetUid () << 1, size);
-}
-
-
 PacketMetadata::PacketMetadata (uint32_t uid, uint32_t size)
   : m_data (m_data = PacketMetadata::Create (10)),
     m_head (0xffff),
--- a/src/core/type-id.cc	Mon Mar 17 13:31:08 2008 -0700
+++ b/src/core/type-id.cc	Mon Mar 17 14:01:55 2008 -0700
@@ -479,7 +479,7 @@
 TypeId::IsChildOf (TypeId other) const
 {
   TypeId tmp = *this;
-  while (tmp != other && tmp != tmp)
+  while (tmp != other && tmp != tmp.GetParent ())
     {
       tmp = tmp.GetParent ();
     }