avoid recursive initialization of uid static variable
authorMathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 31 May 2007 13:52:29 +0200
changeset 803 f4875471b5fb
parent 802 c176ccc92396
child 804 435c07be1ec1
avoid recursive initialization of uid static variable
src/common/packet-printer.cc
src/common/packet-printer.h
--- a/src/common/packet-printer.cc	Thu May 31 13:45:03 2007 +0200
+++ b/src/common/packet-printer.cc	Thu May 31 13:52:29 2007 +0200
@@ -166,5 +166,22 @@
   os << std::endl;
 }
 
+void
+PacketPrinter::DoAddPrinter (uint32_t uid,
+                             Ptr<CallbackImplBase> printer,
+                             Callback<void,
+                             std::ostream &, 
+                             uint32_t, 
+                             uint32_t, 
+                             std::string &,
+                             struct PacketPrinter::FragmentInformation> fragmentPrinter)
+{
+  struct PacketPrinter::Printer p;
+  p.m_chunkUid = uid;
+  p.m_printer = printer;
+  p.m_fragmentPrinter = fragmentPrinter;
+  m_printerList.push_back (p);
+}
+
 
 } // namespace ns3
--- a/src/common/packet-printer.h	Thu May 31 13:45:03 2007 +0200
+++ b/src/common/packet-printer.h	Thu May 31 13:52:29 2007 +0200
@@ -157,6 +157,14 @@
 			   uint32_t fragmentEnd) const;
   void PrintPayload (std::ostream &os, uint32_t packetUid, uint32_t size,
 		     uint32_t fragmentStart, uint32_t fragmentEnd) const;
+  void DoAddPrinter (uint32_t uid,
+                     Ptr<CallbackImplBase> printer,
+                     Callback<void,
+                       std::ostream &, 
+                       uint32_t, 
+                       uint32_t, 
+                       std::string &,
+                       struct PacketPrinter::FragmentInformation> fragmentPrinter);
 
   static PacketPrinter m_defaultPacketPrinter;
   PrinterList m_printerList;
@@ -180,11 +188,7 @@
 		            struct PacketPrinter::FragmentInformation> fragmentPrinter)
 {
   static uint32_t uid = PacketPrinter::GetUid<T> ();
-  struct PacketPrinter::Printer p;
-  p.m_chunkUid = uid;
-  p.m_printer = printer.GetImpl ();
-  p.m_fragmentPrinter = fragmentPrinter;
-  m_printerList.push_back (p);
+  DoAddPrinter (uid, printer.GetImpl (), fragmentPrinter);
 }
 
 template <typename T>
@@ -225,9 +229,11 @@
   RegisteredChunks *chunks = PacketPrinter::GetRegisteredChunks ();
   chunks->push_back (std::make_pair(&PacketPrinter::DoPrint<T>, 
                                     &PacketPrinter::DoGetName<T>));
-  PacketPrinter::PeekDefault ()->AddPrinter (MakeCallback (&PacketPrinter::DoDefaultPrint<T>),
-                                             MakeCallback (&PacketPrinter::DoDefaultPrintFragment));
-  return chunks->size ();
+  uint32_t uid = chunks->size ();
+  PacketPrinter::PeekDefault ()->DoAddPrinter (uid, 
+                                               MakeCallback (&PacketPrinter::DoDefaultPrint<T>).GetImpl (),
+                                               MakeCallback (&PacketPrinter::DoDefaultPrintFragment));
+  return uid;
 }
 
 template <typename T>