Skip to content

Commit 3c6915f

Browse files
committed
fixup! improve chunk handling in column iterator
1 parent 0534324 commit 3c6915f

File tree

1 file changed

+24
-13
lines changed
  • Framework/Core/include/Framework

1 file changed

+24
-13
lines changed

Framework/Core/include/Framework/ASoA.h

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ class ColumnIterator : ChunkingPolicy
589589
mutable int mOffset;
590590

591591
private:
592-
void checkSkipChunk()
592+
void checkSkipChunk() const
593593
requires((ChunkingPolicy::chunked == true) && std::same_as<arrow_array_for_t<T>, arrow::ListArray>)
594594
{
595595
auto list = std::static_pointer_cast<arrow::ListArray>(mColumn->chunk(mCurrentChunk));
@@ -598,33 +598,44 @@ class ColumnIterator : ChunkingPolicy
598598
}
599599
}
600600

601-
void checkSkipChunk()
601+
void checkSkipChunk() const
602602
requires((ChunkingPolicy::chunked == true) && !std::same_as<arrow_array_for_t<T>, arrow::ListArray>)
603603
{
604604
if (O2_BUILTIN_UNLIKELY(((mCurrent + (*mCurrentPos >> SCALE_FACTOR)) >= mLast))) {
605605
nextChunk();
606606
}
607607
}
608608

609-
void checkSkipChunk()
609+
void checkSkipChunk() const
610610
requires(ChunkingPolicy::chunked == false)
611611
{
612612
}
613613
/// get pointer to mCurrentChunk chunk
614614
auto getCurrentArray() const
615+
requires(std::same_as<arrow_array_for_t<T>, arrow::FixedSizeListArray>)
615616
{
616617
std::shared_ptr<arrow::Array> chunkToUse = mColumn->chunk(mCurrentChunk);
617618
mOffset = chunkToUse->offset();
618-
if constexpr (std::same_as<arrow_array_for_t<T>, arrow::FixedSizeListArray>) {
619-
chunkToUse = std::dynamic_pointer_cast<arrow::FixedSizeListArray>(chunkToUse)->values();
620-
return std::static_pointer_cast<arrow_array_for_t<value_for_t<T>>>(chunkToUse);
621-
} else if constexpr (std::same_as<arrow_array_for_t<T>, arrow::ListArray>) {
622-
chunkToUse = std::dynamic_pointer_cast<arrow::ListArray>(chunkToUse)->values();
623-
mOffset = chunkToUse->offset();
624-
return std::static_pointer_cast<arrow_array_for_t<value_for_t<T>>>(chunkToUse);
625-
} else {
626-
return std::static_pointer_cast<arrow_array_for_t<T>>(chunkToUse);
627-
}
619+
chunkToUse = std::dynamic_pointer_cast<arrow::FixedSizeListArray>(chunkToUse)->values();
620+
return std::static_pointer_cast<arrow_array_for_t<value_for_t<T>>>(chunkToUse);
621+
}
622+
623+
auto getCurrentArray() const
624+
requires(std::same_as<arrow_array_for_t<T>, arrow::ListArray>)
625+
{
626+
std::shared_ptr<arrow::Array> chunkToUse = mColumn->chunk(mCurrentChunk);
627+
mOffset = chunkToUse->offset();
628+
chunkToUse = std::dynamic_pointer_cast<arrow::ListArray>(chunkToUse)->values();
629+
mOffset = chunkToUse->offset();
630+
return std::static_pointer_cast<arrow_array_for_t<value_for_t<T>>>(chunkToUse);
631+
}
632+
633+
auto getCurrentArray() const
634+
requires(!std::same_as<arrow_array_for_t<T>, arrow::FixedSizeListArray> && !std::same_as<arrow_array_for_t<T>, arrow::ListArray>)
635+
{
636+
std::shared_ptr<arrow::Array> chunkToUse = mColumn->chunk(mCurrentChunk);
637+
mOffset = chunkToUse->offset();
638+
return std::static_pointer_cast<arrow_array_for_t<T>>(chunkToUse);
628639
}
629640
};
630641

0 commit comments

Comments
 (0)