add support for a default PacketPrinter
This commit is contained in:
@@ -54,6 +54,25 @@ PacketPrinter::GetRegisteredChunks (void)
|
||||
return ®isteredChunks;
|
||||
}
|
||||
|
||||
PacketPrinter
|
||||
PacketPrinter::GetDefault (void)
|
||||
{
|
||||
return *(PacketPrinter::PeekDefault ());
|
||||
}
|
||||
PacketPrinter *
|
||||
PacketPrinter::PeekDefault (void)
|
||||
{
|
||||
static PacketPrinter *tmp = PacketPrinter::CreateStaticDefault ();
|
||||
return tmp;
|
||||
}
|
||||
PacketPrinter *
|
||||
PacketPrinter::CreateStaticDefault (void)
|
||||
{
|
||||
static PacketPrinter tmp;
|
||||
return &tmp;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
PacketPrinter::PrintChunk (uint32_t chunkUid,
|
||||
Buffer::Iterator start,
|
||||
@@ -112,5 +131,40 @@ PacketPrinter::PrintPayload (std::ostream &os, uint32_t packetUid, uint32_t size
|
||||
m_payloadPrinter (os, packetUid, size, info);
|
||||
}
|
||||
|
||||
void
|
||||
PacketPrinter::DoDefaultPrintPayload (std::ostream & os,
|
||||
uint32_t packetUid,
|
||||
uint32_t size,
|
||||
struct PacketPrinter::FragmentInformation info)
|
||||
{
|
||||
os << "data ";
|
||||
os << "[" << info.start << ":" << info.end << "] -> "
|
||||
<< "[0:" << size << "]";
|
||||
os << std::endl;
|
||||
}
|
||||
|
||||
void
|
||||
PacketPrinter::DoDefaultPrintDefault (std::ostream & os,
|
||||
uint32_t packetUid,
|
||||
uint32_t size,
|
||||
std::string &name,
|
||||
struct PacketPrinter::FragmentInformation info)
|
||||
{
|
||||
NS_ASSERT_MSG (false, "This should never happen because we provide a printer for _all_ chunk types.");
|
||||
}
|
||||
|
||||
void
|
||||
PacketPrinter::DoDefaultPrintFragment (std::ostream & os,
|
||||
uint32_t packetUid,
|
||||
uint32_t size,
|
||||
std::string &name,
|
||||
struct PacketPrinter::FragmentInformation info)
|
||||
{
|
||||
os << name << " ";
|
||||
os << "[" << info.start << ":" << info.end << "] -> "
|
||||
<< "[0:" << size << "]";
|
||||
os << std::endl;
|
||||
}
|
||||
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
@@ -105,6 +105,24 @@ private:
|
||||
|
||||
|
||||
static PacketPrinter GetDefault (void);
|
||||
static PacketPrinter *PeekDefault (void);
|
||||
static PacketPrinter *CreateStaticDefault (void);
|
||||
static void DoDefaultPrintPayload (std::ostream & os,
|
||||
uint32_t packetUid,
|
||||
uint32_t size,
|
||||
struct PacketPrinter::FragmentInformation info);
|
||||
static void DoDefaultPrintDefault (std::ostream & os,
|
||||
uint32_t packetUid,
|
||||
uint32_t size,
|
||||
std::string &name,
|
||||
struct PacketPrinter::FragmentInformation info);
|
||||
template <typename T>
|
||||
static void DoDefaultPrint (std::ostream &os, uint32_t packetUid, uint32_t size, const T *chunk);
|
||||
static void DoDefaultPrintFragment (std::ostream & os,
|
||||
uint32_t packetUid,
|
||||
uint32_t size,
|
||||
std::string &name,
|
||||
struct PacketPrinter::FragmentInformation info);
|
||||
|
||||
template <typename T>
|
||||
static void DoPrint (Ptr<CallbackImplBase> callbackPrinter,
|
||||
@@ -202,9 +220,20 @@ PacketPrinter::AllocateUid (void)
|
||||
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 ();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void
|
||||
PacketPrinter::DoDefaultPrint (std::ostream &os, uint32_t packetUid, uint32_t size, const T *chunk)
|
||||
{
|
||||
chunk->Print (os);
|
||||
os << std::endl;
|
||||
}
|
||||
|
||||
|
||||
|
||||
} // namespace ns3
|
||||
|
||||
|
||||
Reference in New Issue
Block a user