From f644f40702fa6c6d9ec1a1d396ddd896048c966e Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Mon, 28 Jul 2025 18:35:51 -0700 Subject: [PATCH] implement tossBitsEnding --- lib/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 index 166d5c22f8..1fde977f3e 100644 --- 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 {