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

@@ -22,8 +22,6 @@ namespace Nz
void Clear();
bool EndOfStream() const override;
UInt64 GetSize() const override;
EmptyStream& operator=(const EmptyStream&) = default;
@@ -34,6 +32,7 @@ namespace Nz
std::size_t ReadBlock(void* buffer, std::size_t size) override;
bool SeekStreamCursor(UInt64 offset) override;
UInt64 TellStreamCursor() const override;
bool TestStreamEnd() const override;
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
UInt64 m_size;

View File

@@ -35,9 +35,6 @@ namespace Nz
bool Delete();
bool EndOfFile() const;
bool EndOfStream() const override;
bool Exists() const;
std::filesystem::path GetDirectory() const override;
@@ -64,6 +61,7 @@ namespace Nz
std::size_t ReadBlock(void* buffer, std::size_t size) override;
bool SeekStreamCursor(UInt64 offset) override;
UInt64 TellStreamCursor() const override;
bool TestStreamEnd() const override;
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
std::filesystem::path m_filePath;

View File

@@ -26,8 +26,6 @@ namespace Nz
void Clear();
bool EndOfStream() const override;
inline ByteArray& GetBuffer();
inline const ByteArray& GetBuffer() const;
UInt64 GetSize() const override;
@@ -42,6 +40,7 @@ namespace Nz
std::size_t ReadBlock(void* buffer, std::size_t size) override;
bool SeekStreamCursor(UInt64 offset) override;
UInt64 TellStreamCursor() const override;
bool TestStreamEnd() const override;
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
MovablePtr<ByteArray> m_buffer;

View File

@@ -21,8 +21,6 @@ namespace Nz
MemoryView(MemoryView&&) = delete; ///TODO
~MemoryView() = default;
bool EndOfStream() const override;
UInt64 GetSize() const override;
MemoryView& operator=(const MemoryView&) = delete;
@@ -33,6 +31,7 @@ namespace Nz
std::size_t ReadBlock(void* buffer, std::size_t size) override;
bool SeekStreamCursor(UInt64 offset) override;
UInt64 TellStreamCursor() const override;
bool TestStreamEnd() const override;
std::size_t WriteBlock(const void* buffer, std::size_t size) override;
UInt8* m_ptr;

View File

@@ -25,7 +25,7 @@ namespace Nz
Stream(Stream&&) noexcept = default;
virtual ~Stream();
virtual bool EndOfStream() const = 0;
bool EndOfStream() const;
inline void EnableBuffering(bool buffering, std::size_t bufferSize = DefaultBufferSize);
inline void EnableTextMode(bool textMode);
@@ -67,6 +67,7 @@ namespace Nz
virtual std::size_t ReadBlock(void* buffer, std::size_t size) = 0;
virtual bool SeekStreamCursor(UInt64 offset) = 0;
virtual UInt64 TellStreamCursor() const = 0;
virtual bool TestStreamEnd() const = 0;
virtual std::size_t WriteBlock(const void* buffer, std::size_t size) = 0;
std::size_t m_bufferCapacity;

View File

@@ -4,6 +4,7 @@
#include <Nazara/Core/Stream.hpp>
#include <Nazara/Core/Error.hpp>
#include <cassert>
#include <Nazara/Core/Debug.hpp>
namespace Nz
@@ -140,29 +141,6 @@ namespace Nz
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
* \return Size of the writing