Fix buffering issues

This commit is contained in:
SirLynix
2022-04-19 13:38:44 +02:00
parent d9ab6720d8
commit 138f2b88b3
14 changed files with 99 additions and 112 deletions

View File

@@ -23,6 +23,17 @@ namespace Nz
Stream::~Stream() = default;
bool Stream::EndOfStream() const
{
if (m_bufferCapacity > 0)
{
if (m_bufferOffset < m_bufferSize)
return false;
}
return TestStreamEnd();
}
/*!
* \brief Gets the directory of the stream
* \return Empty string (meant to be virtual)
@@ -91,6 +102,7 @@ namespace Nz
if (size > m_bufferCapacity)
{
// Unbuffered read
m_bufferOffset = 0;
m_bufferSize = 0;
std::size_t blockSize = ReadBlock(ptr, size);
m_bufferCursor += blockSize;
@@ -201,6 +213,30 @@ namespace Nz
return line;
}
bool Stream::SetCursorPos(UInt64 offset)
{
if (m_bufferCapacity == 0)
return SeekStreamCursor(offset);
else
{
assert(m_bufferCursor >= m_bufferSize);
if (offset < m_bufferCursor && offset >= m_bufferCursor - m_bufferSize)
m_bufferOffset = offset - (m_bufferCursor - m_bufferSize);
else
{
// Out of buffer
if (!SeekStreamCursor(offset))
return false;
m_bufferCursor = offset;
m_bufferOffset = 0;
m_bufferSize = 0;
}
return true;
}
}
/*!
* \brief Writes a ByteArray into the stream
* \return true if successful