You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ap...@apache.org on 2023/06/26 09:10:54 UTC
[arrow] branch main updated: MINOR: [C++] Separate ListArray from LargeListArray member function implementations (#36276)
This is an automated email from the ASF dual-hosted git repository.
apitrou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new 2c5700fa52 MINOR: [C++] Separate ListArray from LargeListArray member function implementations (#36276)
2c5700fa52 is described below
commit 2c5700fa523a035cf3e7ad1e378fd803b5b4f85c
Author: Felipe Oliveira Carvalho <fe...@gmail.com>
AuthorDate: Mon Jun 26 06:10:48 2023 -0300
MINOR: [C++] Separate ListArray from LargeListArray member function implementations (#36276)
### Rationale for this change
Grouping the functions by the class they belong to make it less confusing when I need to add a third and fourth list class.
### What changes are included in this PR?
Just moving functions around in the source file.
### Are these changes tested?
Yes.
Authored-by: Felipe Oliveira Carvalho <fe...@gmail.com>
Signed-off-by: Antoine Pitrou <an...@python.org>
---
cpp/src/arrow/array/array_nested.cc | 74 ++++++++++++++++++++-----------------
1 file changed, 40 insertions(+), 34 deletions(-)
diff --git a/cpp/src/arrow/array/array_nested.cc b/cpp/src/arrow/array/array_nested.cc
index 745312f1da..86b215fc41 100644
--- a/cpp/src/arrow/array/array_nested.cc
+++ b/cpp/src/arrow/array/array_nested.cc
@@ -48,7 +48,7 @@ using internal::checked_pointer_cast;
using internal::CopyBitmap;
// ----------------------------------------------------------------------
-// ListArray / LargeListArray
+// ListArray / LargeListArray (common utilities)
namespace {
@@ -190,6 +190,15 @@ Result<std::shared_ptr<Array>> FlattenListArray(const ListArrayT& list_array,
return Concatenate(non_null_fragments, memory_pool);
}
+std::shared_ptr<Array> BoxOffsets(const std::shared_ptr<DataType>& boxed_type,
+ const ArrayData& data) {
+ std::vector<std::shared_ptr<Buffer>> buffers = {nullptr, data.buffers[1]};
+ auto offsets_data =
+ std::make_shared<ArrayData>(boxed_type, data.length + 1, std::move(buffers),
+ /*null_count=*/0, data.offset);
+ return MakeArray(offsets_data);
+}
+
} // namespace
namespace internal {
@@ -214,9 +223,10 @@ inline void SetListData(BaseListArray<TYPE>* self, const std::shared_ptr<ArrayDa
} // namespace internal
-ListArray::ListArray(std::shared_ptr<ArrayData> data) { SetData(std::move(data)); }
+// ----------------------------------------------------------------------
+// ListArray
-LargeListArray::LargeListArray(const std::shared_ptr<ArrayData>& data) { SetData(data); }
+ListArray::ListArray(std::shared_ptr<ArrayData> data) { SetData(std::move(data)); }
ListArray::ListArray(std::shared_ptr<DataType> type, int64_t length,
std::shared_ptr<Buffer> value_offsets, std::shared_ptr<Array> values,
@@ -234,22 +244,6 @@ void ListArray::SetData(const std::shared_ptr<ArrayData>& data) {
internal::SetListData(this, data);
}
-LargeListArray::LargeListArray(const std::shared_ptr<DataType>& type, int64_t length,
- const std::shared_ptr<Buffer>& value_offsets,
- const std::shared_ptr<Array>& values,
- const std::shared_ptr<Buffer>& null_bitmap,
- int64_t null_count, int64_t offset) {
- ARROW_CHECK_EQ(type->id(), Type::LARGE_LIST);
- auto internal_data =
- ArrayData::Make(type, length, {null_bitmap, value_offsets}, null_count, offset);
- internal_data->child_data.emplace_back(values->data());
- SetData(internal_data);
-}
-
-void LargeListArray::SetData(const std::shared_ptr<ArrayData>& data) {
- internal::SetListData(this, data);
-}
-
Result<std::shared_ptr<ListArray>> ListArray::FromArrays(
const Array& offsets, const Array& values, MemoryPool* pool,
std::shared_ptr<Buffer> null_bitmap, int64_t null_count) {
@@ -271,6 +265,33 @@ Result<std::shared_ptr<ListArray>> ListArray::FromArrays(
null_bitmap, null_count);
}
+Result<std::shared_ptr<Array>> ListArray::Flatten(MemoryPool* memory_pool) const {
+ return FlattenListArray(*this, memory_pool);
+}
+
+std::shared_ptr<Array> ListArray::offsets() const { return BoxOffsets(int32(), *data_); }
+
+// ----------------------------------------------------------------------
+// LargeListArray
+
+LargeListArray::LargeListArray(const std::shared_ptr<ArrayData>& data) { SetData(data); }
+
+LargeListArray::LargeListArray(const std::shared_ptr<DataType>& type, int64_t length,
+ const std::shared_ptr<Buffer>& value_offsets,
+ const std::shared_ptr<Array>& values,
+ const std::shared_ptr<Buffer>& null_bitmap,
+ int64_t null_count, int64_t offset) {
+ ARROW_CHECK_EQ(type->id(), Type::LARGE_LIST);
+ auto internal_data =
+ ArrayData::Make(type, length, {null_bitmap, value_offsets}, null_count, offset);
+ internal_data->child_data.emplace_back(values->data());
+ SetData(internal_data);
+}
+
+void LargeListArray::SetData(const std::shared_ptr<ArrayData>& data) {
+ internal::SetListData(this, data);
+}
+
Result<std::shared_ptr<LargeListArray>> LargeListArray::FromArrays(
const Array& offsets, const Array& values, MemoryPool* pool,
std::shared_ptr<Buffer> null_bitmap, int64_t null_count) {
@@ -293,25 +314,10 @@ Result<std::shared_ptr<LargeListArray>> LargeListArray::FromArrays(
null_bitmap, null_count);
}
-Result<std::shared_ptr<Array>> ListArray::Flatten(MemoryPool* memory_pool) const {
- return FlattenListArray(*this, memory_pool);
-}
-
Result<std::shared_ptr<Array>> LargeListArray::Flatten(MemoryPool* memory_pool) const {
return FlattenListArray(*this, memory_pool);
}
-static std::shared_ptr<Array> BoxOffsets(const std::shared_ptr<DataType>& boxed_type,
- const ArrayData& data) {
- std::vector<std::shared_ptr<Buffer>> buffers = {nullptr, data.buffers[1]};
- auto offsets_data =
- std::make_shared<ArrayData>(boxed_type, data.length + 1, std::move(buffers),
- /*null_count=*/0, data.offset);
- return MakeArray(offsets_data);
-}
-
-std::shared_ptr<Array> ListArray::offsets() const { return BoxOffsets(int32(), *data_); }
-
std::shared_ptr<Array> LargeListArray::offsets() const {
return BoxOffsets(int64(), *data_);
}