MCPcopy Create free account
hub / github.com/apache/arrow / DenseUnion

Method DenseUnion

cpp/src/arrow/testing/random.cc:1013–1038  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1011}
1012
1013std::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
1040std::shared_ptr<Array> RandomArrayGenerator::ArrayOf(std::shared_ptr<DataType> type,
1041 int64_t size,

Callers 1

Calls 8

MakeFunction · 0.50
sizeMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
ReserveMethod · 0.45
ValueMethod · 0.45
UnsafeAppendMethod · 0.45
FinishMethod · 0.45

Tested by

no test coverage detected