Function decodeSequenceSlice [src]
Decode one sequence from bit_reader into dest, written starting at
write_pos and update FSE states if last_sequence is false.
prepare() must be called for the block before attempting to decode
sequences.
Errors returned:
error.MalformedSequence if the decompressed sequence would be
longer than sequence_size_limit or the sequence's offset is too
large
error.UnexpectedEndOfLiteralStream if the decoder state's literal
streams do not contain enough literals for the sequence (this may
mean the literal stream or the sequence is malformed).
error.InvalidBitStream if the FSE sequence bitstream is malformed
error.EndOfStream if bit_reader does not contain enough bits
error.DestTooSmall if dest is not large enough to holde the
decompressed sequence
Prototype
pub fn decodeSequenceSlice( self: *DecodeState, dest: []u8, write_pos: usize, bit_reader: *readers.ReverseBitReader, sequence_size_limit: usize, last_sequence: bool, ) (error{DestTooSmall} || DecodeSequenceError)!usize
Parameters
self: *DecodeState
dest: []u8
write_pos: usize
bit_reader: *readers.ReverseBitReader
sequence_size_limit: usize
last_sequence: bool
Source
pub fn decodeSequenceSlice(
self: *DecodeState,
dest: []u8,
write_pos: usize,
bit_reader: *readers.ReverseBitReader,
sequence_size_limit: usize,
last_sequence: bool,
) (error{DestTooSmall} || DecodeSequenceError)!usize {
const sequence = try self.nextSequence(bit_reader);
const sequence_length = @as(usize, sequence.literal_length) + sequence.match_length;
if (sequence_length > sequence_size_limit) return error.MalformedSequence;
if (sequence_length > dest[write_pos..].len) return error.DestTooSmall;
try self.executeSequenceSlice(dest, write_pos, sequence);
if (!last_sequence) {
try self.updateState(.literal, bit_reader);
try self.updateState(.match, bit_reader);
try self.updateState(.offset, bit_reader);
}
return sequence_length;
}