zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit f644f40702fa6c6d9ec1a1d396ddd896048c966e (tree)
parent 2d8d0dd9b0c4bd8d51be33da540b45fef2b20ec2
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Mon, 28 Jul 2025 18:35:51 -0700

implement tossBitsEnding

Diffstat:
Mlib/std/compress/flate/Decompress.zig | 18+++++++++++++++---
1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/lib/std/compress/flate/Decompress.zig b/lib/std/compress/flate/Decompress.zig @@ -491,9 +491,21 @@ fn tossBits(d: *Decompress, n: u6) !void { } fn tossBitsEnding(d: *Decompress, n: u6) !void { - _ = d; - _ = n; - @panic("TODO"); + const remaining_bits = d.remaining_bits; + const in = d.input; + var remaining_needed_bits = n - remaining_bits; + while (remaining_needed_bits >= 8) { + try in.discardAll(1); + remaining_needed_bits -= 8; + } + if (remaining_needed_bits == 0) { + d.next_bits = 0; + d.remaining_bits = 0; + } else { + const byte = try in.takeByte(); + d.next_bits = @as(usize, byte) >> remaining_needed_bits; + d.remaining_bits = @intCast(8 - remaining_needed_bits); + } } fn takeBitsRuntime(d: *Decompress, n: u4) !u16 {