| // Copyright (c) 2016 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "net/tools/huffman_trie/bit_writer.h" |
| |
| #include "base/logging.h" |
| |
| namespace net { |
| |
| namespace huffman_trie { |
| |
| BitWriter::BitWriter() = default; |
| |
| BitWriter::~BitWriter() = default; |
| |
| void BitWriter::WriteBits(uint32_t bits, uint8_t number_of_bits) { |
| DCHECK(number_of_bits <= 32); |
| for (uint8_t i = 1; i <= number_of_bits; i++) { |
| uint8_t bit = 1 & (bits >> (number_of_bits - i)); |
| WriteBit(bit); |
| } |
| } |
| |
| void BitWriter::WriteBit(uint8_t bit) { |
| current_byte_ |= bit << (7 - used_); |
| used_++; |
| position_++; |
| |
| if (used_ == 8) { |
| Flush(); |
| } |
| } |
| |
| void BitWriter::Flush() { |
| position_ += (8 - used_); |
| bytes_.push_back(current_byte_); |
| |
| used_ = 0; |
| current_byte_ = 0; |
| } |
| |
| } // namespace huffman_trie |
| |
| } // namespace net |