diff --git a/src/common/buffer.cc b/src/common/buffer.cc index dae960ee2..e30dc7b39 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -216,15 +216,14 @@ Buffer::GetSize (void) const Buffer::Iterator Buffer::Begin (void) const { - return Buffer::Iterator (this, 0); + return Buffer::Iterator (this); } Buffer::Iterator Buffer::End (void) const { - return Buffer::Iterator (this, GetSize ()); + return Buffer::Iterator (this, false); } - Buffer::Iterator::Iterator () : m_zeroStart (0), m_zeroEnd (0), @@ -232,13 +231,26 @@ Buffer::Iterator::Iterator () m_current (0), m_data (0) {} -Buffer::Iterator::Iterator (Buffer const*buffer, uint32_t current) - : m_zeroStart (buffer->m_data->m_initialStart-buffer->m_start), - m_zeroEnd (m_zeroStart+buffer->m_zeroAreaSize), - m_dataEnd (buffer->GetSize ()), - m_current (current), - m_data (buffer->m_data->m_data+buffer->m_start) -{} +Buffer::Iterator::Iterator (Buffer const*buffer) +{ + Construct (buffer); + m_current = m_dataStart; +} +Buffer::Iterator::Iterator (Buffer const*buffer, bool dummy) +{ + Construct (buffer); + m_current = m_dataEnd; +} + +void +Buffer::Iterator::Construct (const Buffer *buffer) +{ + m_zeroStart = buffer->m_data->m_initialStart-buffer->m_start; + m_zeroEnd = m_zeroStart+buffer->m_zeroAreaSize; + m_dataStart = 0; + m_dataEnd = buffer->GetSize (); + m_data = buffer->m_data->m_data+buffer->m_start; +} void Buffer::Iterator::Next (void) diff --git a/src/common/buffer.h b/src/common/buffer.h index 4fac7835e..9a68c53ff 100644 --- a/src/common/buffer.h +++ b/src/common/buffer.h @@ -237,10 +237,13 @@ public: void Read (uint8_t *buffer, uint16_t size); private: friend class Buffer; - Iterator (Buffer const*buffer, uint32_t m_current); + Iterator (Buffer const*buffer); + Iterator (Buffer const*buffer, bool); + void Construct (const Buffer *buffer); uint32_t GetIndex (uint32_t n); uint32_t m_zeroStart; uint32_t m_zeroEnd; + uint32_t m_dataStart; uint32_t m_dataEnd; uint32_t m_current; uint8_t *m_data;