io/Reader: use std::span
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user