zstd-complete 0.3.0

A pure Rust Zstandard compressor and decompressor with bounded streaming I/O
Documentation
use super::superblock::{EntropyTableMode, SequenceEntropyModes};

pub(super) fn basic_sequence_modes() -> SequenceEntropyModes {
    SequenceEntropyModes {
        ll: EntropyTableMode::Basic,
        ml: EntropyTableMode::Basic,
        of: EntropyTableMode::Basic,
    }
}

pub(super) fn rle_sequence_modes() -> SequenceEntropyModes {
    SequenceEntropyModes {
        ll: EntropyTableMode::Rle,
        ml: EntropyTableMode::Rle,
        of: EntropyTableMode::Rle,
    }
}

pub(super) fn repeat_sequence_modes() -> SequenceEntropyModes {
    SequenceEntropyModes {
        ll: EntropyTableMode::Repeat,
        ml: EntropyTableMode::Repeat,
        of: EntropyTableMode::Repeat,
    }
}

pub(super) fn compressed_sequence_modes() -> SequenceEntropyModes {
    SequenceEntropyModes {
        ll: EntropyTableMode::Compressed,
        ml: EntropyTableMode::Compressed,
        of: EntropyTableMode::Compressed,
    }
}

pub(super) fn sequence_modes_clear_previous(modes: SequenceEntropyModes) -> bool {
    matches!(modes.ll, EntropyTableMode::Basic | EntropyTableMode::Rle)
        && matches!(modes.ml, EntropyTableMode::Basic | EntropyTableMode::Rle)
        && matches!(modes.of, EntropyTableMode::Basic | EntropyTableMode::Rle)
}

pub(super) fn sequence_modes_are_mixed(modes: SequenceEntropyModes) -> bool {
    !sequence_modes_are(modes, EntropyTableMode::Basic)
        && !sequence_modes_are(modes, EntropyTableMode::Rle)
        && !sequence_modes_are(modes, EntropyTableMode::Repeat)
        && !sequence_modes_are(modes, EntropyTableMode::Compressed)
}

fn sequence_modes_are(modes: SequenceEntropyModes, mode: EntropyTableMode) -> bool {
    modes.ll == mode && modes.ml == mode && modes.of == mode
}