From ae312683f3cfac020c2720387f4bd13241397b44 Mon Sep 17 00:00:00 2001 From: Sarah Gilmore Date: Tue, 7 Nov 2023 16:52:51 -0500 Subject: [PATCH 1/2] Update arrow::matlab::bit::unpack to accept a start_offset input parameter --- matlab/src/cpp/arrow/matlab/array/proxy/array.cc | 2 +- matlab/src/cpp/arrow/matlab/array/proxy/boolean_array.cc | 2 +- matlab/src/cpp/arrow/matlab/bit/unpack.cc | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/matlab/src/cpp/arrow/matlab/array/proxy/array.cc b/matlab/src/cpp/arrow/matlab/array/proxy/array.cc index 4e52c990d3e..09d9473df47 100644 --- a/matlab/src/cpp/arrow/matlab/array/proxy/array.cc +++ b/matlab/src/cpp/arrow/matlab/array/proxy/array.cc @@ -100,7 +100,7 @@ namespace arrow::matlab::array::proxy { } auto validity_bitmap = array->null_bitmap(); - auto valid_elements_mda = bit::unpack(validity_bitmap, array_length); + auto valid_elements_mda = bit::unpack(validity_bitmap, array_length, array->offset()); context.outputs[0] = valid_elements_mda; } diff --git a/matlab/src/cpp/arrow/matlab/array/proxy/boolean_array.cc b/matlab/src/cpp/arrow/matlab/array/proxy/boolean_array.cc index 6a6e4782748..da3560ce522 100644 --- a/matlab/src/cpp/arrow/matlab/array/proxy/boolean_array.cc +++ b/matlab/src/cpp/arrow/matlab/array/proxy/boolean_array.cc @@ -53,7 +53,7 @@ namespace arrow::matlab::array::proxy { void BooleanArray::toMATLAB(libmexclass::proxy::method::Context& context) { auto array_length = array->length(); auto packed_logical_data_buffer = std::static_pointer_cast(array)->values(); - auto logical_array_mda = bit::unpack(packed_logical_data_buffer, array_length); + auto logical_array_mda = bit::unpack(packed_logical_data_buffer, array_length, array->offset()); context.outputs[0] = logical_array_mda; } } diff --git a/matlab/src/cpp/arrow/matlab/bit/unpack.cc b/matlab/src/cpp/arrow/matlab/bit/unpack.cc index 7135d593cf7..6cc88d48ede 100644 --- a/matlab/src/cpp/arrow/matlab/bit/unpack.cc +++ b/matlab/src/cpp/arrow/matlab/bit/unpack.cc @@ -20,7 +20,7 @@ #include "arrow/util/bitmap_visit.h" namespace arrow::matlab::bit { - ::matlab::data::TypedArray unpack(const std::shared_ptr& packed_buffer, int64_t length) { + ::matlab::data::TypedArray unpack(const std::shared_ptr& packed_buffer, int64_t length, int64_t start_offset) { const auto packed_buffer_ptr = packed_buffer->data(); ::matlab::data::ArrayFactory factory; @@ -31,7 +31,6 @@ namespace arrow::matlab::bit { auto unpacked_buffer_ptr = unpacked_buffer.get(); auto visitFcn = [&](const bool is_valid) { *unpacked_buffer_ptr++ = is_valid; }; - const int64_t start_offset = 0; arrow::internal::VisitBitsUnrolled(packed_buffer_ptr, start_offset, length, visitFcn); ::matlab::data::TypedArray unpacked_matlab_logical_Array = factory.createArrayFromBuffer({array_length, 1}, std::move(unpacked_buffer)); From b8133d3da29968e8fa9d03bec6c1b917bbb03d5d Mon Sep 17 00:00:00 2001 From: Sarah Gilmore Date: Tue, 7 Nov 2023 16:59:57 -0500 Subject: [PATCH 2/2] Update unpack function signature in unpack.h --- matlab/src/cpp/arrow/matlab/bit/unpack.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/matlab/src/cpp/arrow/matlab/bit/unpack.h b/matlab/src/cpp/arrow/matlab/bit/unpack.h index b6debb85f83..6cd633e76fa 100644 --- a/matlab/src/cpp/arrow/matlab/bit/unpack.h +++ b/matlab/src/cpp/arrow/matlab/bit/unpack.h @@ -22,6 +22,6 @@ #include "MatlabDataArray.hpp" namespace arrow::matlab::bit { - ::matlab::data::TypedArray unpack(const std::shared_ptr& packed_buffer, int64_t length); + ::matlab::data::TypedArray unpack(const std::shared_ptr& packed_buffer, int64_t length, int64_t start_offset); const uint8_t* extract_ptr(const ::matlab::data::TypedArray& unpacked_validity_bitmap); }