    pub const deflate = struct {
        // Number of tokens to accumlate in deflate before starting block encoding.

        //

        // In zlib this depends on memlevel: 6 + memlevel, where default memlevel is

        // 8 and max 9 that gives 14 or 15 bits.

        pub const tokens = 1 << 15;
    };

    pub const match = struct {
        pub const base_length = 3; // smallest match length per the RFC section 3.2.5

        pub const min_length = 4; // min length used in this algorithm

        pub const max_length = 258;

        pub const min_distance = 1;
        pub const max_distance = 32768;
    };

    pub const history = struct {
        pub const len = match.max_distance;
    };

    pub const lookup = struct {
        pub const bits = 15;
        pub const len = 1 << bits;
        pub const shift = 32 - bits;
    };

    pub const huffman = struct {
        // The odd order in which the codegen code sizes are written.

        pub const codegen_order = [_]u32{ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
        // The number of codegen codes.

        pub const codegen_code_count = 19;

        // The largest distance code.

        pub const distance_code_count = 30;

        // Maximum number of literals.

        pub const max_num_lit = 286;

        // Max number of frequencies used for a Huffman Code

        // Possible lengths are codegen_code_count (19), distance_code_count (30) and max_num_lit (286).

        // The largest of these is max_num_lit.

        pub const max_num_frequencies = max_num_lit;

        // Biggest block size for uncompressed block.

        pub const max_store_block_size = 65535;
        // The special code used to mark the end of a block.

        pub const end_block_marker = 256;
    };