mirror of
https://github.com/cuberite/libdeflate.git
synced 2025-09-11 13:32:14 -04:00
deflate_compress: refactor writing literals into separate function
Avoid too many levels of indentation.
This commit is contained in:
parent
f6e7593cfc
commit
08692b8696
@ -1592,6 +1592,74 @@ deflate_write_huffman_header(struct libdeflate_compressor *c,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static forceinline void
|
||||||
|
deflate_write_literal_run(struct deflate_output_bitstream *os,
|
||||||
|
const u8 *in_next, u32 litrunlen,
|
||||||
|
const struct deflate_codes *codes)
|
||||||
|
{
|
||||||
|
#if 1
|
||||||
|
while (litrunlen >= 4) {
|
||||||
|
unsigned lit0 = in_next[0];
|
||||||
|
unsigned lit1 = in_next[1];
|
||||||
|
unsigned lit2 = in_next[2];
|
||||||
|
unsigned lit3 = in_next[3];
|
||||||
|
|
||||||
|
deflate_add_bits(os, codes->codewords.litlen[lit0],
|
||||||
|
codes->lens.litlen[lit0]);
|
||||||
|
if (!CAN_BUFFER(2 * MAX_LITLEN_CODEWORD_LEN))
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
|
||||||
|
deflate_add_bits(os, codes->codewords.litlen[lit1],
|
||||||
|
codes->lens.litlen[lit1]);
|
||||||
|
if (!CAN_BUFFER(4 * MAX_LITLEN_CODEWORD_LEN))
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
|
||||||
|
deflate_add_bits(os, codes->codewords.litlen[lit2],
|
||||||
|
codes->lens.litlen[lit2]);
|
||||||
|
if (!CAN_BUFFER(2 * MAX_LITLEN_CODEWORD_LEN))
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
|
||||||
|
deflate_add_bits(os, codes->codewords.litlen[lit3],
|
||||||
|
codes->lens.litlen[lit3]);
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
in_next += 4;
|
||||||
|
litrunlen -= 4;
|
||||||
|
}
|
||||||
|
if (litrunlen-- != 0) {
|
||||||
|
deflate_add_bits(os, codes->codewords.litlen[*in_next],
|
||||||
|
codes->lens.litlen[*in_next]);
|
||||||
|
if (!CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
in_next++;
|
||||||
|
if (litrunlen-- != 0) {
|
||||||
|
deflate_add_bits(os, codes->codewords.litlen[*in_next],
|
||||||
|
codes->lens.litlen[*in_next]);
|
||||||
|
if (!CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
in_next++;
|
||||||
|
if (litrunlen-- != 0) {
|
||||||
|
deflate_add_bits(os,
|
||||||
|
codes->codewords.litlen[*in_next],
|
||||||
|
codes->lens.litlen[*in_next]);
|
||||||
|
if (!CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
in_next++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
do {
|
||||||
|
unsigned lit = *in_next++;
|
||||||
|
|
||||||
|
deflate_add_bits(os, codes->codewords.litlen[lit],
|
||||||
|
codes->lens.litlen[lit]);
|
||||||
|
deflate_flush_bits(os);
|
||||||
|
} while (--litrunlen);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
deflate_write_sequences(struct deflate_output_bitstream * restrict os,
|
deflate_write_sequences(struct deflate_output_bitstream * restrict os,
|
||||||
const struct deflate_codes * restrict codes,
|
const struct deflate_codes * restrict codes,
|
||||||
@ -1608,65 +1676,9 @@ deflate_write_sequences(struct deflate_output_bitstream * restrict os,
|
|||||||
unsigned offset_symbol;
|
unsigned offset_symbol;
|
||||||
|
|
||||||
if (litrunlen) {
|
if (litrunlen) {
|
||||||
#if 1
|
deflate_write_literal_run(os, in_next, litrunlen,
|
||||||
while (litrunlen >= 4) {
|
codes);
|
||||||
unsigned lit0 = in_next[0];
|
in_next += litrunlen;
|
||||||
unsigned lit1 = in_next[1];
|
|
||||||
unsigned lit2 = in_next[2];
|
|
||||||
unsigned lit3 = in_next[3];
|
|
||||||
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[lit0],
|
|
||||||
codes->lens.litlen[lit0]);
|
|
||||||
if (!CAN_BUFFER(2 * MAX_LITLEN_CODEWORD_LEN))
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[lit1],
|
|
||||||
codes->lens.litlen[lit1]);
|
|
||||||
if (!CAN_BUFFER(4 * MAX_LITLEN_CODEWORD_LEN))
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[lit2],
|
|
||||||
codes->lens.litlen[lit2]);
|
|
||||||
if (!CAN_BUFFER(2 * MAX_LITLEN_CODEWORD_LEN))
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[lit3],
|
|
||||||
codes->lens.litlen[lit3]);
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
in_next += 4;
|
|
||||||
litrunlen -= 4;
|
|
||||||
}
|
|
||||||
if (litrunlen-- != 0) {
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[*in_next],
|
|
||||||
codes->lens.litlen[*in_next]);
|
|
||||||
if (!CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
in_next++;
|
|
||||||
if (litrunlen-- != 0) {
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[*in_next],
|
|
||||||
codes->lens.litlen[*in_next]);
|
|
||||||
if (!CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
in_next++;
|
|
||||||
if (litrunlen-- != 0) {
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[*in_next],
|
|
||||||
codes->lens.litlen[*in_next]);
|
|
||||||
if (!CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
in_next++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (CAN_BUFFER(3 * MAX_LITLEN_CODEWORD_LEN))
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
do {
|
|
||||||
unsigned lit = *in_next++;
|
|
||||||
deflate_add_bits(os, codes->codewords.litlen[lit],
|
|
||||||
codes->lens.litlen[lit]);
|
|
||||||
deflate_flush_bits(os);
|
|
||||||
} while (--litrunlen);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length == 0)
|
if (length == 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user