Rebase d.reader.buffer as much as needed for a discard limited by limit
fn rebaseForDiscard(d: *Decompress, limit: std.Io.Limit) void
fn rebaseForDiscard(d: *Decompress, limit: std.Io.Limit) void {
// Number of bytes desired to rebase, always rebase for at least block_size
const desire_n = limit.max(Limit.limited(zstd.block_size_max));
// Maximum number of bytes possible to rebase
const max_n = d.reader.buffer.len -| d.window_len;
// Number of bytes to rebase
const n = desire_n.minInt(max_n);
// Current buffer free space
const current_cap = d.reader.buffer.len - d.reader.end;
if (current_cap < n) {
rebase(&d.reader, n);
}
}