StreamReader: fix out-of-range exception

pull/1366/head
Kim Kulling 2017-07-27 20:49:49 +02:00
parent b394546e55
commit a2bbf76cf4
1 changed files with 14 additions and 3 deletions

View File

@ -284,11 +284,17 @@ bool IOStreamBuffer<T>::getNextDataLine( std::vector<T> &buffer, T continuationT
return true; return true;
} }
static
inline
bool isEndOfCache( size_t pos, size_t cacheSize ) {
return ( pos == cacheSize );
}
template<class T> template<class T>
inline inline
bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) { bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) {
buffer.resize(m_cacheSize); buffer.resize(m_cacheSize);
if (m_cachePos == m_cacheSize || 0 == m_filePos) { if ( isEndOfCache( m_cachePos, m_cacheSize ) || 0 == m_filePos) {
if (!readNextBlock()) { if (!readNextBlock()) {
return false; return false;
} }
@ -300,11 +306,16 @@ bool IOStreamBuffer<T>::getNextLine(std::vector<T> &buffer) {
++m_cachePos; ++m_cachePos;
} }
++m_cachePos; ++m_cachePos;
if ( isEndOfCache( m_cachePos, m_cacheSize ) ) {
if ( !readNextBlock() ) {
return false;
}
}
} }
size_t i = 0; size_t i = 0;
while (!IsLineEnd(m_cache[m_cachePos])) { while (!IsLineEnd(m_cache[ m_cachePos ])) {
buffer[i] = m_cache[m_cachePos]; buffer[i] = m_cache[ m_cachePos ];
m_cachePos++; m_cachePos++;
i++; i++;
if (m_cachePos >= m_cacheSize) { if (m_cachePos >= m_cacheSize) {