Zig 0.17.0-dev (Split by item) This is an example of documentation generated by
ZigDoc , an alternative to Zig's built-in
Auto Doc feature. See also
examples in other modes/formats . The project being documented here (as the example) is the Zig standard library.
std › compress › zstd › Decompress › Frame › Zstandard › Decode › decodeSequence Private Function decodeSequence Doc Source Private Function std.compress.zstd.Decompress.Frame.Zstandard.Decode.decodeSequence
fn decodeSequence (
decode : *Decode ,
dest : []u8 ,
write_pos : usize ,
bit_reader : *ReverseBitReader ,
) !usize Params File compress/zstd/Decompress.zig: 776
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805 fn decodeSequence (
decode : *Decode ,
dest : []u8 ,
write_pos : usize ,
bit_reader : *ReverseBitReader ,
) !usize {
const sequence = try decode .nextSequence (bit_reader );
const literal_length : usize = sequence .literal_length ;
const match_length : usize = sequence .match_length ;
const sequence_length = literal_length + match_length ;
if (sequence_length > dest [write_pos ..].len )
return error .MalformedSequence ;
const copy_start = std .math .sub (usize , write_pos + sequence .literal_length , sequence .offset ) catch
return error .MalformedSequence ;
if (decode .literal_written_count + literal_length > decode .literal_header .regenerated_size )
return error .MalformedLiteralsLength ;
var sub_bw : Writer = .fixed (dest [write_pos ..]);
try decodeLiterals (decode , &sub_bw , literal_length );
decode .literal_written_count += literal_length ;
// This is not a @memmove; it intentionally repeats patterns
// caused by iterating one byte at a time.
for (
dest [write_pos + literal_length ..][0 ..match_length ],
dest [copy_start ..][0 ..match_length ],
) |*d , s | d .* = s ;
return sequence_length ;
}
Decode one sequence from
bit_readerintodest. Updates FSE states iflast_sequenceisfalse. Assumespreparecalled for the block before attempting to decode sequences.