| 56 | } |
| 57 | |
| 58 | void BitArray::Build() { |
| 59 | one_num_ = 0; |
| 60 | uint64_t table_num = ((bit_blocks_.size() + TABLE_INTERVAL - 1) / TABLE_INTERVAL) + 1; |
| 61 | rank_tables_.resize(table_num); |
| 62 | for (size_t i = 0; i < bit_blocks_.size(); ++i){ |
| 63 | if ((i % TABLE_INTERVAL) == 0){ |
| 64 | rank_tables_[i/TABLE_INTERVAL] = one_num_; |
| 65 | } |
| 66 | one_num_ += PopCount(bit_blocks_[i]); |
| 67 | } |
| 68 | rank_tables_.back() = one_num_; |
| 69 | } |
| 70 | |
| 71 | void BitArray::SetBit(uint64_t bit, uint64_t pos) { |
| 72 | if (!bit) return; |