| 677 | // Visit and compare runs of non-null values |
| 678 | template <typename CompareRuns> |
| 679 | void VisitValidRuns(CompareRuns&& compare_runs) { |
| 680 | const uint8_t* left_null_bitmap = left_.GetValues<uint8_t>(0, 0); |
| 681 | if (left_null_bitmap == nullptr) { |
| 682 | result_ = compare_runs(0, range_length_); |
| 683 | return; |
| 684 | } |
| 685 | internal::SetBitRunReader reader(left_null_bitmap, left_.offset + left_start_idx_, |
| 686 | range_length_); |
| 687 | while (true) { |
| 688 | const auto run = reader.NextRun(); |
| 689 | if (run.length == 0) { |
| 690 | return; |
| 691 | } |
| 692 | if (!compare_runs(run.position, run.length)) { |
| 693 | result_ = false; |
| 694 | return; |
| 695 | } |
| 696 | } |
| 697 | } |
| 698 | |
| 699 | const EqualOptions& options_; |
| 700 | const ArrayData& left_; |