101dfbcc4SRoy Oursler #ifndef ENCODE_DF_H 201dfbcc4SRoy Oursler #define ENCODE_DF_H 301dfbcc4SRoy Oursler 401dfbcc4SRoy Oursler #include <stdint.h> 5ba1a0006SRoy Oursler #include "igzip_lib.h" 601dfbcc4SRoy Oursler #include "huff_codes.h" 701dfbcc4SRoy Oursler 801dfbcc4SRoy Oursler /* Deflate Intermediate Compression Format */ 947256268SRoy Oursler #define LIT_LEN_BIT_COUNT 10 104ae2d1beSRoy Oursler #define LIT_LEN_MASK ((1 << LIT_LEN_BIT_COUNT) - 1) 1147256268SRoy Oursler #define DIST_LIT_BIT_COUNT 9 124ae2d1beSRoy Oursler #define DIST_LIT_MASK ((1 << DIST_LIT_BIT_COUNT) - 1) 1347256268SRoy Oursler #define ICF_DIST_OFFSET LIT_LEN_BIT_COUNT 1401dfbcc4SRoy Oursler #define NULL_DIST_SYM 30 1501dfbcc4SRoy Oursler 16ba1a0006SRoy Oursler #define LEN_START ISAL_DEF_LIT_SYMBOLS 17ba1a0006SRoy Oursler #define LEN_OFFSET (LEN_START - ISAL_DEF_MIN_MATCH) 18ba1a0006SRoy Oursler #define LEN_MAX (LEN_OFFSET + ISAL_DEF_MAX_MATCH) 194ae2d1beSRoy Oursler #define LIT_START (NULL_DIST_SYM + 1) 204ae2d1beSRoy Oursler #define ICF_CODE_LEN 32 214ae2d1beSRoy Oursler 2201dfbcc4SRoy Oursler struct deflate_icf { 23d3cfb2fbSIlya Leoshkevich #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__ 2447256268SRoy Oursler uint32_t lit_len : LIT_LEN_BIT_COUNT; 2547256268SRoy Oursler uint32_t lit_dist : DIST_LIT_BIT_COUNT; 264ae2d1beSRoy Oursler uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET; 27d3cfb2fbSIlya Leoshkevich #else 28d3cfb2fbSIlya Leoshkevich uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET; 29d3cfb2fbSIlya Leoshkevich uint32_t lit_dist : DIST_LIT_BIT_COUNT; 30d3cfb2fbSIlya Leoshkevich uint32_t lit_len : LIT_LEN_BIT_COUNT; 31d3cfb2fbSIlya Leoshkevich #endif 3201dfbcc4SRoy Oursler }; 3301dfbcc4SRoy Oursler 34*55fbfabfSMarcel Cornu struct deflate_icf * 35*55fbfabfSMarcel Cornu encode_deflate_icf(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb, 36*55fbfabfSMarcel Cornu struct hufftables_icf *hufftables); 3701dfbcc4SRoy Oursler #endif 38