naiveproxy/net/tools/huffman_trie/bit_writer.cc

46 lines
911 B
C++
Raw Normal View History

2018-08-15 01:19:20 +03:00
// 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