| 1011 | } |
| 1012 | |
| 1013 | std::shared_ptr<Array> RandomArrayGenerator::DenseUnion(const ArrayVector& fields, |
| 1014 | int64_t size, int64_t alignment, |
| 1015 | MemoryPool* memory_pool) { |
| 1016 | DCHECK_GT(fields.size(), 0); |
| 1017 | // Trivial type codes map |
| 1018 | std::vector<UnionArray::type_code_t> type_codes(fields.size()); |
| 1019 | std::iota(type_codes.begin(), type_codes.end(), 0); |
| 1020 | |
| 1021 | // Generate array of type ids |
| 1022 | auto type_ids = Int8(size, 0, static_cast<int8_t>(fields.size() - 1), |
| 1023 | /*null_probability=*/0, alignment, memory_pool); |
| 1024 | |
| 1025 | // Generate array of offsets |
| 1026 | const auto& concrete_ids = checked_cast<const Int8Array&>(*type_ids); |
| 1027 | Int32Builder offsets_builder(memory_pool, alignment); |
| 1028 | ABORT_NOT_OK(offsets_builder.Reserve(size)); |
| 1029 | std::vector<int32_t> last_offsets(fields.size(), 0); |
| 1030 | for (int64_t i = 0; i < size; ++i) { |
| 1031 | const auto field_id = concrete_ids.Value(i); |
| 1032 | offsets_builder.UnsafeAppend(last_offsets[field_id]++); |
| 1033 | } |
| 1034 | std::shared_ptr<Array> offsets; |
| 1035 | ABORT_NOT_OK(offsets_builder.Finish(&offsets)); |
| 1036 | |
| 1037 | return *DenseUnionArray::Make(*type_ids, *offsets, fields, type_codes); |
| 1038 | } |
| 1039 | |
| 1040 | std::shared_ptr<Array> RandomArrayGenerator::ArrayOf(std::shared_ptr<DataType> type, |
| 1041 | int64_t size, |
no test coverage detected