add support for a default PacketPrinter

This commit is contained in:
Mathieu Lacage
2007-05-31 12:34:33 +02:00
parent ab5c0a43bd
commit 4b8dabddae
2 changed files with 83 additions and 0 deletions

View File

@@ -54,6 +54,25 @@ PacketPrinter::GetRegisteredChunks (void)
return &registeredChunks;
}
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

View File

@@ -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