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

Function UnalignedBitmapOp

cpp/src/arrow/util/bitmap_ops.cc:382–404  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

380
381template <template <typename> class BitOp>
382void UnalignedBitmapOp(const uint8_t* left, int64_t left_offset, const uint8_t* right,
383 int64_t right_offset, uint8_t* out, int64_t out_offset,
384 int64_t length) {
385 BitOp<uint64_t> op_word;
386 BitOp<uint8_t> op_byte;
387
388 auto left_reader = internal::BitmapWordReader<uint64_t>(left, left_offset, length);
389 auto right_reader = internal::BitmapWordReader<uint64_t>(right, right_offset, length);
390 auto writer = internal::BitmapWordWriter<uint64_t>(out, out_offset, length);
391
392 auto nwords = left_reader.words();
393 while (nwords--) {
394 writer.PutNextWord(op_word(left_reader.NextWord(), right_reader.NextWord()));
395 }
396 auto nbytes = left_reader.trailing_bytes();
397 while (nbytes--) {
398 int left_valid_bits, right_valid_bits;
399 uint8_t left_byte = left_reader.NextTrailingByte(left_valid_bits);
400 uint8_t right_byte = right_reader.NextTrailingByte(right_valid_bits);
401 DCHECK_EQ(left_valid_bits, right_valid_bits);
402 writer.PutNextTrailingByte(op_byte(left_byte, right_byte), left_valid_bits);
403 }
404}
405
406// XXX: The bits before left/right/out_offset, if unaligned, are untouched. But not for
407// the bits after length. Caller should ensure proper alignment for the tail bits if

Callers

nothing calls this directly

Calls 6

PutNextWordMethod · 0.80
trailing_bytesMethod · 0.80
NextTrailingByteMethod · 0.80
PutNextTrailingByteMethod · 0.80
wordsMethod · 0.45
NextWordMethod · 0.45

Tested by

no test coverage detected