From 4736067ed22e19da2373f18574e62add3ce8f382 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Thu, 31 May 2007 13:52:29 +0200 Subject: [PATCH] avoid recursive initialization of uid static variable --- src/common/packet-printer.cc | 17 +++++++++++++++++ src/common/packet-printer.h | 22 ++++++++++++++-------- 2 files changed, 31 insertions(+), 8 deletions(-) diff --git a/src/common/packet-printer.cc b/src/common/packet-printer.cc index 0c0eaeadc..bf8224db2 100644 --- a/src/common/packet-printer.cc +++ b/src/common/packet-printer.cc @@ -166,5 +166,22 @@ PacketPrinter::DoDefaultPrintFragment (std::ostream & os, os << std::endl; } +void +PacketPrinter::DoAddPrinter (uint32_t uid, + Ptr printer, + Callback fragmentPrinter) +{ + struct PacketPrinter::Printer p; + p.m_chunkUid = uid; + p.m_printer = printer; + p.m_fragmentPrinter = fragmentPrinter; + m_printerList.push_back (p); +} + } // namespace ns3 diff --git a/src/common/packet-printer.h b/src/common/packet-printer.h index f40efa056..2a0c36d3f 100644 --- a/src/common/packet-printer.h +++ b/src/common/packet-printer.h @@ -157,6 +157,14 @@ private: 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 printer, + Callback fragmentPrinter); static PacketPrinter m_defaultPacketPrinter; PrinterList m_printerList; @@ -180,11 +188,7 @@ PacketPrinter::AddPrinter (Callback fragmentPrinter) { static uint32_t uid = PacketPrinter::GetUid (); - 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 @@ -225,9 +229,11 @@ PacketPrinter::AllocateUid (void) RegisteredChunks *chunks = PacketPrinter::GetRegisteredChunks (); chunks->push_back (std::make_pair(&PacketPrinter::DoPrint, &PacketPrinter::DoGetName)); - PacketPrinter::PeekDefault ()->AddPrinter (MakeCallback (&PacketPrinter::DoDefaultPrint), - MakeCallback (&PacketPrinter::DoDefaultPrintFragment)); - return chunks->size (); + uint32_t uid = chunks->size (); + PacketPrinter::PeekDefault ()->DoAddPrinter (uid, + MakeCallback (&PacketPrinter::DoDefaultPrint).GetImpl (), + MakeCallback (&PacketPrinter::DoDefaultPrintFragment)); + return uid; } template