remove template methods.

This commit is contained in:
Mathieu Lacage
2008-03-19 13:10:01 -07:00
parent 295c1cd3d5
commit 5cd592fe06
2 changed files with 38 additions and 63 deletions

View File

@@ -123,6 +123,40 @@ Packet::GetSize (void) const
return m_buffer.GetSize ();
}
void
Packet::AddHeader (const Header &header)
{
uint32_t size = header.GetSerializedSize ();
m_buffer.AddAtStart (size);
header.Serialize (m_buffer.Begin ());
m_metadata.AddHeader (header, size);
}
uint32_t
Packet::RemoveHeader (Header &header)
{
uint32_t deserialized = header.Deserialize (m_buffer.Begin ());
m_buffer.RemoveAtStart (deserialized);
m_metadata.RemoveHeader (header, deserialized);
return deserialized;
}
void
Packet::AddTrailer (const Trailer &trailer)
{
uint32_t size = trailer.GetSerializedSize ();
m_buffer.AddAtEnd (size);
Buffer::Iterator end = m_buffer.End ();
trailer.Serialize (end);
m_metadata.AddTrailer (trailer, size);
}
uint32_t
Packet::RemoveTrailer (Trailer &trailer)
{
uint32_t deserialized = trailer.Deserialize (m_buffer.End ());
m_buffer.RemoveAtEnd (deserialized);
m_metadata.RemoveTrailer (trailer, deserialized);
return deserialized;
}
void
Packet::AddAtEnd (Ptr<const Packet> packet)
{

View File

@@ -126,8 +126,7 @@ public:
*
* \param header a reference to the header to add to this packet.
*/
template <typename T>
void AddHeader (T const &header);
void AddHeader (const Header & header);
/**
* Deserialize and remove the header from the internal buffer.
* This method invokes Deserialize.
@@ -135,8 +134,7 @@ public:
* \param header a reference to the header to remove from the internal buffer.
* \returns the number of bytes removed from the packet.
*/
template <typename T>
uint32_t RemoveHeader (T &header);
uint32_t RemoveHeader (Header &header);
/**
* Add trailer to this packet. This method invokes the
* GetSerializedSize and Serialize
@@ -145,8 +143,7 @@ public:
*
* \param trailer a reference to the trailer to add to this packet.
*/
template <typename T>
void AddTrailer (T const &trailer);
void AddTrailer (const Trailer &trailer);
/**
* Remove a deserialized trailer from the internal buffer.
* This method invokes the Deserialize method.
@@ -154,8 +151,7 @@ public:
* \param trailer a reference to the trailer to remove from the internal buffer.
* \returns the number of bytes removed from the end of the packet.
*/
template <typename T>
uint32_t RemoveTrailer (T &trailer);
uint32_t RemoveTrailer (Trailer &trailer);
/**
* \param tag a pointer to the tag to attach to this packet.
*
@@ -394,61 +390,6 @@ std::ostream& operator<< (std::ostream& os, const Packet &packet);
namespace ns3 {
template <typename T>
void
Packet::AddHeader (T const &header)
{
const Header *testHeader;
// if the following assignment fails, it is because the
// input to this function is not a subclass of the Header class
testHeader = &header;
uint32_t size = header.GetSerializedSize ();
m_buffer.AddAtStart (size);
header.Serialize (m_buffer.Begin ());
m_metadata.AddHeader (header, size);
}
template <typename T>
uint32_t
Packet::RemoveHeader (T &header)
{
Header *testHeader;
// if the following assignment fails, it is because the
// input to this function is not a subclass of the Header class
testHeader = &header;
uint32_t deserialized = header.Deserialize (m_buffer.Begin ());
m_buffer.RemoveAtStart (deserialized);
m_metadata.RemoveHeader (header, deserialized);
return deserialized;
}
template <typename T>
void
Packet::AddTrailer (T const &trailer)
{
const Trailer *testTrailer;
// if the following assignment fails, it is because the
// input to this function is not a subclass of the Trailer class
testTrailer = &trailer;
uint32_t size = trailer.GetSerializedSize ();
m_buffer.AddAtEnd (size);
Buffer::Iterator end = m_buffer.End ();
trailer.Serialize (end);
m_metadata.AddTrailer (trailer, size);
}
template <typename T>
uint32_t
Packet::RemoveTrailer (T &trailer)
{
Trailer *testTrailer;
// if the following assignment fails, it is because the
// input to this function is not a subclass of the Trailer class
testTrailer = &trailer;
uint32_t deserialized = trailer.Deserialize (m_buffer.End ());
m_buffer.RemoveAtEnd (deserialized);
m_metadata.RemoveTrailer (trailer, deserialized);
return deserialized;
}
template <typename T>
void Packet::AddTag (T const& tag) const
{