io/Reader: use std::span

This commit is contained in:
Max Kellermann
2023-10-05 10:25:16 +02:00
parent b9704715fb
commit 7ccc4ddf0d
19 changed files with 52 additions and 51 deletions

View File

@@ -7,11 +7,11 @@
bool
OggSyncState::Feed(size_t size)
{
char *buffer = ogg_sync_buffer(&oy, size);
std::byte *buffer = reinterpret_cast<std::byte *>(ogg_sync_buffer(&oy, size));
if (buffer == nullptr)
return false;
size_t nbytes = reader.Read(buffer, size);
size_t nbytes = reader.Read({buffer, size});
if (nbytes == 0)
return false;

View File

@@ -32,12 +32,12 @@ AutoGunzipReader::Detect()
next = &peek;
}
size_t
AutoGunzipReader::Read(void *data, size_t size)
std::size_t
AutoGunzipReader::Read(std::span<std::byte> dest)
{
if (next == nullptr)
Detect();
assert(next != nullptr);
return next->Read(data, size);
return next->Read(dest);
}

View File

@@ -24,7 +24,7 @@ public:
~AutoGunzipReader() noexcept;
/* virtual methods from class Reader */
size_t Read(void *data, size_t size) override;
std::size_t Read(std::span<std::byte> dest) override;
private:
void Detect();

View File

@@ -24,7 +24,7 @@ GunzipReader::FillBuffer()
auto w = buffer.Write();
assert(!w.empty());
std::size_t nbytes = next.Read(w.data(), w.size());
std::size_t nbytes = next.Read(w);
if (nbytes == 0)
return false;
@@ -33,13 +33,13 @@ GunzipReader::FillBuffer()
}
std::size_t
GunzipReader::Read(void *data, std::size_t size)
GunzipReader::Read(std::span<std::byte> dest)
{
if (eof)
return 0;
z.next_out = (Bytef *)data;
z.avail_out = size;
z.next_out = (Bytef *)dest.data();
z.avail_out = dest.size();
while (true) {
int flush = Z_NO_FLUSH;
@@ -52,19 +52,19 @@ GunzipReader::Read(void *data, std::size_t size)
flush = Z_FINISH;
}
z.next_in = r.data();
z.next_in = reinterpret_cast<Bytef *>(r.data());
z.avail_in = r.size();
int result = inflate(&z, flush);
if (result == Z_STREAM_END) {
eof = true;
return size - z.avail_out;
return dest.size() - z.avail_out;
} else if (result != Z_OK)
throw ZlibError(result);
buffer.Consume(r.size() - z.avail_in);
if (z.avail_out < size)
return size - z.avail_out;
if (z.avail_out < dest.size())
return dest.size() - z.avail_out;
}
}

View File

@@ -19,7 +19,7 @@ class GunzipReader final : public Reader {
z_stream z;
StaticFifoBuffer<Bytef, 65536> buffer;
StaticFifoBuffer<std::byte, 65536> buffer;
public:
/**
@@ -34,7 +34,7 @@ public:
}
/* virtual methods from class Reader */
std::size_t Read(void *data, std::size_t size) override;
std::size_t Read(std::span<std::byte> dest) override;
private:
bool FillBuffer();