| ... | @@ -491,9 +491,21 @@ fn tossBits(d: *Decompress, n: u6) !void { | ... | @@ -491,9 +491,21 @@ fn tossBits(d: *Decompress, n: u6) !void { |
| 491 | } | 491 | } |
| 492 | | 492 | |
| 493 | fn tossBitsEnding(d: *Decompress, n: u6) !void { | 493 | fn tossBitsEnding(d: *Decompress, n: u6) !void { |
| 494 | _ = d; | 494 | const remaining_bits = d.remaining_bits; |
| 495 | _ = n; | 495 | const in = d.input; |
| 496 | @panic("TODO"); | 496 | var remaining_needed_bits = n - remaining_bits; |
| | 497 | while (remaining_needed_bits >= 8) { |
| | 498 | try in.discardAll(1); |
| | 499 | remaining_needed_bits -= 8; |
| | 500 | } |
| | 501 | if (remaining_needed_bits == 0) { |
| | 502 | d.next_bits = 0; |
| | 503 | d.remaining_bits = 0; |
| | 504 | } else { |
| | 505 | const byte = try in.takeByte(); |
| | 506 | d.next_bits = @as(usize, byte) >> remaining_needed_bits; |
| | 507 | d.remaining_bits = @intCast(8 - remaining_needed_bits); |
| | 508 | } |
| 497 | } | 509 | } |
| 498 | | 510 | |
| 499 | fn takeBitsRuntime(d: *Decompress, n: u4) !u16 { | 511 | fn takeBitsRuntime(d: *Decompress, n: u4) !u16 { |