| 758 | // Copy (n + 1) offsets starting from index `start` into `out_data` |
| 759 | template <class Offset> |
| 760 | void CopyOffsets(int32_t start, Offset* out_data) const { |
| 761 | ARROW_DCHECK_LE(start, size()); |
| 762 | |
| 763 | const builder_offset_type* offsets = binary_builder_.offsets_data(); |
| 764 | const builder_offset_type delta = |
| 765 | start < binary_builder_.length() ? offsets[start] : 0; |
| 766 | for (int32_t i = start; i < size(); ++i) { |
| 767 | const builder_offset_type adjusted_offset = offsets[i] - delta; |
| 768 | Offset cast_offset = static_cast<Offset>(adjusted_offset); |
| 769 | assert(static_cast<builder_offset_type>(cast_offset) == |
| 770 | adjusted_offset); // avoid truncation |
| 771 | *out_data++ = cast_offset; |
| 772 | } |
| 773 | |
| 774 | // Copy last value since BinaryBuilder only materializes it on in Finish() |
| 775 | *out_data = static_cast<Offset>(binary_builder_.value_data_length() - delta); |
| 776 | } |
| 777 | |
| 778 | template <class Offset> |
| 779 | void CopyOffsets(Offset* out_data) const { |