9#ifndef BROTLI_ENC_WRITE_BITS_H_
10#define BROTLI_ENC_WRITE_BITS_H_
13#include <brotli/types.h>
15#if defined(__cplusplus) || defined(c_plusplus)
38 BROTLI_LOG((
"WriteBits %2d 0x%08x%08x %10d\n", (
int)n_bits,
39 (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),
43#if defined(BROTLI_LITTLE_ENDIAN)
50 uint8_t* p = &array[*pos >> 3];
51 uint64_t v = (uint64_t)(*p);
52 v |= bits << (*pos & 7);
53 BROTLI_UNALIGNED_STORE64LE(p, v);
59 uint8_t* array_pos = &array[*pos >> 3];
60 const size_t bits_reserved_in_first_byte = (*pos & 7);
61 size_t bits_left_to_write;
62 bits <<= bits_reserved_in_first_byte;
63 *array_pos++ |= (uint8_t)bits;
64 for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;
65 bits_left_to_write >= 9;
66 bits_left_to_write -= 8) {
68 *array_pos++ = (uint8_t)bits;
77 size_t pos, uint8_t* array) {
78 BROTLI_LOG((
"WriteBitsPrepareStorage %10d\n", (
int)pos));
83#if defined(__cplusplus) || defined(c_plusplus)