input/InputStream: pass std::span<std::byte> to Read()

This commit is contained in:
Max Kellermann
2024-05-13 10:47:57 +02:00
parent f28d10d934
commit 34f7b38f39
66 changed files with 248 additions and 274 deletions

View File

@@ -42,7 +42,7 @@ public:
#ifdef ENABLE_UPNP
#include "input/InputStream.hxx"
size_t
InputStream::LockRead(void *, size_t)
InputStream::LockRead(std::span<std::byte>)
{
return 0;
}

View File

@@ -60,10 +60,10 @@ DumpDecoderClient::OpenUri(const char *uri)
}
size_t
DumpDecoderClient::Read(InputStream &is, void *buffer, size_t length) noexcept
DumpDecoderClient::Read(InputStream &is, std::span<std::byte> dest) noexcept
{
try {
return is.LockRead(buffer, length);
return is.LockRead(dest);
} catch (...) {
return 0;
}

View File

@@ -33,7 +33,7 @@ public:
void SeekError() noexcept override;
InputStreamPtr OpenUri(const char *uri) override;
size_t Read(InputStream &is,
void *buffer, size_t length) noexcept override;
std::span<std::byte> dest) noexcept override;
void SubmitTimestamp(FloatDuration t) noexcept override;
DecoderCommand SubmitAudio(InputStream *is,
std::span<const std::byte> audio,

View File

@@ -29,9 +29,9 @@ public:
}
size_t Read(std::unique_lock<Mutex> &,
void *ptr, size_t read_size) override {
size_t nbytes = std::min(remaining, read_size);
memcpy(ptr, data, nbytes);
std::span<std::byte> dest) override {
size_t nbytes = std::min(remaining, dest.size());
memcpy(dest.data(), data, nbytes);
data += nbytes;
remaining -= nbytes;
offset += nbytes;
@@ -60,14 +60,14 @@ TEST(RewindInputStream, Basic)
EXPECT_EQ(offset_type(0), ris->GetOffset());
char buffer[16];
size_t nbytes = ris->Read(lock, buffer, 2);
size_t nbytes = ris->Read(lock, std::as_writable_bytes(std::span{buffer}.first(2)));
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('f', buffer[0]);
EXPECT_EQ('o', buffer[1]);
EXPECT_EQ(offset_type(2), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(lock, buffer, 2);
nbytes = ris->Read(lock, std::as_writable_bytes(std::span{buffer}.first(2)));
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('o', buffer[0]);
EXPECT_EQ(' ', buffer[1]);
@@ -78,7 +78,7 @@ TEST(RewindInputStream, Basic)
EXPECT_EQ(offset_type(1), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(lock, buffer, 2);
nbytes = ris->Read(lock, std::as_writable_bytes(std::span{buffer}.first(2)));
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('o', buffer[0]);
EXPECT_EQ('o', buffer[1]);
@@ -89,21 +89,21 @@ TEST(RewindInputStream, Basic)
EXPECT_EQ(offset_type(0), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(lock, buffer, 2);
nbytes = ris->Read(lock, std::as_writable_bytes(std::span{buffer}.first(2)));
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('f', buffer[0]);
EXPECT_EQ('o', buffer[1]);
EXPECT_EQ(offset_type(2), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(lock, buffer, sizeof(buffer));
nbytes = ris->Read(lock, std::as_writable_bytes(std::span{buffer}));
EXPECT_EQ(size_t(2), nbytes);
EXPECT_EQ('o', buffer[0]);
EXPECT_EQ(' ', buffer[1]);
EXPECT_EQ(offset_type(4), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(lock, buffer, sizeof(buffer));
nbytes = ris->Read(lock, std::as_writable_bytes(std::span{buffer}));
EXPECT_EQ(size_t(3), nbytes);
EXPECT_EQ('b', buffer[0]);
EXPECT_EQ('a', buffer[1]);
@@ -115,7 +115,7 @@ TEST(RewindInputStream, Basic)
EXPECT_EQ(offset_type(3), ris->GetOffset());
EXPECT_FALSE(ris->IsEOF());
nbytes = ris->Read(lock, buffer, sizeof(buffer));
nbytes = ris->Read(lock, std::as_writable_bytes(std::span{buffer}));
EXPECT_EQ(size_t(4), nbytes);
EXPECT_EQ(' ', buffer[0]);
EXPECT_EQ('b', buffer[1]);

View File

@@ -172,7 +172,7 @@ dump_input_stream(InputStream &is, FileDescriptor out,
std::byte buffer[MAX_CHUNK_SIZE];
assert(chunk_size <= sizeof(buffer));
size_t num_read = is.Read(lock, buffer, chunk_size);
size_t num_read = is.Read(lock, {buffer, chunk_size});
if (num_read == 0)
break;