From 944ea0e5b613d901ba834dc225eb9d379b750bd3 Mon Sep 17 00:00:00 2001 From: crupest Date: Mon, 12 Feb 2024 15:47:31 +0800 Subject: WORKING: make Buffer track two sides. --- src/common/io/BufferStream.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 src/common/io/BufferStream.cpp (limited to 'src/common/io/BufferStream.cpp') diff --git a/src/common/io/BufferStream.cpp b/src/common/io/BufferStream.cpp new file mode 100644 index 00000000..d4780f7a --- /dev/null +++ b/src/common/io/BufferStream.cpp @@ -0,0 +1,45 @@ +#include "cru/common/io/BufferStream.h" +#include +#include "cru/common/io/Stream.h" + +namespace cru::io { +BufferStream::BufferStream(const BufferStreamOptions& options) { + block_size_ = + options.block_size <= 0 ? kDefaultBlockSize : options.block_size; + total_size_limit_ = options.total_size_limit < 0 ? kDefaultTotalSizeLimit + : options.total_size_limit; + block_count_limit_ = total_size_limit_ / block_size_; + + eof_ = false; +} + +bool BufferStream::CanSeek() { + CheckClosed(); + return false; +} + +Index BufferStream::Seek(Index offset, SeekOrigin origin) { + CheckClosed(); + throw StreamOperationNotSupportedException( + u"BufferStream does not support seeking."); +} + +bool BufferStream::CanRead() { + CheckClosed(); + return true; } + +Index BufferStream::Read(std::byte* buffer, Index offset, Index size) { + std::unique_lock lock(mutex_); + + Index written_size = 0; + + if (eof_ && buffer_list_.empty()) { + return 0; + } + + while (!buffer_list_.empty()) { + + } +} + +} // namespace cru::io -- cgit v1.2.3