xref: /isa-l/igzip/encode_df.h (revision 55fbfabfc60f1002bc8133b730a59f6abd22cfce)
1 #ifndef ENCODE_DF_H
2 #define ENCODE_DF_H
3 
4 #include <stdint.h>
5 #include "igzip_lib.h"
6 #include "huff_codes.h"
7 
8 /* Deflate Intermediate Compression Format */
9 #define LIT_LEN_BIT_COUNT  10
10 #define LIT_LEN_MASK       ((1 << LIT_LEN_BIT_COUNT) - 1)
11 #define DIST_LIT_BIT_COUNT 9
12 #define DIST_LIT_MASK      ((1 << DIST_LIT_BIT_COUNT) - 1)
13 #define ICF_DIST_OFFSET    LIT_LEN_BIT_COUNT
14 #define NULL_DIST_SYM      30
15 
16 #define LEN_START    ISAL_DEF_LIT_SYMBOLS
17 #define LEN_OFFSET   (LEN_START - ISAL_DEF_MIN_MATCH)
18 #define LEN_MAX      (LEN_OFFSET + ISAL_DEF_MAX_MATCH)
19 #define LIT_START    (NULL_DIST_SYM + 1)
20 #define ICF_CODE_LEN 32
21 
22 struct deflate_icf {
23 #if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
24         uint32_t lit_len : LIT_LEN_BIT_COUNT;
25         uint32_t lit_dist : DIST_LIT_BIT_COUNT;
26         uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET;
27 #else
28         uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET;
29         uint32_t lit_dist : DIST_LIT_BIT_COUNT;
30         uint32_t lit_len : LIT_LEN_BIT_COUNT;
31 #endif
32 };
33 
34 struct deflate_icf *
35 encode_deflate_icf(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb,
36                    struct hufftables_icf *hufftables);
37 #endif
38