From bd1adba17e25eb1804b6fe82642654094a55cb71 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Fri, 7 Sep 2007 19:22:20 +0200 Subject: [PATCH] rewrite Iterator::WriteU8 --- src/common/buffer.cc | 34 ++++++++++++++++++++++++++++------ 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/src/common/buffer.cc b/src/common/buffer.cc index 8bef1500e..659a20c46 100644 --- a/src/common/buffer.cc +++ b/src/common/buffer.cc @@ -227,6 +227,7 @@ Buffer::End (void) const Buffer::Iterator::Iterator () : m_zeroStart (0), m_zeroEnd (0), + m_dataStart (0), m_dataEnd (0), m_current (0), m_data (0) @@ -299,7 +300,7 @@ Buffer::Iterator::IsEnd (void) const bool Buffer::Iterator::IsStart (void) const { - return m_current == 0; + return m_current == m_dataStart; } uint32_t @@ -342,15 +343,36 @@ Buffer::Iterator::Write (Iterator start, Iterator end) void Buffer::Iterator::WriteU8 (uint8_t data, uint32_t len) { - uint8_t *current = m_data + GetIndex (len); - memset (current, data, len); - m_current += len; + for (uint32_t i = 0; i < len; i++) + { + WriteU8 (data); + } } void Buffer::Iterator::WriteU8 (uint8_t data) { - m_data[GetIndex (1)] = data; - m_current++; + if (m_current < m_dataStart) + { + // XXX trying to write outside of data area + } + else if (m_current < m_zeroStart) + { + m_data[m_current] = data; + m_current++; + } + else if (m_current < m_zeroEnd) + { + // XXX trying to write in zero area + } + else if (m_current < m_dataEnd) + { + m_data[m_current - (m_zeroEnd-m_zeroStart)] = data; + m_current++; + } + else + { + // XXX trying to write outside of data area + } } void Buffer::Iterator::WriteU16 (uint16_t data)