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

Function ConvertColumnsToTensor

cpp/src/arrow/tensor.cc:306–341  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

304
305template <typename DataType, typename Container>
306inline void ConvertColumnsToTensor(const Container& container, uint8_t* out,
307 bool row_major) {
308 using CType = typename arrow::TypeTraits<DataType>::CType;
309 auto* out_values = reinterpret_cast<CType*>(out);
310
311 const int num_columns = container.num_columns();
312
313 for (int col_idx = 0; col_idx < num_columns; ++col_idx) {
314 if constexpr (std::is_same_v<Container, Table>) {
315 int64_t chunk_idx = 0;
316
317 for (const auto& chunk : container.columns()[col_idx]->chunks()) {
318 if (row_major) {
319 ConvertArrayToTensorRowMajorVisitor<CType> visitor{
320 out_values, *chunk->data(), num_columns, col_idx, chunk_idx};
321 DCHECK_OK(VisitTypeInline(*chunk->type(), &visitor));
322 chunk_idx += chunk->length();
323 } else {
324 ConvertArrayToTensorVisitor<CType> visitor{out_values, *chunk->data()};
325 DCHECK_OK(VisitTypeInline(*chunk->type(), &visitor));
326 }
327 }
328 } else if constexpr (std::is_same_v<Container, RecordBatch>) {
329 const auto& array_data = container.column_data()[col_idx];
330
331 if (row_major) {
332 ConvertArrayToTensorRowMajorVisitor<CType> visitor{out_values, *array_data,
333 num_columns, col_idx, 0};
334 DCHECK_OK(VisitTypeInline(*array_data->type, &visitor));
335 } else {
336 ConvertArrayToTensorVisitor<CType> visitor{out_values, *array_data};
337 DCHECK_OK(VisitTypeInline(*array_data->type, &visitor));
338 }
339 }
340 }
341}
342
343template <typename Container>
344Status ToTensorImpl(const Container& container, bool null_to_nan, bool row_major,

Callers

nothing calls this directly

Calls 8

VisitTypeInlineFunction · 0.85
columnsMethod · 0.80
column_dataMethod · 0.80
num_columnsMethod · 0.45
chunksMethod · 0.45
dataMethod · 0.45
typeMethod · 0.45
lengthMethod · 0.45

Tested by

no test coverage detected