New pybindgen and API rescan. Extensive API description files changes because pybindgen now handles consts differently.
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
#include "ns3/ptr.h"
#include "ns3/packet.h"
#include "ns3/header.h"
#include <iostream>
using namespace ns3;
/* A sample Header implementation
*/
class MyHeader : public Header
{
public:
MyHeader ();
virtual ~MyHeader ();
void SetData (uint16_t data);
uint16_t GetData (void) const;
static TypeId GetTypeId (void);
virtual TypeId GetInstanceTypeId (void) const;
virtual void Print (std::ostream &os) const;
virtual void Serialize (Buffer::Iterator start) const;
virtual uint32_t Deserialize (Buffer::Iterator start);
virtual uint32_t GetSerializedSize (void) const;
private:
uint16_t m_data;
};
MyHeader::MyHeader ()
{
// we must provide a public default constructor,
// implicit or explicit, but never private.
}
MyHeader::~MyHeader ()
{}
TypeId
MyHeader::GetTypeId (void)
{
static TypeId tid = TypeId ("ns3::MyHeader")
.SetParent<Header> ()
;
return tid;
}
TypeId
MyHeader::GetInstanceTypeId (void) const
{
return GetTypeId ();
}
void
MyHeader::Print (std::ostream &os) const
{
// This method is invoked by the packet printing
// routines to print the content of my header.
os << "data=" << m_data << std::endl;
}
uint32_t
MyHeader::GetSerializedSize (void) const
{
// we reserve 2 bytes for our header.
return 2;
}
void
MyHeader::Serialize (Buffer::Iterator start) const
{
// we can serialize two bytes at the start of the buffer.
// we write them in network byte order.
start.WriteHtonU16 (m_data);
}
uint32_t
MyHeader::Deserialize (Buffer::Iterator start)
{
// we can deserialize two bytes from the start of the buffer.
// we read them in network byte order and store them
// in host byte order.
m_data = start.ReadNtohU16 ();
// we return the number of bytes effectively read.
return 2;
}
void
MyHeader::SetData (uint16_t data)
{
m_data = data;
}
uint16_t
MyHeader::GetData (void) const
{
return m_data;
}
int main (int argc, char *argv[])
{
// instantiate a header.
MyHeader sourceHeader;
sourceHeader.SetData (2);
// instantiate a packet
Ptr<Packet> p = Create<Packet> ();
// and store my header into the packet.
p->AddHeader (sourceHeader);
// print the content of my packet on the standard output.
p->Print (std::cout);
// you can now remove the header from the packet:
MyHeader destinationHeader;
p->RemoveHeader (destinationHeader);
// and check that the destination and source
// headers contain the same values.
NS_ASSERT (sourceHeader.GetData () == destinationHeader.GetData ());
return 0;
}