/* Stores a number between 0 and 255. */ static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) { if (n == 0) { BrotliWriteBits(1, 0, storage_ix, storage); } else { size_t nbits = Log2FloorNonZero(n); BrotliWriteBits(1, 1, storage_ix, storage); BrotliWriteBits(3, nbits, storage_ix, storage); BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage); } }
/* nibblesbits represents the 2 bits to encode MNIBBLES (0-3) REQUIRES: length > 0 REQUIRES: length <= (1 << 24) */ static void BrotliEncodeMlen(size_t length, uint64_t* bits, size_t* numbits, uint64_t* nibblesbits) { size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1; size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4; assert(length > 0); assert(length <= (1 << 24)); assert(lg <= 24); *nibblesbits = mnibbles - 4; *numbits = mnibbles * 4; *bits = length - 1; }
static BROTLI_INLINE void EmitInsertLen( uint32_t insertlen, uint32_t** commands) { if (insertlen < 6) { **commands = insertlen; } else if (insertlen < 130) { const uint32_t tail = insertlen - 2; const uint32_t nbits = Log2FloorNonZero(tail) - 1u; const uint32_t prefix = tail >> nbits; const uint32_t inscode = (nbits << 1) + prefix + 2; const uint32_t extra = tail - (prefix << nbits); **commands = inscode | (extra << 8); } else if (insertlen < 2114) {
/* REQUIRES: insertlen < 6210 */ static BROTLI_INLINE void EmitInsertLen(size_t insertlen, const uint8_t depth[128], const uint16_t bits[128], uint32_t histo[128], size_t* storage_ix, uint8_t* storage) { if (insertlen < 6) { const size_t code = insertlen + 40; BrotliWriteBits(depth[code], bits[code], storage_ix, storage); ++histo[code]; } else if (insertlen < 130) { const size_t tail = insertlen - 2; const uint32_t nbits = Log2FloorNonZero(tail) - 1u; const size_t prefix = tail >> nbits; const size_t inscode = (nbits << 1) + prefix + 42; BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage); BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage); ++histo[inscode]; } else if (insertlen < 2114) {
} static BROTLI_INLINE void EmitInsertLen( uint32_t insertlen, uint32_t** commands) { if (insertlen < 6) { **commands = insertlen; } else if (insertlen < 130) { const uint32_t tail = insertlen - 2; const uint32_t nbits = Log2FloorNonZero(tail) - 1u; const uint32_t prefix = tail >> nbits; const uint32_t inscode = (nbits << 1) + prefix + 2; const uint32_t extra = tail - (prefix << nbits); **commands = inscode | (extra << 8); } else if (insertlen < 2114) { const uint32_t tail = insertlen - 66; const uint32_t nbits = Log2FloorNonZero(tail); const uint32_t code = nbits + 10; const uint32_t extra = tail - (1u << nbits); **commands = code | (extra << 8); } else if (insertlen < 6210) { const uint32_t extra = insertlen - 2114; **commands = 21 | (extra << 8); } else if (insertlen < 22594) { const uint32_t extra = insertlen - 6210; **commands = 22 | (extra << 8); } else { const uint32_t extra = insertlen - 22594; **commands = 23 | (extra << 8); } ++(*commands); }