Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <ns3/packet.h>
- #include <iostream>
- using namespace ns3;
- struct Data
- {
- uint16_t m_a {31};
- void Serialize (Buffer::Iterator start) const;
- uint32_t Deserialize (Buffer::Iterator start);
- uint32_t GetSerializedSize () const;
- void Print (std::ostream &os) const;
- bool operator == (const Data &o) const;
- };
- void
- Data::Serialize (Buffer::Iterator start) const
- {
- Buffer::Iterator i = start;
- i.WriteHtonU16 (m_a);
- }
- uint32_t
- Data::Deserialize (Buffer::Iterator start)
- {
- Buffer::Iterator i = start;
- m_a = i.ReadNtohU16 ();
- return GetSerializedSize ();
- }
- uint32_t
- Data::GetSerializedSize () const
- {
- return 2;
- }
- void
- Data::Print (std::ostream &os) const
- {
- os << m_a;
- }
- bool
- Data::operator == (const Data &o) const
- {
- return m_a == o.m_a;
- }
- class TestHeader : public Header
- {
- public:
- static TypeId GetTypeId (void);
- virtual TypeId GetInstanceTypeId (void) const override { return GetTypeId (); }
- virtual void Serialize (Buffer::Iterator start) const override;
- virtual uint32_t Deserialize (Buffer::Iterator start) override;
- virtual uint32_t GetSerializedSize () const override;
- virtual void Print (std::ostream &os) const override;
- bool operator == (const TestHeader &o) const;
- uint8_t m_a {1};
- Data m_d;
- };
- TypeId
- TestHeader::GetTypeId (void)
- {
- static TypeId tid = TypeId ("ns3::TestHeader")
- .SetParent<Header> ()
- .AddConstructor<TestHeader> ();
- return tid;
- }
- void
- TestHeader::Serialize (Buffer::Iterator start) const
- {
- Buffer::Iterator i = start;
- m_d.Serialize (i);
- i.WriteU8 (m_a);
- }
- uint32_t
- TestHeader::Deserialize (Buffer::Iterator start)
- {
- Buffer::Iterator i = start;
- m_d.Deserialize (i);
- m_a = i.ReadU8 ();
- return GetSerializedSize ();
- }
- uint32_t
- TestHeader::GetSerializedSize () const
- {
- return 1 + 2;
- }
- void
- TestHeader::Print (std::ostream &os) const
- {
- os << +m_a << " ";
- m_d.Print (os);
- }
- bool
- TestHeader::operator == (const TestHeader &o) const
- {
- return m_a == o.m_a && m_d == o.m_d;
- }
- int main()
- {
- Ptr<Packet> p = Create<Packet> (1000);
- TestHeader h;
- h.m_a = 99;
- p->AddHeader (h);
- // ======================================
- TestHeader o;
- p->RemoveHeader (o);
- if (h == o)
- {
- std::cout << "The two headers are the same. Written: ";
- h.Print (std::cout);
- std::cout << ", read ";
- o.Print (std::cout);
- std::cout << std::endl;
- }
- else
- {
- std::cout << "The two headers differs. Written: ";
- h.Print (std::cout);
- std::cout << ", read ";
- o.Print (std::cout);
- std::cout << std::endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement