Fix buffering issues
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user