diff --git a/src/common/tag-buffer.cc b/src/common/tag-buffer.cc index 8b1418032..9d9011b31 100644 --- a/src/common/tag-buffer.cc +++ b/src/common/tag-buffer.cc @@ -23,6 +23,8 @@ namespace ns3 { +#ifndef TAG_BUFFER_USE_INLINE + void TagBuffer::WriteU8 (uint8_t v) { @@ -30,6 +32,7 @@ TagBuffer::WriteU8 (uint8_t v) *m_current = v; m_current++; } + void TagBuffer::WriteU16 (uint16_t data) { @@ -44,6 +47,48 @@ TagBuffer::WriteU32 (uint32_t data) WriteU8 ((data >> 16) & 0xff); WriteU8 ((data >> 24) & 0xff); } + + +uint8_t +TagBuffer::ReadU8 (void) +{ + NS_ASSERT (m_current + 1 <= m_end); + uint8_t v; + v = *m_current; + m_current++; + return v; +} + +uint16_t +TagBuffer::ReadU16 (void) +{ + uint8_t byte0 = ReadU8 (); + uint8_t byte1 = ReadU8 (); + uint16_t data = byte1; + data <<= 8; + data |= byte0; + return data; +} +uint32_t +TagBuffer::ReadU32 (void) +{ + uint8_t byte0 = ReadU8 (); + uint8_t byte1 = ReadU8 (); + uint8_t byte2 = ReadU8 (); + uint8_t byte3 = ReadU8 (); + uint32_t data = byte3; + data <<= 8; + data |= byte2; + data <<= 8; + data |= byte1; + data <<= 8; + data |= byte0; + return data; +} + +#endif /* TAG_BUFFER_USE_INLINE */ + + void TagBuffer::WriteU64 (uint64_t data) { @@ -73,41 +118,6 @@ TagBuffer::Write (const uint8_t *buffer, uint32_t size) WriteU8 (*buffer); } } -uint8_t -TagBuffer::ReadU8 (void) -{ - NS_ASSERT (m_current + 1 <= m_end); - uint8_t v; - v = *m_current; - m_current++; - return v; -} -uint16_t -TagBuffer::ReadU16 (void) -{ - uint8_t byte0 = ReadU8 (); - uint8_t byte1 = ReadU8 (); - uint16_t data = byte1; - data <<= 8; - data |= byte0; - return data; -} -uint32_t -TagBuffer::ReadU32 (void) -{ - uint8_t byte0 = ReadU8 (); - uint8_t byte1 = ReadU8 (); - uint8_t byte2 = ReadU8 (); - uint8_t byte3 = ReadU8 (); - uint32_t data = byte3; - data <<= 8; - data |= byte2; - data <<= 8; - data |= byte1; - data <<= 8; - data |= byte0; - return data; -} uint64_t TagBuffer::ReadU64 (void) { @@ -180,3 +190,4 @@ TagBuffer::CopyFrom (TagBuffer o) } } // namespace ns3 + diff --git a/src/common/tag-buffer.h b/src/common/tag-buffer.h index bc5b00044..2e5836a21 100644 --- a/src/common/tag-buffer.h +++ b/src/common/tag-buffer.h @@ -22,6 +22,14 @@ #include +#define TAG_BUFFER_USE_INLINE 1 + +#ifdef TAG_BUFFER_USE_INLINE +#define TAG_BUFFER_INLINE inline +#else +#define TAG_BUFFER_INLINE +#endif + namespace ns3 { /** @@ -36,15 +44,15 @@ public: TagBuffer (uint8_t *start, uint8_t *end); void TrimAtEnd (uint32_t trim); - void WriteU8 (uint8_t v); - void WriteU16 (uint16_t v); - void WriteU32 (uint32_t v); + TAG_BUFFER_INLINE void WriteU8 (uint8_t v); + TAG_BUFFER_INLINE void WriteU16 (uint16_t v); + TAG_BUFFER_INLINE void WriteU32 (uint32_t v); void WriteU64 (uint64_t v); void WriteDouble (double v); void Write (const uint8_t *buffer, uint32_t size); - uint8_t ReadU8 (void); - uint16_t ReadU16 (void); - uint32_t ReadU32 (void); + TAG_BUFFER_INLINE uint8_t ReadU8 (void); + TAG_BUFFER_INLINE uint16_t ReadU16 (void); + TAG_BUFFER_INLINE uint32_t ReadU32 (void); uint64_t ReadU64 (void); double ReadDouble (void); void Read (uint8_t *buffer, uint32_t size); @@ -58,4 +66,74 @@ private: } // namespace ns3 +#ifdef TAG_BUFFER_USE_INLINE + +#include "ns3/assert.h" + +namespace ns3 { + +void +TagBuffer::WriteU8 (uint8_t v) +{ + NS_ASSERT (m_current + 1 <= m_end); + *m_current = v; + m_current++; +} + +void +TagBuffer::WriteU16 (uint16_t data) +{ + WriteU8 ((data >> 0) & 0xff); + WriteU8 ((data >> 8) & 0xff); +} +void +TagBuffer::WriteU32 (uint32_t data) +{ + WriteU8 ((data >> 0) & 0xff); + WriteU8 ((data >> 8) & 0xff); + WriteU8 ((data >> 16) & 0xff); + WriteU8 ((data >> 24) & 0xff); +} + +uint8_t +TagBuffer::ReadU8 (void) +{ + NS_ASSERT (m_current + 1 <= m_end); + uint8_t v; + v = *m_current; + m_current++; + return v; +} + +uint16_t +TagBuffer::ReadU16 (void) +{ + uint8_t byte0 = ReadU8 (); + uint8_t byte1 = ReadU8 (); + uint16_t data = byte1; + data <<= 8; + data |= byte0; + return data; +} +uint32_t +TagBuffer::ReadU32 (void) +{ + uint8_t byte0 = ReadU8 (); + uint8_t byte1 = ReadU8 (); + uint8_t byte2 = ReadU8 (); + uint8_t byte3 = ReadU8 (); + uint32_t data = byte3; + data <<= 8; + data |= byte2; + data <<= 8; + data |= byte1; + data <<= 8; + data |= byte0; + return data; +} + +} // namespace ns3 + +#endif /* TAG_BUFFER_USE_INLINE */ + #endif /* TAG_BUFFER_H */