Function decodeSequencesHeader [src]

Decode a sequences section header. Errors returned: error.ReservedBitSet if the reserved bit is set error.EndOfStream if there are not enough bytes in source

Prototype

pub fn decodeSequencesHeader( source: anytype, ) !SequencesSection.Header

Source

pub fn decodeSequencesHeader( source: anytype, ) !SequencesSection.Header { var sequence_count: u24 = undefined; const byte0 = try source.readByte(); if (byte0 == 0) { return SequencesSection.Header{ .sequence_count = 0, .offsets = undefined, .match_lengths = undefined, .literal_lengths = undefined, }; } else if (byte0 < 128) { sequence_count = byte0; } else if (byte0 < 255) { sequence_count = (@as(u24, (byte0 - 128)) << 8) + try source.readByte(); } else { sequence_count = (try source.readByte()) + (@as(u24, try source.readByte()) << 8) + 0x7F00; } const compression_modes = try source.readByte(); const matches_mode = @as(SequencesSection.Header.Mode, @enumFromInt((compression_modes & 0b00001100) >> 2)); const offsets_mode = @as(SequencesSection.Header.Mode, @enumFromInt((compression_modes & 0b00110000) >> 4)); const literal_mode = @as(SequencesSection.Header.Mode, @enumFromInt((compression_modes & 0b11000000) >> 6)); if (compression_modes & 0b11 != 0) return error.ReservedBitSet; return SequencesSection.Header{ .sequence_count = sequence_count, .offsets = offsets_mode, .match_lengths = matches_mode, .literal_lengths = literal_mode, }; }