Fix buffering issues
This commit is contained in:
parent
d9ab6720d8
commit
138f2b88b3
|
|
@ -22,8 +22,6 @@ namespace Nz
|
||||||
|
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
bool EndOfStream() const override;
|
|
||||||
|
|
||||||
UInt64 GetSize() const override;
|
UInt64 GetSize() const override;
|
||||||
|
|
||||||
EmptyStream& operator=(const EmptyStream&) = default;
|
EmptyStream& operator=(const EmptyStream&) = default;
|
||||||
|
|
@ -34,6 +32,7 @@ namespace Nz
|
||||||
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
||||||
bool SeekStreamCursor(UInt64 offset) override;
|
bool SeekStreamCursor(UInt64 offset) override;
|
||||||
UInt64 TellStreamCursor() const override;
|
UInt64 TellStreamCursor() const override;
|
||||||
|
bool TestStreamEnd() const override;
|
||||||
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
||||||
|
|
||||||
UInt64 m_size;
|
UInt64 m_size;
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,6 @@ namespace Nz
|
||||||
|
|
||||||
bool Delete();
|
bool Delete();
|
||||||
|
|
||||||
bool EndOfFile() const;
|
|
||||||
bool EndOfStream() const override;
|
|
||||||
|
|
||||||
bool Exists() const;
|
bool Exists() const;
|
||||||
|
|
||||||
std::filesystem::path GetDirectory() const override;
|
std::filesystem::path GetDirectory() const override;
|
||||||
|
|
@ -64,6 +61,7 @@ namespace Nz
|
||||||
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
||||||
bool SeekStreamCursor(UInt64 offset) override;
|
bool SeekStreamCursor(UInt64 offset) override;
|
||||||
UInt64 TellStreamCursor() const override;
|
UInt64 TellStreamCursor() const override;
|
||||||
|
bool TestStreamEnd() const override;
|
||||||
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
||||||
|
|
||||||
std::filesystem::path m_filePath;
|
std::filesystem::path m_filePath;
|
||||||
|
|
|
||||||
|
|
@ -26,8 +26,6 @@ namespace Nz
|
||||||
|
|
||||||
void Clear();
|
void Clear();
|
||||||
|
|
||||||
bool EndOfStream() const override;
|
|
||||||
|
|
||||||
inline ByteArray& GetBuffer();
|
inline ByteArray& GetBuffer();
|
||||||
inline const ByteArray& GetBuffer() const;
|
inline const ByteArray& GetBuffer() const;
|
||||||
UInt64 GetSize() const override;
|
UInt64 GetSize() const override;
|
||||||
|
|
@ -42,6 +40,7 @@ namespace Nz
|
||||||
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
||||||
bool SeekStreamCursor(UInt64 offset) override;
|
bool SeekStreamCursor(UInt64 offset) override;
|
||||||
UInt64 TellStreamCursor() const override;
|
UInt64 TellStreamCursor() const override;
|
||||||
|
bool TestStreamEnd() const override;
|
||||||
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
||||||
|
|
||||||
MovablePtr<ByteArray> m_buffer;
|
MovablePtr<ByteArray> m_buffer;
|
||||||
|
|
|
||||||
|
|
@ -21,8 +21,6 @@ namespace Nz
|
||||||
MemoryView(MemoryView&&) = delete; ///TODO
|
MemoryView(MemoryView&&) = delete; ///TODO
|
||||||
~MemoryView() = default;
|
~MemoryView() = default;
|
||||||
|
|
||||||
bool EndOfStream() const override;
|
|
||||||
|
|
||||||
UInt64 GetSize() const override;
|
UInt64 GetSize() const override;
|
||||||
|
|
||||||
MemoryView& operator=(const MemoryView&) = delete;
|
MemoryView& operator=(const MemoryView&) = delete;
|
||||||
|
|
@ -33,6 +31,7 @@ namespace Nz
|
||||||
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
std::size_t ReadBlock(void* buffer, std::size_t size) override;
|
||||||
bool SeekStreamCursor(UInt64 offset) override;
|
bool SeekStreamCursor(UInt64 offset) override;
|
||||||
UInt64 TellStreamCursor() const override;
|
UInt64 TellStreamCursor() const override;
|
||||||
|
bool TestStreamEnd() const override;
|
||||||
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
||||||
|
|
||||||
UInt8* m_ptr;
|
UInt8* m_ptr;
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ namespace Nz
|
||||||
Stream(Stream&&) noexcept = default;
|
Stream(Stream&&) noexcept = default;
|
||||||
virtual ~Stream();
|
virtual ~Stream();
|
||||||
|
|
||||||
virtual bool EndOfStream() const = 0;
|
bool EndOfStream() const;
|
||||||
|
|
||||||
inline void EnableBuffering(bool buffering, std::size_t bufferSize = DefaultBufferSize);
|
inline void EnableBuffering(bool buffering, std::size_t bufferSize = DefaultBufferSize);
|
||||||
inline void EnableTextMode(bool textMode);
|
inline void EnableTextMode(bool textMode);
|
||||||
|
|
@ -67,6 +67,7 @@ namespace Nz
|
||||||
virtual std::size_t ReadBlock(void* buffer, std::size_t size) = 0;
|
virtual std::size_t ReadBlock(void* buffer, std::size_t size) = 0;
|
||||||
virtual bool SeekStreamCursor(UInt64 offset) = 0;
|
virtual bool SeekStreamCursor(UInt64 offset) = 0;
|
||||||
virtual UInt64 TellStreamCursor() const = 0;
|
virtual UInt64 TellStreamCursor() const = 0;
|
||||||
|
virtual bool TestStreamEnd() const = 0;
|
||||||
virtual std::size_t WriteBlock(const void* buffer, std::size_t size) = 0;
|
virtual std::size_t WriteBlock(const void* buffer, std::size_t size) = 0;
|
||||||
|
|
||||||
std::size_t m_bufferCapacity;
|
std::size_t m_bufferCapacity;
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include <Nazara/Core/Stream.hpp>
|
#include <Nazara/Core/Stream.hpp>
|
||||||
#include <Nazara/Core/Error.hpp>
|
#include <Nazara/Core/Error.hpp>
|
||||||
|
#include <cassert>
|
||||||
#include <Nazara/Core/Debug.hpp>
|
#include <Nazara/Core/Debug.hpp>
|
||||||
|
|
||||||
namespace Nz
|
namespace Nz
|
||||||
|
|
@ -140,29 +141,6 @@ namespace Nz
|
||||||
return (m_openMode & OpenMode::WriteOnly) != 0;
|
return (m_openMode & OpenMode::WriteOnly) != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline bool Stream::SetCursorPos(UInt64 offset)
|
|
||||||
{
|
|
||||||
if (m_bufferCapacity == 0)
|
|
||||||
return SeekStreamCursor(offset);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (offset >= m_bufferCursor && offset - m_bufferCursor < m_bufferSize)
|
|
||||||
m_bufferOffset += offset - m_bufferCursor;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Out of buffer
|
|
||||||
if (!SeekStreamCursor(offset))
|
|
||||||
return false;
|
|
||||||
|
|
||||||
m_bufferCursor = offset;
|
|
||||||
m_bufferOffset = 0;
|
|
||||||
m_bufferSize = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes in the stream the content of a buffer
|
* \brief Writes in the stream the content of a buffer
|
||||||
* \return Size of the writing
|
* \return Size of the writing
|
||||||
|
|
|
||||||
|
|
@ -35,8 +35,6 @@ namespace Nz
|
||||||
void EnableLowDelay(bool lowDelay);
|
void EnableLowDelay(bool lowDelay);
|
||||||
void EnableKeepAlive(bool keepAlive, UInt64 msTime = 10000, UInt64 msInterval = 1000);
|
void EnableKeepAlive(bool keepAlive, UInt64 msTime = 10000, UInt64 msInterval = 1000);
|
||||||
|
|
||||||
bool EndOfStream() const override;
|
|
||||||
|
|
||||||
inline UInt64 GetKeepAliveInterval() const;
|
inline UInt64 GetKeepAliveInterval() const;
|
||||||
inline UInt64 GetKeepAliveTime() const;
|
inline UInt64 GetKeepAliveTime() const;
|
||||||
inline IpAddress GetRemoteAddress() const;
|
inline IpAddress GetRemoteAddress() const;
|
||||||
|
|
@ -68,6 +66,7 @@ namespace Nz
|
||||||
void Reset(SocketHandle handle, const IpAddress& peerAddress);
|
void Reset(SocketHandle handle, const IpAddress& peerAddress);
|
||||||
bool SeekStreamCursor(UInt64 offset) override;
|
bool SeekStreamCursor(UInt64 offset) override;
|
||||||
UInt64 TellStreamCursor() const override;
|
UInt64 TellStreamCursor() const override;
|
||||||
|
bool TestStreamEnd() const override;
|
||||||
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
|
||||||
|
|
||||||
struct PendingPacket
|
struct PendingPacket
|
||||||
|
|
|
||||||
|
|
@ -23,15 +23,6 @@ namespace Nz
|
||||||
m_size = 0;
|
m_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Checks whether the stream reached the end of the stream
|
|
||||||
* \return Always false
|
|
||||||
*/
|
|
||||||
bool EmptyStream::EndOfStream() const
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the size of the raw memory (how many bytes would have been written on a regular stream)
|
* \brief Gets the size of the raw memory (how many bytes would have been written on a regular stream)
|
||||||
* \return Size occupied until now
|
* \return Size occupied until now
|
||||||
|
|
@ -83,6 +74,15 @@ namespace Nz
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks whether the stream reached the end of the stream
|
||||||
|
* \return Always false
|
||||||
|
*/
|
||||||
|
bool EmptyStream::TestStreamEnd() const
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes data
|
* \brief Writes data
|
||||||
* \return size
|
* \return size
|
||||||
|
|
|
||||||
|
|
@ -107,40 +107,6 @@ namespace Nz
|
||||||
return std::filesystem::remove(m_filePath);
|
return std::filesystem::remove(m_filePath);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Checks whether the file has reached the end
|
|
||||||
* \return true if cursor is at the end of the file
|
|
||||||
*
|
|
||||||
* \remark Produces a NazaraError if file is not open with NAZARA_CORE_SAFE defined
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool File::EndOfFile() const
|
|
||||||
{
|
|
||||||
#if NAZARA_CORE_SAFE
|
|
||||||
if (!IsOpen())
|
|
||||||
{
|
|
||||||
NazaraError("File not open");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return m_impl->EndOfFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Checks whether the file has reached the end of the stream
|
|
||||||
* \return true if cursor is at the end of the file
|
|
||||||
*
|
|
||||||
* \remark Produces a NazaraError if file is not open with NAZARA_CORE_SAFE defined
|
|
||||||
*
|
|
||||||
* \see EndOfFile
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool File::EndOfStream() const
|
|
||||||
{
|
|
||||||
return EndOfFile();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Checks whether the file exists
|
* \brief Checks whether the file exists
|
||||||
* \return true if file exists
|
* \return true if file exists
|
||||||
|
|
@ -373,6 +339,21 @@ namespace Nz
|
||||||
return m_impl->GetCursorPos();
|
return m_impl->GetCursorPos();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks whether the file has reached the end of the stream
|
||||||
|
* \return true if cursor is at the end of the file
|
||||||
|
*
|
||||||
|
* \remark Produces a NazaraError if file is not open with NAZARA_CORE_SAFE defined
|
||||||
|
*
|
||||||
|
* \see EndOfFile
|
||||||
|
*/
|
||||||
|
bool File::TestStreamEnd() const
|
||||||
|
{
|
||||||
|
NazaraAssert(IsOpen(), "File is not open");
|
||||||
|
|
||||||
|
return m_impl->EndOfFile();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes blocks
|
* \brief Writes blocks
|
||||||
* \return Number of blocks written
|
* \return Number of blocks written
|
||||||
|
|
@ -383,7 +364,6 @@ namespace Nz
|
||||||
* \remark Produces a NazaraAssert if file is not open
|
* \remark Produces a NazaraAssert if file is not open
|
||||||
* \remark Produces a NazaraAssert if buffer is nullptr
|
* \remark Produces a NazaraAssert if buffer is nullptr
|
||||||
*/
|
*/
|
||||||
|
|
||||||
std::size_t File::WriteBlock(const void* buffer, std::size_t size)
|
std::size_t File::WriteBlock(const void* buffer, std::size_t size)
|
||||||
{
|
{
|
||||||
NazaraAssert(IsOpen(), "File is not open");
|
NazaraAssert(IsOpen(), "File is not open");
|
||||||
|
|
|
||||||
|
|
@ -26,16 +26,6 @@ namespace Nz
|
||||||
m_pos = 0;
|
m_pos = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Checks whether the stream reached the end of the stream
|
|
||||||
* \return true if cursor is at the end of the stream
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool MemoryStream::EndOfStream() const
|
|
||||||
{
|
|
||||||
return m_pos >= m_buffer->size();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the size of the raw memory
|
* \brief Gets the size of the raw memory
|
||||||
* \return Size of the memory
|
* \return Size of the memory
|
||||||
|
|
@ -82,7 +72,7 @@ namespace Nz
|
||||||
|
|
||||||
std::size_t MemoryStream::ReadBlock(void* buffer, std::size_t size)
|
std::size_t MemoryStream::ReadBlock(void* buffer, std::size_t size)
|
||||||
{
|
{
|
||||||
if (EndOfStream())
|
if (TestStreamEnd())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
std::size_t readSize = std::min<std::size_t>(size, static_cast<std::size_t>(m_buffer->GetSize() - m_pos));
|
std::size_t readSize = std::min<std::size_t>(size, static_cast<std::size_t>(m_buffer->GetSize() - m_pos));
|
||||||
|
|
@ -116,6 +106,15 @@ namespace Nz
|
||||||
return m_pos;
|
return m_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks whether the stream reached the end of the stream
|
||||||
|
* \return true if cursor is at the end of the stream
|
||||||
|
*/
|
||||||
|
bool MemoryStream::TestStreamEnd() const
|
||||||
|
{
|
||||||
|
return m_pos >= m_buffer->size();
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes blocks
|
* \brief Writes blocks
|
||||||
* \return Number of blocks written
|
* \return Number of blocks written
|
||||||
|
|
|
||||||
|
|
@ -49,16 +49,6 @@ namespace Nz
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Checks whether the stream reached the end of the stream
|
|
||||||
* \return true if cursor is at the end of the stream
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool MemoryView::EndOfStream() const
|
|
||||||
{
|
|
||||||
return m_pos >= m_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the size of the raw memory
|
* \brief Gets the size of the raw memory
|
||||||
* \return Size of the memory
|
* \return Size of the memory
|
||||||
|
|
@ -119,6 +109,15 @@ namespace Nz
|
||||||
return m_pos;
|
return m_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks whether the stream reached the end of the stream
|
||||||
|
* \return true if cursor is at the end of the stream
|
||||||
|
*/
|
||||||
|
bool MemoryView::TestStreamEnd() const
|
||||||
|
{
|
||||||
|
return m_pos >= m_size;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes blocks
|
* \brief Writes blocks
|
||||||
* \return Number of blocks written
|
* \return Number of blocks written
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,17 @@ namespace Nz
|
||||||
|
|
||||||
Stream::~Stream() = default;
|
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
|
* \brief Gets the directory of the stream
|
||||||
* \return Empty string (meant to be virtual)
|
* \return Empty string (meant to be virtual)
|
||||||
|
|
@ -91,6 +102,7 @@ namespace Nz
|
||||||
if (size > m_bufferCapacity)
|
if (size > m_bufferCapacity)
|
||||||
{
|
{
|
||||||
// Unbuffered read
|
// Unbuffered read
|
||||||
|
m_bufferOffset = 0;
|
||||||
m_bufferSize = 0;
|
m_bufferSize = 0;
|
||||||
std::size_t blockSize = ReadBlock(ptr, size);
|
std::size_t blockSize = ReadBlock(ptr, size);
|
||||||
m_bufferCursor += blockSize;
|
m_bufferCursor += blockSize;
|
||||||
|
|
@ -201,6 +213,30 @@ namespace Nz
|
||||||
return line;
|
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
|
* \brief Writes a ByteArray into the stream
|
||||||
* \return true if successful
|
* \return true if successful
|
||||||
|
|
|
||||||
|
|
@ -137,16 +137,6 @@ namespace Nz
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
|
||||||
* \brief Checks whether the stream reached the end of the stream
|
|
||||||
* \return true if there is no more available bytes
|
|
||||||
*/
|
|
||||||
|
|
||||||
bool TcpClient::EndOfStream() const
|
|
||||||
{
|
|
||||||
return QueryAvailableBytes() == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Gets the size of the raw memory available
|
* \brief Gets the size of the raw memory available
|
||||||
* \return Size of the memory available
|
* \return Size of the memory available
|
||||||
|
|
@ -603,6 +593,15 @@ namespace Nz
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief Checks whether the stream reached the end of the stream
|
||||||
|
* \return true if there is no more available bytes
|
||||||
|
*/
|
||||||
|
bool TcpClient::TestStreamEnd() const
|
||||||
|
{
|
||||||
|
return QueryAvailableBytes() == 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Writes blocks
|
* \brief Writes blocks
|
||||||
* \return Number of blocks written
|
* \return Number of blocks written
|
||||||
|
|
@ -613,7 +612,6 @@ namespace Nz
|
||||||
* \remark Produces a NazaraAssert if buffer is nullptr
|
* \remark Produces a NazaraAssert if buffer is nullptr
|
||||||
* \remark Produces a NazaraAssert if socket is invalid
|
* \remark Produces a NazaraAssert if socket is invalid
|
||||||
*/
|
*/
|
||||||
|
|
||||||
std::size_t TcpClient::WriteBlock(const void* buffer, std::size_t size)
|
std::size_t TcpClient::WriteBlock(const void* buffer, std::size_t size)
|
||||||
{
|
{
|
||||||
NazaraAssert(buffer, "Invalid buffer");
|
NazaraAssert(buffer, "Invalid buffer");
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ SCENARIO("Buffering", "[CORE][BUFFERING]")
|
||||||
{
|
{
|
||||||
const char mem[] = "abcdefghijklmnopqrstuvwxyz";
|
const char mem[] = "abcdefghijklmnopqrstuvwxyz";
|
||||||
|
|
||||||
for (std::size_t bufferSize : { 1, 2, 3, 4, 7, 0xFFFF })
|
for (std::size_t bufferSize : { 1, 2, 3, 4, 6, 7, 0xFFFF })
|
||||||
{
|
{
|
||||||
Nz::MemoryView memView(mem, sizeof(mem));
|
Nz::MemoryView memView(mem, sizeof(mem));
|
||||||
memView.EnableBuffering(true, bufferSize);
|
memView.EnableBuffering(true, bufferSize);
|
||||||
|
|
@ -45,6 +45,7 @@ SCENARIO("Buffering", "[CORE][BUFFERING]")
|
||||||
AND_WHEN("Seeking at 10")
|
AND_WHEN("Seeking at 10")
|
||||||
{
|
{
|
||||||
memView.SetCursorPos(10);
|
memView.SetCursorPos(10);
|
||||||
|
CHECK(memView.GetCursorPos() == 10);
|
||||||
|
|
||||||
readBuffer.resize(2);
|
readBuffer.resize(2);
|
||||||
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
|
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
|
||||||
|
|
@ -55,6 +56,7 @@ SCENARIO("Buffering", "[CORE][BUFFERING]")
|
||||||
AND_WHEN("Seeking at 6 and reading")
|
AND_WHEN("Seeking at 6 and reading")
|
||||||
{
|
{
|
||||||
memView.SetCursorPos(6);
|
memView.SetCursorPos(6);
|
||||||
|
CHECK(memView.GetCursorPos() == 6);
|
||||||
|
|
||||||
readBuffer.resize(2);
|
readBuffer.resize(2);
|
||||||
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
|
REQUIRE(memView.Read(readBuffer.data(), readBuffer.size()) == readBuffer.size());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue