| 650 | // Visit and compare runs of non-null values |
| 651 | template <typename CompareRuns> |
| 652 | void VisitValidRuns(CompareRuns&& compare_runs) { |
| 653 | const uint8_t* left_null_bitmap = left_.GetValues<uint8_t>(0, 0); |
| 654 | if (left_null_bitmap == nullptr) { |
| 655 | result_ = compare_runs(0, range_length_); |
| 656 | return; |
| 657 | } |
| 658 | internal::SetBitRunReader reader(left_null_bitmap, left_.offset + left_start_idx_, |
| 659 | range_length_); |
| 660 | while (true) { |
| 661 | const auto run = reader.NextRun(); |
| 662 | if (run.length == 0) { |
| 663 | return; |
| 664 | } |
| 665 | if (!compare_runs(run.position, run.length)) { |
| 666 | result_ = false; |
| 667 | return; |
| 668 | } |
| 669 | } |
| 670 | } |
| 671 | |
| 672 | const EqualOptions& options_; |
| 673 | const bool floating_approximate_; |