| 380 | } |
| 381 | |
| 382 | void AsyncAddArrowNumColumn( |
| 383 | ui32 flatFeatureIdx, |
| 384 | PyObject* capsule, |
| 385 | IRawFeaturesOrderDataVisitor* builderVisitor, |
| 386 | TVector<std::future<void>>* result |
| 387 | ) { |
| 388 | auto callback = [=] (TArrowSchemaHolderPtr schema, TArrowArrayHolderPtr array) { |
| 389 | auto process = [=] () { |
| 390 | try { |
| 391 | CB_ENSURE(array->Data.n_buffers == 2, "Expected two buffers"); |
| 392 | |
| 393 | const ui8* __restrict validity = static_cast<const ui8*>(array->Data.buffers[0]); |
| 394 | const void* dataBuf = array->Data.buffers[1]; |
| 395 | auto arrayOffset = array->Data.offset; |
| 396 | auto arraySize = array->Data.length; |
| 397 | |
| 398 | ITypedSequencePtr<float> result; |
| 399 | |
| 400 | auto typedProcessing = [&] (const auto* __restrict typedDataBuf) { |
| 401 | using TSrcType = std::remove_cvref_t<decltype(*typedDataBuf)>; |
| 402 | auto arrayDataHolder = TMaybeOwningConstArrayHolder<TSrcType>::CreateOwning( |
| 403 | {typedDataBuf + arrayOffset, typedDataBuf + arrayOffset + arraySize}, |
| 404 | array |
| 405 | ); |
| 406 | |
| 407 | if (validity) { |
| 408 | using TInner = TArrayWithValidityHolder<TMaybeOwningConstArrayHolder<TSrcType>>; |
| 409 | result = MakeIntrusive<TArrayLikeAsFloatSequence<TInner>>( |
| 410 | TInner( |
| 411 | std::move(arrayDataHolder), |
| 412 | TMaybeOwnedBitMap(validity, arrayOffset, arraySize, array) |
| 413 | ) |
| 414 | ); |
| 415 | } else { |
| 416 | result = MakeTypeCastArrayHolder<float>(std::move(arrayDataHolder)); |
| 417 | } |
| 418 | }; |
| 419 | |
| 420 | auto boolProcessing = [&] () { |
| 421 | auto data = TMaybeOwnedBitMap( |
| 422 | static_cast<const ui8*>(dataBuf), |
| 423 | arrayOffset, |
| 424 | arraySize, |
| 425 | array |
| 426 | ); |
| 427 | if (validity) { |
| 428 | using TInner = TArrayWithValidityHolder<TMaybeOwnedBitMap>; |
| 429 | result = MakeIntrusive<TArrayLikeAsFloatSequence<TInner>>( |
| 430 | TInner( |
| 431 | std::move(data), |
| 432 | TMaybeOwnedBitMap(validity, arrayOffset, arraySize, array) |
| 433 | ) |
| 434 | ); |
| 435 | } else { |
| 436 | result = MakeIntrusive<TArrayLikeAsFloatSequence<TMaybeOwnedBitMap>>(std::move(data)); |
| 437 | } |
| 438 | }; |
| 439 |
nothing calls this directly
no test coverage detected