diff --git a/code/IOStreamBuffer.h b/code/IOStreamBuffer.h index 6ca37b6eb..d7528de7e 100644 --- a/code/IOStreamBuffer.h +++ b/code/IOStreamBuffer.h @@ -284,11 +284,17 @@ bool IOStreamBuffer::getNextDataLine( std::vector &buffer, T continuationT return true; } +static +inline +bool isEndOfCache( size_t pos, size_t cacheSize ) { + return ( pos == cacheSize ); +} + template inline bool IOStreamBuffer::getNextLine(std::vector &buffer) { buffer.resize(m_cacheSize); - if (m_cachePos == m_cacheSize || 0 == m_filePos) { + if ( isEndOfCache( m_cachePos, m_cacheSize ) || 0 == m_filePos) { if (!readNextBlock()) { return false; } @@ -300,11 +306,16 @@ bool IOStreamBuffer::getNextLine(std::vector &buffer) { ++m_cachePos; } ++m_cachePos; + if ( isEndOfCache( m_cachePos, m_cacheSize ) ) { + if ( !readNextBlock() ) { + return false; + } + } } size_t i = 0; - while (!IsLineEnd(m_cache[m_cachePos])) { - buffer[i] = m_cache[m_cachePos]; + while (!IsLineEnd(m_cache[ m_cachePos ])) { + buffer[i] = m_cache[ m_cachePos ]; m_cachePos++; i++; if (m_cachePos >= m_cacheSize) {