structstd.compress.lzma.decode.rangecoder.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) = .{}

Functions

Functiondecode[src]

pub fn decode( self: *LenDecoder, reader: anytype, decoder: *RangeDecoder, pos_state: usize, update: bool, ) !usize

Parameters

self: *LenDecoder
decoder: *RangeDecoder
pos_state: usize
update: bool

Source Code

Source code
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;
    }
}

Functionreset[src]

pub fn reset(self: *LenDecoder) void

Parameters

self: *LenDecoder

Source Code

Source code
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();
}

Source Code

Source code
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();
    }
}