From d861d799d2f614a6b58a8f0c0bc6a8911ad0dcfd Mon Sep 17 00:00:00 2001 From: crupest Date: Sun, 12 May 2024 00:19:16 +0800 Subject: WORKING: fix Buffer and implement BufferStream::Read. --- src/common/Buffer.cpp | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'src/common/Buffer.cpp') diff --git a/src/common/Buffer.cpp b/src/common/Buffer.cpp index 00bbd166..67e67735 100644 --- a/src/common/Buffer.cpp +++ b/src/common/Buffer.cpp @@ -76,7 +76,8 @@ void Buffer::ResizeBuffer(Index new_size, bool preserve_used) { } } -Index Buffer::PushFront(std::byte* other, Index other_size, bool use_memmove) { +Index Buffer::PushFront(const std::byte* other, Index other_size, + bool use_memmove) { auto copy_size = std::min(used_begin_, other_size); if (copy_size) { @@ -88,7 +89,8 @@ Index Buffer::PushFront(std::byte* other, Index other_size, bool use_memmove) { return copy_size; } -Index Buffer::PushBack(std::byte* other, Index other_size, bool use_memmove) { +Index Buffer::PushBack(const std::byte* other, Index other_size, + bool use_memmove) { auto copy_size = std::min(size_ - used_end_, other_size); if (copy_size) { @@ -106,12 +108,36 @@ Index Buffer::PopFront(Index size) { return move; } +Index Buffer::PopFront(std::byte* buffer, Index size, bool use_memmove) { + auto pop_size = std::min(GetUsedSize(), size); + + if (pop_size) { + used_begin_ += pop_size; + (use_memmove ? std::memmove : std::memcpy)( + buffer, GetUsedBeginPtr() - pop_size, pop_size); + } + + return pop_size; +} + Index Buffer::PopEnd(Index size) { auto move = std::min(size_ - used_end_, size); used_end_ += move; return move; } +Index Buffer::PopEnd(std::byte* buffer, Index size, bool use_memmove) { + auto pop_size = std::min(GetUsedSize(), size); + + if (pop_size) { + used_end_ -= pop_size; + (use_memmove ? std::memmove : std::memcpy)(buffer, GetUsedEndPtr(), + pop_size); + } + + return pop_size; +} + void Buffer::Copy_(const Buffer& other) { if (other.ptr_ == nullptr) { ptr_ = nullptr; -- cgit v1.2.3