| 495 | } |
| 496 | |
| 497 | IterationResult Run(ElementRange* range, ElementRange* child_range, |
| 498 | PathWriteContext* context) { |
| 499 | if (new_range_) { |
| 500 | // Reset the reader each time we are starting fresh on a range. |
| 501 | // We can't rely on continuity because nulls above can |
| 502 | // cause discontinuities. |
| 503 | valid_bits_reader_ = MakeReader(*range); |
| 504 | } |
| 505 | child_range->start = range->start; |
| 506 | ::arrow::internal::BitRun run = valid_bits_reader_.NextRun(); |
| 507 | if (!run.set) { |
| 508 | range->start += run.length; |
| 509 | RETURN_IF_ERROR(FillRepLevels(run.length, rep_level_if_null_, context)); |
| 510 | RETURN_IF_ERROR(context->AppendDefLevels(run.length, def_level_if_null_)); |
| 511 | run = valid_bits_reader_.NextRun(); |
| 512 | } |
| 513 | if (range->Empty()) { |
| 514 | new_range_ = true; |
| 515 | return kDone; |
| 516 | } |
| 517 | child_range->end = child_range->start = range->start; |
| 518 | child_range->end += run.length; |
| 519 | |
| 520 | DCHECK(!child_range->Empty()); |
| 521 | range->start += child_range->Size(); |
| 522 | new_range_ = false; |
| 523 | return kNext; |
| 524 | } |
| 525 | |
| 526 | const uint8_t* null_bitmap_; |
| 527 | int64_t entry_offset_; |
nothing calls this directly
no test coverage detected