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;