Loading system/gd/packet/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ filegroup { "byte_inserter.cc", "byte_observer.cc", "iterator.cc", "fragmenting_inserter.cc", "packet_view.cc", "raw_builder.cc", "view.cc", Loading @@ -15,6 +16,7 @@ filegroup { name: "BluetoothPacketTestSources", srcs: [ "bit_inserter_unittest.cc", "fragmenting_inserter_unittest.cc", "packet_builder_unittest.cc", "packet_view_unittest.cc", "raw_builder_unittest.cc", Loading system/gd/packet/bit_inserter.cc +3 −8 Original line number Diff line number Diff line Loading @@ -29,15 +29,14 @@ BitInserter::~BitInserter() { void BitInserter::insert_bits(uint8_t byte, size_t num_bits) { size_t total_bits = num_bits + num_saved_bits_; uint16_t new_value = saved_bits_ | (static_cast<uint16_t>(byte) << num_saved_bits_); uint16_t new_value = static_cast<uint8_t>(saved_bits_) | (static_cast<uint16_t>(byte) << num_saved_bits_); if (total_bits >= 8) { uint8_t new_byte = static_cast<uint8_t>(new_value); ByteInserter::insert_byte(new_byte); ByteInserter::insert_byte(static_cast<uint8_t>(new_value)); total_bits -= 8; new_value = new_value >> 8; } num_saved_bits_ = total_bits; uint8_t mask = 0xff >> (8 - num_saved_bits_); uint8_t mask = static_cast<uint8_t>(0xff) >> (8 - num_saved_bits_); saved_bits_ = static_cast<uint8_t>(new_value) & mask; } Loading @@ -45,9 +44,5 @@ void BitInserter::insert_byte(uint8_t byte) { insert_bits(byte, 8); } bool BitInserter::IsByteAligned() { return num_saved_bits_ == 0; } } // namespace packet } // namespace bluetooth system/gd/packet/bit_inserter.h +4 −6 Original line number Diff line number Diff line Loading @@ -29,15 +29,13 @@ namespace packet { class BitInserter : public ByteInserter { public: BitInserter(std::vector<uint8_t>& vector); virtual ~BitInserter(); ~BitInserter() override; void insert_bits(uint8_t byte, size_t num_bits); virtual void insert_bits(uint8_t byte, size_t num_bits); void insert_byte(uint8_t byte); void insert_byte(uint8_t byte) override; bool IsByteAligned(); private: protected: size_t num_saved_bits_{0}; uint8_t saved_bits_{0}; }; Loading system/gd/packet/byte_inserter.cc +7 −3 Original line number Diff line number Diff line Loading @@ -24,10 +24,10 @@ namespace packet { ByteInserter::ByteInserter(std::vector<uint8_t>& vector) : std::back_insert_iterator<std::vector<uint8_t>>(vector) {} ByteInserter::~ByteInserter() { ASSERT(registered_observers_.size() == 0); ASSERT(registered_observers_.empty()); } void ByteInserter::RegisterObserver(ByteObserver observer) { void ByteInserter::RegisterObserver(const ByteObserver& observer) { registered_observers_.push_back(observer); } Loading @@ -37,10 +37,14 @@ ByteObserver ByteInserter::UnregisterObserver() { return observer; } void ByteInserter::insert_byte(uint8_t byte) { void ByteInserter::on_byte(uint8_t byte) { for (auto& observer : registered_observers_) { observer.OnByte(byte); } } void ByteInserter::insert_byte(uint8_t byte) { on_byte(byte); std::back_insert_iterator<std::vector<uint8_t>>::operator=(byte); } Loading system/gd/packet/byte_inserter.h +5 −2 Original line number Diff line number Diff line Loading @@ -31,12 +31,15 @@ class ByteInserter : public std::back_insert_iterator<std::vector<uint8_t>> { ByteInserter(std::vector<uint8_t>& vector); virtual ~ByteInserter(); void insert_byte(uint8_t byte); virtual void insert_byte(uint8_t byte); void RegisterObserver(ByteObserver observer); void RegisterObserver(const ByteObserver& observer); ByteObserver UnregisterObserver(); protected: void on_byte(uint8_t); private: std::vector<ByteObserver> registered_observers_; }; Loading Loading
system/gd/packet/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -5,6 +5,7 @@ filegroup { "byte_inserter.cc", "byte_observer.cc", "iterator.cc", "fragmenting_inserter.cc", "packet_view.cc", "raw_builder.cc", "view.cc", Loading @@ -15,6 +16,7 @@ filegroup { name: "BluetoothPacketTestSources", srcs: [ "bit_inserter_unittest.cc", "fragmenting_inserter_unittest.cc", "packet_builder_unittest.cc", "packet_view_unittest.cc", "raw_builder_unittest.cc", Loading
system/gd/packet/bit_inserter.cc +3 −8 Original line number Diff line number Diff line Loading @@ -29,15 +29,14 @@ BitInserter::~BitInserter() { void BitInserter::insert_bits(uint8_t byte, size_t num_bits) { size_t total_bits = num_bits + num_saved_bits_; uint16_t new_value = saved_bits_ | (static_cast<uint16_t>(byte) << num_saved_bits_); uint16_t new_value = static_cast<uint8_t>(saved_bits_) | (static_cast<uint16_t>(byte) << num_saved_bits_); if (total_bits >= 8) { uint8_t new_byte = static_cast<uint8_t>(new_value); ByteInserter::insert_byte(new_byte); ByteInserter::insert_byte(static_cast<uint8_t>(new_value)); total_bits -= 8; new_value = new_value >> 8; } num_saved_bits_ = total_bits; uint8_t mask = 0xff >> (8 - num_saved_bits_); uint8_t mask = static_cast<uint8_t>(0xff) >> (8 - num_saved_bits_); saved_bits_ = static_cast<uint8_t>(new_value) & mask; } Loading @@ -45,9 +44,5 @@ void BitInserter::insert_byte(uint8_t byte) { insert_bits(byte, 8); } bool BitInserter::IsByteAligned() { return num_saved_bits_ == 0; } } // namespace packet } // namespace bluetooth
system/gd/packet/bit_inserter.h +4 −6 Original line number Diff line number Diff line Loading @@ -29,15 +29,13 @@ namespace packet { class BitInserter : public ByteInserter { public: BitInserter(std::vector<uint8_t>& vector); virtual ~BitInserter(); ~BitInserter() override; void insert_bits(uint8_t byte, size_t num_bits); virtual void insert_bits(uint8_t byte, size_t num_bits); void insert_byte(uint8_t byte); void insert_byte(uint8_t byte) override; bool IsByteAligned(); private: protected: size_t num_saved_bits_{0}; uint8_t saved_bits_{0}; }; Loading
system/gd/packet/byte_inserter.cc +7 −3 Original line number Diff line number Diff line Loading @@ -24,10 +24,10 @@ namespace packet { ByteInserter::ByteInserter(std::vector<uint8_t>& vector) : std::back_insert_iterator<std::vector<uint8_t>>(vector) {} ByteInserter::~ByteInserter() { ASSERT(registered_observers_.size() == 0); ASSERT(registered_observers_.empty()); } void ByteInserter::RegisterObserver(ByteObserver observer) { void ByteInserter::RegisterObserver(const ByteObserver& observer) { registered_observers_.push_back(observer); } Loading @@ -37,10 +37,14 @@ ByteObserver ByteInserter::UnregisterObserver() { return observer; } void ByteInserter::insert_byte(uint8_t byte) { void ByteInserter::on_byte(uint8_t byte) { for (auto& observer : registered_observers_) { observer.OnByte(byte); } } void ByteInserter::insert_byte(uint8_t byte) { on_byte(byte); std::back_insert_iterator<std::vector<uint8_t>>::operator=(byte); } Loading
system/gd/packet/byte_inserter.h +5 −2 Original line number Diff line number Diff line Loading @@ -31,12 +31,15 @@ class ByteInserter : public std::back_insert_iterator<std::vector<uint8_t>> { ByteInserter(std::vector<uint8_t>& vector); virtual ~ByteInserter(); void insert_byte(uint8_t byte); virtual void insert_byte(uint8_t byte); void RegisterObserver(ByteObserver observer); void RegisterObserver(const ByteObserver& observer); ByteObserver UnregisterObserver(); protected: void on_byte(uint8_t); private: std::vector<ByteObserver> registered_observers_; }; Loading