diff options
Diffstat (limited to 'libartbase/base/bit_table.h')
-rw-r--r-- | libartbase/base/bit_table.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/libartbase/base/bit_table.h b/libartbase/base/bit_table.h index 1c7614b695..18de3d33d3 100644 --- a/libartbase/base/bit_table.h +++ b/libartbase/base/bit_table.h @@ -77,7 +77,7 @@ class BitTableBase { ALWAYS_INLINE void Decode(BitMemoryReader& reader) { // Decode row count and column sizes from the table header. - size_t initial_bit_offset = reader.GetBitOffset(); + size_t initial_bit_offset = reader.NumberOfReadBits(); num_rows_ = DecodeVarintBits(reader); if (num_rows_ != 0) { column_offset_[0] = 0; @@ -86,10 +86,10 @@ class BitTableBase { column_offset_[i + 1] = dchecked_integral_cast<uint16_t>(column_end); } } - header_bit_size_ = reader.GetBitOffset() - initial_bit_offset; + header_bit_size_ = reader.NumberOfReadBits() - initial_bit_offset; // Record the region which contains the table data and skip past it. - table_data_ = reader.Skip(num_rows_ * NumRowBits()); + table_data_ = reader.ReadRegion(num_rows_ * NumRowBits()); } ALWAYS_INLINE uint32_t Get(uint32_t row, uint32_t column = 0) const { @@ -122,6 +122,12 @@ class BitTableBase { size_t BitSize() const { return header_bit_size_ + table_data_.size_in_bits(); } + bool Equals(const BitTableBase& other) const { + return num_rows_ == other.num_rows_ && + std::equal(column_offset_, column_offset_ + kNumColumns, other.column_offset_) && + BitMemoryRegion::Compare(table_data_, other.table_data_) == 0; + } + protected: BitMemoryRegion table_data_; size_t num_rows_ = 0; @@ -376,7 +382,7 @@ class BitTableBuilderBase { // Encode the stored data into a BitTable. template<typename Vector> void Encode(BitMemoryWriter<Vector>& out) const { - size_t initial_bit_offset = out.GetBitOffset(); + size_t initial_bit_offset = out.NumberOfWrittenBits(); std::array<uint32_t, kNumColumns> column_bits; Measure(&column_bits); @@ -398,7 +404,7 @@ class BitTableBuilderBase { // Verify the written data. if (kIsDebugBuild) { BitTableBase<kNumColumns> table; - BitMemoryReader reader(out.data(), initial_bit_offset); + BitMemoryReader reader(out.GetWrittenRegion().Subregion(initial_bit_offset)); table.Decode(reader); DCHECK_EQ(size(), table.NumRows()); for (uint32_t c = 0; c < kNumColumns; c++) { @@ -467,7 +473,7 @@ class BitmapTableBuilder { // Encode the stored data into a BitTable. template<typename Vector> void Encode(BitMemoryWriter<Vector>& out) const { - size_t initial_bit_offset = out.GetBitOffset(); + size_t initial_bit_offset = out.NumberOfWrittenBits(); EncodeVarintBits(out, size()); if (size() != 0) { @@ -484,7 +490,7 @@ class BitmapTableBuilder { // Verify the written data. if (kIsDebugBuild) { BitTableBase<1> table; - BitMemoryReader reader(out.data(), initial_bit_offset); + BitMemoryReader reader(out.GetWrittenRegion().Subregion(initial_bit_offset)); table.Decode(reader); DCHECK_EQ(size(), table.NumRows()); DCHECK_EQ(max_num_bits_, table.NumColumnBits(0)); |