66#include " Message_generated.h"
77#include " sparrow_ipc/arrow_interface/arrow_array.hpp"
88#include " sparrow_ipc/arrow_interface/arrow_schema.hpp"
9-
9+ # include " sparrow_ipc/deserialize_utils.hpp "
1010
1111namespace sparrow_ipc
1212{
13-
1413 [[nodiscard]] sparrow::fixed_width_binary_array deserialize_fixedwidthbinary (
1514 const org::apache::arrow::flatbuf::RecordBatch& record_batch,
1615 std::span<const uint8_t > body,
@@ -21,27 +20,32 @@ namespace sparrow_ipc
2120 )
2221 {
2322 const std::string format = " w:" + std::to_string (byte_width);
24- ArrowSchema schema = make_arrow_schema (format, name. data (), metadata, std:: nullopt , 0 , nullptr , nullptr );
25-
26- const auto bitmap_buffer_metadata = record_batch. buffers ()-> Get (buffer_index++);
27-
28- uint8_t * bitmap_ptr = nullptr ;
29- int64_t null_count = 0 ;
30-
31- // Check if validity buffer is present (length > 0 for nullable fields)
32- if (bitmap_buffer_metadata-> length () > 0 ) {
33- bitmap_ptr = const_cast < uint8_t *>(body. data () + bitmap_buffer_metadata-> offset ());
34- const sparrow::dynamic_bitset_view< const std:: uint8_t > bitmap_view{bitmap_ptr, static_cast < size_t >( record_batch. length ())};
35- null_count = bitmap_view. null_count ();
36- }
37-
23+ ArrowSchema schema = make_non_owning_arrow_schema (
24+ format,
25+ name. data (),
26+ metadata,
27+ std:: nullopt ,
28+ 0 ,
29+ nullptr ,
30+ nullptr
31+ );
32+ const auto [ bitmap_ptr, null_count] = utils::get_bitmap_pointer_and_null_count (
33+ record_batch,
34+ body,
35+ buffer_index++
36+ );
3837 const auto buffer_metadata = record_batch.buffers ()->Get (buffer_index++);
3938 auto buffer_ptr = const_cast <uint8_t *>(body.data () + buffer_metadata->offset ());
40-
4139 std::vector<std::uint8_t *> buffers = {bitmap_ptr, buffer_ptr};
42-
43- ArrowArray array = make_arrow_array (record_batch.length (), null_count, 0 , std::move (buffers), 0 , nullptr , nullptr );
44-
40+ ArrowArray array = make_non_owning_arrow_array (
41+ record_batch.length (),
42+ null_count,
43+ 0 ,
44+ std::move (buffers),
45+ 0 ,
46+ nullptr ,
47+ nullptr
48+ );
4549 sparrow::arrow_proxy ap{std::move (array), std::move (schema)};
4650 return sparrow::fixed_width_binary_array{std::move (ap)};
4751 }
0 commit comments