diff --git a/src/common/tag-list.cc b/src/common/tag-list.cc index 13587c21d..9ccace2e8 100644 --- a/src/common/tag-list.cc +++ b/src/common/tag-list.cc @@ -25,6 +25,7 @@ NS_LOG_COMPONENT_DEFINE ("TagList"); #define USE_FREE_LIST 1 #define FREE_LIST_SIZE 1000 +#define OFFSET_MAX (2147483647) namespace ns3 { @@ -99,7 +100,7 @@ TagList::Iterator::PrepareForNext (void) } } } -TagList::Iterator::Iterator (uint8_t *start, uint8_t *end, uint32_t offsetStart, uint32_t offsetEnd) +TagList::Iterator::Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd) : m_current (start), m_end (end), m_offsetStart (offsetStart), @@ -158,7 +159,7 @@ TagList::~TagList () } TagBuffer -TagList::Add (TypeId tid, uint32_t bufferSize, uint32_t start, uint32_t end) +TagList::Add (TypeId tid, uint32_t bufferSize, int32_t start, int32_t end) { NS_LOG_FUNCTION (this << tid << bufferSize << start << end); uint32_t spaceNeeded = m_used + bufferSize + 4 + 4 + 4 + 4; @@ -191,7 +192,7 @@ void TagList::Add (const TagList &o) { NS_LOG_FUNCTION (this << &o); - TagList::Iterator i = o.Begin (0, 0xffffffff); + TagList::Iterator i = o.BeginAll (); while (i.HasNext ()) { TagList::Iterator::Item item = i.Next (); @@ -210,7 +211,16 @@ TagList::RemoveAll (void) } TagList::Iterator -TagList::Begin (uint32_t offsetStart, uint32_t offsetEnd) const +TagList::BeginAll (void) const +{ + NS_LOG_FUNCTION (this); + // I am not totally sure but I might need to use + // INT32_MIN instead of zero below. + return Begin (0, OFFSET_MAX); +} + +TagList::Iterator +TagList::Begin (int32_t offsetStart, int32_t offsetEnd) const { NS_LOG_FUNCTION (this << offsetStart << offsetEnd); if (m_data == 0) @@ -224,10 +234,10 @@ TagList::Begin (uint32_t offsetStart, uint32_t offsetEnd) const } bool -TagList::IsDirtyAtEnd (uint32_t appendOffset) +TagList::IsDirtyAtEnd (int32_t appendOffset) { NS_LOG_FUNCTION (this << appendOffset); - TagList::Iterator i = Begin (0, 0xffffffff); + TagList::Iterator i = BeginAll (); while (i.HasNext ()) { TagList::Iterator::Item item = i.Next (); @@ -240,10 +250,10 @@ TagList::IsDirtyAtEnd (uint32_t appendOffset) } bool -TagList::IsDirtyAtStart (uint32_t prependOffset) +TagList::IsDirtyAtStart (int32_t prependOffset) { NS_LOG_FUNCTION (this << prependOffset); - TagList::Iterator i = Begin (0, 0xffffffff); + TagList::Iterator i = BeginAll (); while (i.HasNext ()) { TagList::Iterator::Item item = i.Next (); @@ -256,7 +266,7 @@ TagList::IsDirtyAtStart (uint32_t prependOffset) } void -TagList::AddAtEnd (int32_t adjustment, uint32_t appendOffset) +TagList::AddAtEnd (int32_t adjustment, int32_t appendOffset) { NS_LOG_FUNCTION (this << adjustment << appendOffset); if (adjustment == 0 && !IsDirtyAtEnd (appendOffset)) @@ -264,7 +274,7 @@ TagList::AddAtEnd (int32_t adjustment, uint32_t appendOffset) return; } TagList list; - TagList::Iterator i = Begin (0, 0xffffffff); + TagList::Iterator i = BeginAll (); while (i.HasNext ()) { TagList::Iterator::Item item = i.Next (); @@ -290,7 +300,7 @@ TagList::AddAtEnd (int32_t adjustment, uint32_t appendOffset) } void -TagList::AddAtStart (int32_t adjustment, uint32_t prependOffset) +TagList::AddAtStart (int32_t adjustment, int32_t prependOffset) { NS_LOG_FUNCTION (this << adjustment << prependOffset); if (adjustment == 0 && !IsDirtyAtStart (prependOffset)) @@ -298,7 +308,7 @@ TagList::AddAtStart (int32_t adjustment, uint32_t prependOffset) return; } TagList list; - TagList::Iterator i = Begin (0, 0xffffffff); + TagList::Iterator i = BeginAll (); while (i.HasNext ()) { TagList::Iterator::Item item = i.Next (); diff --git a/src/common/tag-list.h b/src/common/tag-list.h index 76a659e91..c21e515c6 100644 --- a/src/common/tag-list.h +++ b/src/common/tag-list.h @@ -76,8 +76,8 @@ public: { TypeId tid; uint32_t size; - uint32_t start; - uint32_t end; + int32_t start; + int32_t end; TagBuffer buf; Item (TagBuffer buf); private: @@ -89,16 +89,16 @@ public: uint32_t GetOffsetStart (void) const; private: friend class TagList; - Iterator (uint8_t *start, uint8_t *end, uint32_t offsetStart, uint32_t offsetEnd); + Iterator (uint8_t *start, uint8_t *end, int32_t offsetStart, int32_t offsetEnd); void PrepareForNext (void); uint8_t *m_current; uint8_t *m_end; - uint32_t m_offsetStart; - uint32_t m_offsetEnd; + int32_t m_offsetStart; + int32_t m_offsetEnd; uint32_t m_nextTid; uint32_t m_nextSize; - uint32_t m_nextStart; - uint32_t m_nextEnd; + int32_t m_nextStart; + int32_t m_nextEnd; }; TagList (); @@ -116,7 +116,7 @@ public: * * */ - TagBuffer Add (TypeId tid, uint32_t bufferSize, uint32_t start, uint32_t end); + TagBuffer Add (TypeId tid, uint32_t bufferSize, int32_t start, int32_t end); /** * \param o the other list of tags to aggregate. @@ -138,24 +138,25 @@ public: * in this list: the boundaries of each tag as reported by their start and * end offsets will be included within the input offsetStart and offsetEnd. */ - TagList::Iterator Begin (uint32_t offsetStart, uint32_t offsetEnd) const; + TagList::Iterator Begin (int32_t offsetStart, int32_t offsetEnd) const; /** * Adjust the offsets stored internally by the adjustment delta and * make sure that all offsets are smaller than appendOffset which represents * the location where new bytes have been added to the byte buffer. */ - void AddAtEnd (int32_t adjustment, uint32_t appendOffset); + void AddAtEnd (int32_t adjustment, int32_t appendOffset); /** * Adjust the offsets stored internally by the adjustment delta and * make sure that all offsets are bigger than prependOffset which represents * the location where new bytes have been added to the byte buffer. */ - void AddAtStart (int32_t adjustment, uint32_t prependOffset); + void AddAtStart (int32_t adjustment, int32_t prependOffset); private: - bool IsDirtyAtEnd (uint32_t appendOffset); - bool IsDirtyAtStart (uint32_t prependOffset); + bool IsDirtyAtEnd (int32_t appendOffset); + bool IsDirtyAtStart (int32_t prependOffset); + TagList::Iterator BeginAll (void) const; struct TagListData *Allocate (uint32_t size); void Deallocate (struct TagListData *data);