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

Function VisitTwoBitBlocks

cpp/src/arrow/util/bit_block_counter.h:483–524  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

481
482template <typename VisitNotNull, typename VisitNull>
483static Status VisitTwoBitBlocks(const uint8_t* left_bitmap, int64_t left_offset,
484 const uint8_t* right_bitmap, int64_t right_offset,
485 int64_t length, VisitNotNull&& visit_not_null,
486 VisitNull&& visit_null) {
487 if (left_bitmap == NULLPTR || right_bitmap == NULLPTR) {
488 // At most one bitmap is present
489 if (left_bitmap == NULLPTR) {
490 return VisitBitBlocks(right_bitmap, right_offset, length,
491 std::forward<VisitNotNull>(visit_not_null),
492 std::forward<VisitNull>(visit_null));
493 } else {
494 return VisitBitBlocks(left_bitmap, left_offset, length,
495 std::forward<VisitNotNull>(visit_not_null),
496 std::forward<VisitNull>(visit_null));
497 }
498 }
499 BinaryBitBlockCounter bit_counter(left_bitmap, left_offset, right_bitmap, right_offset,
500 length);
501 int64_t position = 0;
502 while (position < length) {
503 BitBlockCount block = bit_counter.NextAndWord();
504 if (block.AllSet()) {
505 for (int64_t i = 0; i < block.length; ++i, ++position) {
506 ARROW_RETURN_NOT_OK(visit_not_null(position));
507 }
508 } else if (block.NoneSet()) {
509 for (int64_t i = 0; i < block.length; ++i, ++position) {
510 ARROW_RETURN_NOT_OK(visit_null());
511 }
512 } else {
513 for (int64_t i = 0; i < block.length; ++i, ++position) {
514 if (bit_util::GetBit(left_bitmap, left_offset + position) &&
515 bit_util::GetBit(right_bitmap, right_offset + position)) {
516 ARROW_RETURN_NOT_OK(visit_not_null(position));
517 } else {
518 ARROW_RETURN_NOT_OK(visit_null());
519 }
520 }
521 }
522 }
523 return Status::OK();
524}
525
526template <typename VisitNotNull, typename VisitNull>
527static void VisitTwoBitBlocksVoid(const uint8_t* left_bitmap, int64_t left_offset,

Callers 2

ExecArrayArrayMethod · 0.85
ConsumeMethod · 0.85

Calls 5

VisitBitBlocksFunction · 0.85
NoneSetMethod · 0.80
GetBitFunction · 0.70
OKFunction · 0.50
AllSetMethod · 0.45

Tested by

no test coverage detected