| 304 | |
| 305 | template <typename DataType, typename Container> |
| 306 | inline 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 | |
| 343 | template <typename Container> |
| 344 | Status ToTensorImpl(const Container& container, bool null_to_nan, bool row_major, |
nothing calls this directly
no test coverage detected