input/async: pass std::span to AppendToBuffer()
This commit is contained in:
parent
ce13d82657
commit
c71958af4b
@ -217,23 +217,28 @@ AsyncInputStream::CommitWriteBuffer(size_t nbytes) noexcept
|
||||
}
|
||||
|
||||
void
|
||||
AsyncInputStream::AppendToBuffer(const void *data, size_t append_size) noexcept
|
||||
AsyncInputStream::AppendToBuffer(std::span<const std::byte> src) noexcept
|
||||
{
|
||||
auto w = buffer.Write();
|
||||
assert(!w.empty());
|
||||
|
||||
size_t nbytes = std::min(w.size(), append_size);
|
||||
memcpy(w.data(), data, nbytes);
|
||||
buffer.Append(nbytes);
|
||||
std::span<const std::byte> second{};
|
||||
|
||||
const size_t remaining = append_size - nbytes;
|
||||
if (remaining > 0) {
|
||||
if (w.size() < src.size()) {
|
||||
second = src.subspan(w.size());
|
||||
src = src.first(w.size());
|
||||
}
|
||||
|
||||
std::copy(src.begin(), src.end(), w.begin());
|
||||
buffer.Append(src.size());
|
||||
|
||||
if (!second.empty()) {
|
||||
w = buffer.Write();
|
||||
assert(!w.empty());
|
||||
assert(w.size() >= remaining);
|
||||
assert(w.size() >= second.size());
|
||||
|
||||
memcpy(w.data(), (const std::byte *)data + nbytes, remaining);
|
||||
buffer.Append(remaining);
|
||||
std::copy(second.begin(), second.end(), w.begin());
|
||||
buffer.Append(second.size());
|
||||
}
|
||||
|
||||
if (!IsReady())
|
||||
|
@ -139,7 +139,7 @@ protected:
|
||||
* Append data to the buffer. The size must fit into the
|
||||
* buffer; see GetBufferSpace().
|
||||
*/
|
||||
void AppendToBuffer(const void *data, size_t append_size) noexcept;
|
||||
void AppendToBuffer(std::span<const std::byte> src) noexcept;
|
||||
|
||||
/**
|
||||
* Implement code here that will resume the stream after it
|
||||
|
@ -353,7 +353,7 @@ CurlInputStream::OnData(std::span<const std::byte> data)
|
||||
throw CurlResponseHandler::Pause{};
|
||||
}
|
||||
|
||||
AppendToBuffer(data.data(), data.size());
|
||||
AppendToBuffer(data);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -164,7 +164,8 @@ NfsInputStream::OnNfsFileRead(std::span<const std::byte> src) noexcept
|
||||
const std::scoped_lock<Mutex> protect(mutex);
|
||||
assert(!IsBufferFull());
|
||||
assert(IsBufferFull() == (GetBufferSpace() == 0));
|
||||
AppendToBuffer(src.data(), src.size());
|
||||
|
||||
AppendToBuffer(src);
|
||||
|
||||
next_offset += src.size();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user