| 2183 | } |
| 2184 | |
| 2185 | bool all() const |
| 2186 | { |
| 2187 | const block_type* blocks = original_bv_->data() + start_block_; |
| 2188 | int64_t num_blocks = end_block_ - start_block_; |
| 2189 | |
| 2190 | // Check complete blocks |
| 2191 | for (int64_t i = 0; i < num_blocks - 1; ++i) { |
| 2192 | if (blocks[i] != ~block_type(0)) { |
| 2193 | return false; |
| 2194 | } |
| 2195 | } |
| 2196 | |
| 2197 | // Check last block (may be partial) |
| 2198 | if (num_blocks > 0) { |
| 2199 | if (end_bit_offset_ != 0) { |
| 2200 | block_type mask = (block_type(1) << end_bit_offset_) - 1; |
| 2201 | if ((blocks[num_blocks - 1] & mask) != mask) { |
| 2202 | return false; |
| 2203 | } |
| 2204 | } else { |
| 2205 | if (blocks[num_blocks - 1] != ~block_type(0)) { |
| 2206 | return false; |
| 2207 | } |
| 2208 | } |
| 2209 | } |
| 2210 | |
| 2211 | return true; |
| 2212 | } |
| 2213 | |
| 2214 | // Direct access to underlying data (read-only) |
| 2215 | const block_type* data() const |