26 #include "ns3/assert.h"
28 #define noBUFFER_FREE_LIST 1
105 inline void Next (
void);
109 inline void Prev (
void);
113 inline void Next (uint32_t delta);
117 inline void Prev (uint32_t delta);
132 bool IsEnd (
void)
const;
153 inline void WriteU8 (uint8_t data, uint32_t len);
239 void Write (uint8_t
const*buffer, uint32_t size);
259 inline uint8_t
ReadU8 (
void);
267 inline uint16_t
ReadU16 (
void);
340 void Read (uint8_t *buffer, uint32_t size);
367 bool CheckNoZero (uint32_t start, uint32_t end)
const;
368 bool Check (uint32_t i)
const;
403 inline uint32_t
GetSize (
void)
const;
414 uint8_t
const*
PeekData (
void)
const;
501 uint32_t
Serialize (uint8_t* buffer, uint32_t maxSize)
const;
511 uint32_t
Deserialize (
const uint8_t* buffer, uint32_t size);
522 void CopyData (std::ostream *os, uint32_t size)
const;
524 uint32_t
CopyData (uint8_t *buffer, uint32_t size)
const;
529 Buffer (uint32_t dataSize);
530 Buffer (uint32_t dataSize,
bool initialize);
616 #ifdef BUFFER_FREE_LIST
617 typedef std::vector<struct Buffer::Data*> FreeList;
618 struct LocalStaticDestructor
620 ~LocalStaticDestructor ();
624 static struct LocalStaticDestructor g_localStaticDestructor;
630 #include "ns3/assert.h"
647 m_current = m_dataStart;
652 m_current = m_dataEnd;
661 m_dataEnd = buffer->
m_end;
680 NS_ASSERT (m_current + delta <= m_dataEnd);
693 GetWriteErrorMessage ());
695 if (m_current < m_zeroStart)
702 m_data[m_current - (m_zeroEnd-m_zeroStart)] = data;
711 GetWriteErrorMessage ());
712 if (m_current <= m_zeroStart)
714 std::memset (&(
m_data[m_current]), data, len);
719 uint8_t *buffer = &
m_data[m_current - (m_zeroEnd-m_zeroStart)];
720 std::memset (buffer, data, len);
729 GetWriteErrorMessage ());
731 if (m_current + 2 <= m_zeroStart)
733 buffer = &
m_data[m_current];
737 buffer = &
m_data[m_current - (m_zeroEnd - m_zeroStart)];
739 buffer[0] = (data >> 8)& 0xff;
740 buffer[1] = (data >> 0)& 0xff;
748 GetWriteErrorMessage ());
751 if (m_current + 4 <= m_zeroStart)
753 buffer = &
m_data[m_current];
757 buffer = &
m_data[m_current - (m_zeroEnd - m_zeroStart)];
759 buffer[0] = (data >> 24)& 0xff;
760 buffer[1] = (data >> 16)& 0xff;
761 buffer[2] = (data >> 8)& 0xff;
762 buffer[3] = (data >> 0)& 0xff;
770 if (m_current + 2 <= m_zeroStart)
772 buffer = &
m_data[m_current];
774 else if (m_current >= m_zeroEnd)
776 buffer = &
m_data[m_current];
780 return SlowReadNtohU16 ();
794 if (m_current + 4 <= m_zeroStart)
796 buffer = &
m_data[m_current];
798 else if (m_current >= m_zeroEnd)
800 buffer = &
m_data[m_current];
804 return SlowReadNtohU32 ();
822 m_current <= m_dataEnd,
823 GetReadErrorMessage ());
825 if (m_current < m_zeroStart)
831 else if (m_current < m_zeroEnd)
838 uint8_t
data =
m_data[m_current - (m_zeroEnd-m_zeroStart)];
847 uint8_t byte0 = ReadU8 ();
848 uint8_t byte1 = ReadU8 ();
849 uint16_t
data = byte1;
uint16_t CalculateIpChecksum(uint16_t size)
Calculate the checksum.
uint16_t SlowReadNtohU16(void)
void Initialize(uint32_t zeroSize)
void WriteHtonU64(uint64_t data)
void RemoveAtEnd(uint32_t end)
void RemoveAtStart(uint32_t start)
automatically resized byte buffer
uint64_t ReadNtohU64(void)
#define NS_ASSERT(condition)
uint32_t GetSerializedSize(void) const
bool CheckInternalState(void) const
Buffer & operator=(Buffer const &o)
uint32_t ReadNtohU32(void)
uint32_t GetDistanceFrom(Iterator const &o) const
iterator in a Buffer instance
uint32_t SlowReadNtohU32(void)
uint32_t Deserialize(const uint8_t *buffer, uint32_t size)
This data structure is variable-sized through its last member whose size is determined at allocation ...
std::string GetWriteErrorMessage(void) const
void Prev(void)
go backward by one byte
void WriteU16(uint16_t data)
void WriteHtonU16(uint16_t data)
static struct Buffer::Data * Create(uint32_t size)
Buffer::Iterator End(void) const
uint8_t const * PeekData(void) const
void Next(void)
go forward by one byte
void WriteU64(uint64_t data)
void CopyData(std::ostream *os, uint32_t size) const
Copy the specified amount of data from the buffer to the given output stream.
int32_t GetCurrentEndOffset(void) const
void TransformIntoRealBuffer(void) const
Buffer::Iterator Begin(void) const
bool Check(uint32_t i) const
bool CheckNoZero(uint32_t start, uint32_t end) const
std::string GetReadErrorMessage(void) const
static void Recycle(struct Buffer::Data *data)
void Read(uint8_t *buffer, uint32_t size)
void WriteHtonU32(uint32_t data)
uint32_t GetSize(void) const
Buffer CreateFragment(uint32_t start, uint32_t length) const
bool AddAtEnd(uint32_t end)
void WriteHtolsbU16(uint16_t data)
static struct Buffer::Data * Allocate(uint32_t reqSize)
#define NS_ASSERT_MSG(condition, message)
uint32_t Serialize(uint8_t *buffer, uint32_t maxSize) const
void WriteU8(uint8_t data)
ns3::ByteTagListDataFreeList g_freeList
uint32_t m_maxZeroAreaStart
void WriteHtolsbU64(uint64_t data)
Buffer CreateFullCopy(void) const
static void Deallocate(struct Buffer::Data *data)
static uint32_t g_recommendedStart
location in a newly-allocated buffer where you should start writing data.
void Write(uint8_t const *buffer, uint32_t size)
uint32_t GetInternalSize(void) const
uint16_t ReadLsbtohU16(void)
bool AddAtStart(uint32_t start)
int32_t GetCurrentStartOffset(void) const
uint64_t ReadLsbtohU64(void)
uint16_t ReadNtohU16(void)
void WriteU32(uint32_t data)
uint32_t GetInternalEnd(void) const
uint32_t GetSize(void) const
static uint32_t g_maxSize
uint32_t ReadLsbtohU32(void)
void Construct(const Buffer *buffer)
void WriteHtolsbU32(uint32_t data)