// 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