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

Function VisitWordsAndWrite

cpp/src/arrow/util/bitmap.h:332–375  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

330 typename Word = typename std::decay<
331 internal::call_traits::argument_type<0, Visitor&&>>::type::value_type>
332 static void VisitWordsAndWrite(const std::array<Bitmap, N>& bitmaps_arg,
333 std::array<Bitmap, M>* out_bitmaps_arg,
334 Visitor&& visitor) {
335 int64_t bit_length = BitLength(bitmaps_arg);
336 assert(bit_length == BitLength(*out_bitmaps_arg));
337
338 // if both input and output bitmaps have no byte offset, then use special template
339 if (std::all_of(bitmaps_arg.begin(), bitmaps_arg.end(),
340 [](const Bitmap& b) { return b.offset_ % 8 == 0; }) &&
341 std::all_of(out_bitmaps_arg->begin(), out_bitmaps_arg->end(),
342 [](const Bitmap& b) { return b.offset_ % 8 == 0; })) {
343 std::array<BitmapWordReader<Word, /*may_have_byte_offset=*/false>, N> readers;
344 for (size_t i = 0; i < N; ++i) {
345 const Bitmap& in_bitmap = bitmaps_arg[i];
346 readers[i] = BitmapWordReader<Word, /*may_have_byte_offset=*/false>(
347 in_bitmap.data_, in_bitmap.offset_, in_bitmap.length_);
348 }
349
350 std::array<BitmapWordWriter<Word, /*may_have_byte_offset=*/false>, M> writers;
351 for (size_t i = 0; i < M; ++i) {
352 const Bitmap& out_bitmap = out_bitmaps_arg->at(i);
353 writers[i] = BitmapWordWriter<Word, /*may_have_byte_offset=*/false>(
354 out_bitmap.mutable_data_, out_bitmap.offset_, out_bitmap.length_);
355 }
356
357 RunVisitWordsAndWriteLoop(bit_length, readers, writers, visitor);
358 } else {
359 std::array<BitmapWordReader<Word>, N> readers;
360 for (size_t i = 0; i < N; ++i) {
361 const Bitmap& in_bitmap = bitmaps_arg[i];
362 readers[i] =
363 BitmapWordReader<Word>(in_bitmap.data_, in_bitmap.offset_, in_bitmap.length_);
364 }
365
366 std::array<BitmapWordWriter<Word>, M> writers;
367 for (size_t i = 0; i < M; ++i) {
368 const Bitmap& out_bitmap = out_bitmaps_arg->at(i);
369 writers[i] = BitmapWordWriter<Word>(out_bitmap.mutable_data_, out_bitmap.offset_,
370 out_bitmap.length_);
371 }
372
373 RunVisitWordsAndWriteLoop(bit_length, readers, writers, visitor);
374 }
375 }
376
377 const uint8_t* data() const { return data_; }
378 uint8_t* mutable_data() { return mutable_data_; }

Callers 3

DoBitmapVisitAndWriteFunction · 0.85
WriteOutputMethod · 0.85
ComputeKleeneFunction · 0.85

Calls 4

BitLengthFunction · 0.85
beginMethod · 0.45
endMethod · 0.45

Tested by 1

DoBitmapVisitAndWriteFunction · 0.68