| 795 | } |
| 796 | |
| 797 | void RowContainer::storeSerializedRow( |
| 798 | const FlatVector<StringView>& vector, |
| 799 | vector_size_t index, |
| 800 | char* row) { |
| 801 | BOLT_CHECK(!vector.isNullAt(index)); |
| 802 | auto serialized = vector.valueAt(index); |
| 803 | size_t offset = 0; |
| 804 | |
| 805 | const int32_t nullBytes = bits::nbytes(nullOffsets_.size()); |
| 806 | memcpy(row + rowColumns_[0].nullByte(), serialized.data(), nullBytes); |
| 807 | offset += nullBytes; |
| 808 | |
| 809 | RowSizeTracker tracker(row[rowSizeOffset_], *stringAllocator_); |
| 810 | for (auto i = 0; i < types_.size(); ++i) { |
| 811 | const auto& type = types_[i]; |
| 812 | if (type->isFixedWidth()) { |
| 813 | const auto size = typeKindSize(type->kind()); |
| 814 | memcpy(row + rowColumns_[i].offset(), serialized.data() + offset, size); |
| 815 | offset += size; |
| 816 | } else { |
| 817 | const auto size = storeVariableSizeAt(serialized.data() + offset, row, i); |
| 818 | offset += size; |
| 819 | } |
| 820 | } |
| 821 | } |
| 822 | |
| 823 | void RowContainer::extractString( |
| 824 | StringView value, |