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

Function TransferBool

cpp/src/parquet/arrow/reader_internal.cc:469–502  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

467}
468
469Status TransferBool(RecordReader* reader,
470 std::unique_ptr<::parquet::ColumnChunkMetaData> metadata,
471 const ReaderContext* ctx, bool nullable, Datum* out) {
472 int64_t length = reader->values_written();
473
474 const int64_t buffer_size = bit_util::BytesForBits(length);
475 ARROW_ASSIGN_OR_RAISE(auto data, ::arrow::AllocateBuffer(buffer_size, ctx->pool));
476
477 // Transfer boolean values to packed bitmap
478 auto values = reinterpret_cast<const bool*>(reader->values());
479 uint8_t* data_ptr = data->mutable_data();
480 memset(data_ptr, 0, static_cast<size_t>(buffer_size));
481
482 for (int64_t i = 0; i < length; i++) {
483 if (values[i]) {
484 ::arrow::bit_util::SetBit(data_ptr, i);
485 }
486 }
487
488 std::shared_ptr<::arrow::ArrayData> array_data;
489 if (nullable) {
490 array_data = ::arrow::ArrayData::Make(::arrow::boolean(), length,
491 {reader->ReleaseIsValid(), std::move(data)},
492 reader->null_count());
493 } else {
494 array_data = ::arrow::ArrayData::Make(::arrow::boolean(), length,
495 {/*null_bitmap=*/nullptr, std::move(data)},
496 /*null_count=*/0);
497 }
498 AttachStatistics<::arrow::BooleanType, BooleanType>(array_data.get(),
499 std::move(metadata), ctx);
500 *out = std::make_shared<BooleanArray>(std::move(array_data));
501 return Status::OK();
502}
503
504Status TransferInt96(RecordReader* reader, MemoryPool* pool,
505 const std::shared_ptr<Field>& field, Datum* out,

Callers 1

TransferColumnDataFunction · 0.85

Calls 9

BytesForBitsFunction · 0.85
SetBitFunction · 0.85
ReleaseIsValidMethod · 0.80
MakeFunction · 0.50
OKFunction · 0.50
valuesMethod · 0.45
mutable_dataMethod · 0.45
null_countMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected