2016-10-03 23:50:52 +02:00
|
|
|
#ifndef ENCODE_DF_H
|
|
|
|
#define ENCODE_DF_H
|
|
|
|
|
|
|
|
#include <stdint.h>
|
2018-09-27 22:20:13 +02:00
|
|
|
#include "igzip_lib.h"
|
2016-10-03 23:50:52 +02:00
|
|
|
#include "huff_codes.h"
|
|
|
|
|
|
|
|
/* Deflate Intermediate Compression Format */
|
2024-04-19 18:09:21 +02:00
|
|
|
#define LIT_LEN_BIT_COUNT 10
|
|
|
|
#define LIT_LEN_MASK ((1 << LIT_LEN_BIT_COUNT) - 1)
|
2017-01-31 23:15:29 +01:00
|
|
|
#define DIST_LIT_BIT_COUNT 9
|
2024-04-19 18:09:21 +02:00
|
|
|
#define DIST_LIT_MASK ((1 << DIST_LIT_BIT_COUNT) - 1)
|
|
|
|
#define ICF_DIST_OFFSET LIT_LEN_BIT_COUNT
|
|
|
|
#define NULL_DIST_SYM 30
|
2016-10-03 23:50:52 +02:00
|
|
|
|
2024-04-19 18:09:21 +02:00
|
|
|
#define LEN_START ISAL_DEF_LIT_SYMBOLS
|
|
|
|
#define LEN_OFFSET (LEN_START - ISAL_DEF_MIN_MATCH)
|
|
|
|
#define LEN_MAX (LEN_OFFSET + ISAL_DEF_MAX_MATCH)
|
|
|
|
#define LIT_START (NULL_DIST_SYM + 1)
|
2017-06-10 02:03:41 +02:00
|
|
|
#define ICF_CODE_LEN 32
|
|
|
|
|
2016-10-03 23:50:52 +02:00
|
|
|
struct deflate_icf {
|
2021-11-11 12:53:38 +01:00
|
|
|
#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
2024-04-19 18:09:21 +02:00
|
|
|
uint32_t lit_len : LIT_LEN_BIT_COUNT;
|
|
|
|
uint32_t lit_dist : DIST_LIT_BIT_COUNT;
|
|
|
|
uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET;
|
2021-11-11 12:53:38 +01:00
|
|
|
#else
|
2024-04-19 18:09:21 +02:00
|
|
|
uint32_t dist_extra : ICF_CODE_LEN - DIST_LIT_BIT_COUNT - ICF_DIST_OFFSET;
|
|
|
|
uint32_t lit_dist : DIST_LIT_BIT_COUNT;
|
|
|
|
uint32_t lit_len : LIT_LEN_BIT_COUNT;
|
2021-11-11 12:53:38 +01:00
|
|
|
#endif
|
2016-10-03 23:50:52 +02:00
|
|
|
};
|
|
|
|
|
2024-04-19 18:09:21 +02:00
|
|
|
struct deflate_icf *
|
|
|
|
encode_deflate_icf(struct deflate_icf *next_in, struct deflate_icf *end_in, struct BitBuf2 *bb,
|
|
|
|
struct hufftables_icf *hufftables);
|
2016-10-03 23:50:52 +02:00
|
|
|
#endif
|