struct LenDecoder [src]

Fields

choice: u16 = 0x400
choice2: u16 = 0x400
low_coder: [16]BitTree(3) = @splat(.{})
mid_coder: [16]BitTree(3) = @splat(.{})
high_coder: BitTree(8) = .{}

Members

Source

pub const LenDecoder = struct { choice: u16 = 0x400, choice2: u16 = 0x400, low_coder: [16]BitTree(3) = @splat(.{}), mid_coder: [16]BitTree(3) = @splat(.{}), high_coder: BitTree(8) = .{}, pub fn decode( self: *LenDecoder, reader: anytype, decoder: *RangeDecoder, pos_state: usize, update: bool, ) !usize { if (!try decoder.decodeBit(reader, &self.choice, update)) { return @as(usize, try self.low_coder[pos_state].parse(reader, decoder, update)); } else if (!try decoder.decodeBit(reader, &self.choice2, update)) { return @as(usize, try self.mid_coder[pos_state].parse(reader, decoder, update)) + 8; } else { return @as(usize, try self.high_coder.parse(reader, decoder, update)) + 16; } } pub fn reset(self: *LenDecoder) void { self.choice = 0x400; self.choice2 = 0x400; for (&self.low_coder) |*t| t.reset(); for (&self.mid_coder) |*t| t.reset(); self.high_coder.reset(); } }