38 template <
class DERIVED>
147 template <input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
151 std::optional<std::string_view> name,
152 std::optional<METADATA_RANGE> metadata,
157 std::optional<std::unordered_set<ArrowFlag>>
176 std::int64_t null_count,
186 std::move(arr_buffs),
251 template <
class DERIVED>
335 using list_size_type =
inner_types::list_size_type;
368 using offset_type = std::conditional_t<BIG, const std::int64_t, const std::int32_t>;
422 template <class... ARGS>
446 template <std::ranges::range SIZES_RANGE>
477 std::optional<std::string_view> name = std::nullopt,
478 std::optional<METADATA_RANGE> metadata = std::nullopt
501 std::ranges::input_range OFFSET_BUFFER_RANGE,
503 requires std::convertible_to<std::ranges::range_value_t<OFFSET_BUFFER_RANGE>,
offset_type>
506 OFFSET_BUFFER_RANGE&& list_offsets_range,
508 std::optional<std::string_view> name = std::nullopt,
509 std::optional<METADATA_RANGE> metadata = std::nullopt
512 offset_buffer_type list_offsets{std::forward<OFFSET_BUFFER_RANGE>(list_offsets_range)};
513 return list_array_impl<BIG>::create_proxy(
514 std::move(flat_values),
515 std::move(list_offsets),
516 std::forward<VB>(validity_input),
517 std::forward<std::optional<std::string_view>>(name),
518 std::forward<std::optional<METADATA_RANGE>>(metadata)
524 input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
525 [[nodiscard]]
static arrow_proxy create_proxy(
527 offset_buffer_type&& list_offsets,
528 bool nullable =
true,
529 std::optional<std::string_view> name = std::nullopt,
530 std::optional<METADATA_RANGE> metadata = std::nullopt
535 std::ranges::input_range OFFSET_BUFFER_RANGE,
536 input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
537 requires std::convertible_to<std::ranges::range_value_t<OFFSET_BUFFER_RANGE>, offset_type>
538 [[nodiscard]]
static arrow_proxy create_proxy(
540 OFFSET_BUFFER_RANGE&& list_offsets_range,
541 bool nullable =
true,
542 std::optional<std::string_view> name = std::nullopt,
543 std::optional<METADATA_RANGE> metadata = std::nullopt
546 offset_buffer_type list_offsets{std::forward<OFFSET_BUFFER_RANGE>(list_offsets_range)};
547 return list_array_impl<BIG>::create_proxy(
548 std::move(flat_values),
549 std::move(list_offsets),
551 std::forward<std::optional<std::string_view>>(name),
552 std::forward<std::optional<METADATA_RANGE>>(metadata)
556 static constexpr std::size_t OFFSET_BUFFER_INDEX = 1;
557 [[nodiscard]]
constexpr std::pair<offset_type, offset_type> offset_range(
size_type i)
const;
559 [[nodiscard]]
constexpr offset_type* make_list_offsets();
578 using offset_type = std::conditional_t<BIG, const std::int64_t, const std::int32_t>;
634 template <
class... ARGS>
637 :
self_type(create_proxy(std::forward<ARGS>(args)...))
667 std::ranges::input_range OFFSET_BUFFER_RANGE,
668 std::ranges::input_range SIZE_RANGE,
672 std::convertible_to<std::ranges::range_value_t<OFFSET_BUFFER_RANGE>, offset_type>
673 && std::convertible_to<std::ranges::range_value_t<SIZE_RANGE>, list_size_type>
677 OFFSET_BUFFER_RANGE&& list_offsets,
678 SIZE_RANGE&& list_sizes,
680 std::optional<std::string_view> name = std::nullopt,
681 std::optional<METADATA_RANGE> metadata = std::nullopt
684 return list_view_array_impl<BIG>::create_proxy(
685 std::move(flat_values),
686 offset_buffer_type(std::forward<OFFSET_BUFFER_RANGE>(list_offsets)),
687 size_buffer_type(std::forward<SIZE_RANGE>(list_sizes)),
688 std::forward<VB>(validity_input),
695 validity_bitmap_input VB = validity_bitmap,
696 input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
697 [[nodiscard]]
static arrow_proxy create_proxy(
699 offset_buffer_type&& list_offsets,
700 size_buffer_type&& list_sizes,
702 std::optional<std::string_view> name = std::nullopt,
703 std::optional<METADATA_RANGE> metadata = std::nullopt
707 std::ranges::input_range OFFSET_BUFFER_RANGE,
708 std::ranges::input_range SIZE_RANGE,
709 input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
711 std::convertible_to<std::ranges::range_value_t<OFFSET_BUFFER_RANGE>, offset_type>
712 && std::convertible_to<std::ranges::range_value_t<SIZE_RANGE>, list_size_type>
714 [[nodiscard]]
static arrow_proxy create_proxy(
716 OFFSET_BUFFER_RANGE&& list_offsets,
717 SIZE_RANGE&& list_sizes,
718 bool nullable =
true,
719 std::optional<std::string_view> name = std::nullopt,
720 std::optional<METADATA_RANGE> metadata = std::nullopt
723 return list_view_array_impl<BIG>::create_proxy(
724 std::move(flat_values),
725 offset_buffer_type(std::forward<OFFSET_BUFFER_RANGE>(list_offsets)),
726 size_buffer_type(std::forward<SIZE_RANGE>(list_sizes)),
733 template <input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
734 [[nodiscard]]
static arrow_proxy create_proxy(
736 offset_buffer_type&& list_offsets,
737 size_buffer_type&& list_sizes,
738 bool nullable =
true,
739 std::optional<std::string_view> name = std::nullopt,
740 std::optional<METADATA_RANGE> metadata = std::nullopt
743 static constexpr std::size_t OFFSET_BUFFER_INDEX = 1;
744 static constexpr std::size_t SIZES_BUFFER_INDEX = 2;
745 [[nodiscard]]
constexpr std::pair<offset_type, offset_type> offset_range(size_type i)
const;
747 [[nodiscard]]
constexpr offset_type* make_list_offsets();
748 [[nodiscard]]
constexpr offset_type* make_list_sizes();
750 offset_type* p_list_offsets;
799 template <
class... ARGS>
802 :
self_type(create_proxy(std::forward<ARGS>(args)...))
830 std::uint64_t list_size,
833 std::optional<std::string_view> name = std::nullopt,
834 std::optional<METADATA_RANGE> metadata = std::nullopt
859 std::uint64_t list_size,
862 std::optional<std::string_view> name = std::nullopt,
863 std::optional<METADATA_RANGE> metadata = std::nullopt
878 [[nodiscard]]
static uint64_t list_size_from_format(
const std::string_view format);
890 [[nodiscard]]
constexpr std::pair<offset_type, offset_type> offset_range(size_type i)
const;
892 uint64_t m_list_size;
903 template <
class DERIVED>
906 , p_flat_array(make_flat_array())
910 template <
class DERIVED>
913 , p_flat_array(make_flat_array())
917 template <
class DERIVED>
921 p_flat_array = make_flat_array();
925 template <
class DERIVED>
928 return p_flat_array.get();
931 template <
class DERIVED>
934 return p_flat_array.get();
937 template <
class DERIVED>
938 constexpr auto list_array_crtp_base<DERIVED>::value_begin() -> value_iterator
943 template <
class DERIVED>
944 constexpr auto list_array_crtp_base<DERIVED>::value_end() -> value_iterator
946 return value_iterator(
947 detail::layout_value_functor<DERIVED, inner_value_type>(&this->derived_cast()),
952 template <
class DERIVED>
953 constexpr auto list_array_crtp_base<DERIVED>::value_cbegin() const -> const_value_iterator
955 return const_value_iterator(
961 template <
class DERIVED>
962 constexpr auto list_array_crtp_base<DERIVED>::value_cend() const -> const_value_iterator
964 return const_value_iterator(
970 template <
class DERIVED>
971 constexpr auto list_array_crtp_base<DERIVED>::value(size_type i) -> inner_reference
973 const auto r = this->derived_cast().offset_range(i);
975 return list_value{p_flat_array.get(),
static_cast<st
>(r.first),
static_cast<st
>(r.second)};
978 template <
class DERIVED>
979 constexpr auto list_array_crtp_base<DERIVED>::value(size_type i)
const -> inner_const_reference
981 const auto r = this->derived_cast().offset_range(i);
983 return list_value{p_flat_array.get(),
static_cast<st
>(r.first),
static_cast<st
>(r.second)};
986 template <
class DERIVED>
989 return array_factory(this->get_arrow_proxy().children()[0].view());
997# pragma GCC diagnostic push
998# pragma GCC diagnostic ignored "-Wcast-align"
1004 , p_list_offsets(make_list_offsets())
1009 template <std::ranges::range SIZES_RANGE>
1013 std::forward<SIZES_RANGE>(sizes)
1018 template <val
idity_bitmap_input VB, input_metadata_container METADATA_RANGE>
1020 array&& flat_values,
1021 offset_buffer_type&& list_offsets,
1022 VB&& validity_input,
1023 std::optional<std::string_view> name,
1024 std::optional<METADATA_RANGE> metadata
1027 const auto size = list_offsets.size() - 1;
1029 const auto null_count = vbitmap.
null_count();
1034 BIG ? std::string(
"+L") : std::string(
"+l"),
1035 std::move(flat_schema),
1041 std::vector<buffer<std::uint8_t>> arr_buffs = {
1042 std::move(vbitmap).extract_storage(),
1043 std::move(list_offsets).extract_storage()
1047 static_cast<std::int64_t
>(size),
1048 static_cast<std::int64_t
>(null_count),
1049 std::move(arr_buffs),
1053 return arrow_proxy{std::move(arr), std::move(schema)};
1057 template <val
idity_bitmap_input VB, input_metadata_container METADATA_RANGE>
1059 array&& flat_values,
1060 offset_buffer_type&& list_offsets,
1062 std::optional<std::string_view> name,
1063 std::optional<METADATA_RANGE> metadata
1068 return list_array_impl<BIG>::create_proxy(
1069 std::move(flat_values),
1070 std::move(list_offsets),
1077 const auto size = list_offsets.size() - 1;
1081 BIG ? std::string(
"+L") : std::string(
"+l"),
1082 std::move(flat_schema),
1088 std::vector<buffer<std::uint8_t>> arr_buffs = {
1090 std::move(list_offsets).extract_storage()
1094 static_cast<std::int64_t
>(size),
1096 std::move(arr_buffs),
1100 return arrow_proxy{std::move(arr), std::move(schema)};
1106 , p_list_offsets(make_list_offsets())
1116 p_list_offsets = make_list_offsets();
1122 constexpr auto list_array_impl<BIG>::offset_range(size_type i)
const -> std::pair<offset_type, offset_type>
1124 return std::make_pair(p_list_offsets[i], p_list_offsets[i + 1]);
1128 constexpr auto list_array_impl<BIG>::make_list_offsets() -> offset_type*
1130 return reinterpret_cast<offset_type*
>(
1131 this->get_arrow_proxy().buffers()[OFFSET_BUFFER_INDEX].data() + this->get_arrow_proxy().offset()
1142 , p_list_offsets(make_list_offsets())
1143 , p_list_sizes(make_list_sizes())
1148 template <val
idity_bitmap_input VB, input_metadata_container METADATA_RANGE>
1149 arrow_proxy list_view_array_impl<BIG>::create_proxy(
1150 array&& flat_values,
1151 offset_buffer_type&& list_offsets,
1152 size_buffer_type&& list_sizes,
1153 VB&& validity_input,
1154 std::optional<std::string_view> name,
1155 std::optional<METADATA_RANGE> metadata
1158 SPARROW_ASSERT(list_offsets.size() == list_sizes.size(),
"sizes and offset must have the same size");
1159 const auto size = list_sizes.size();
1161 const auto null_count = vbitmap.
null_count();
1166 BIG ? std::string(
"+vL") : std::string(
"+vl"),
1167 std::move(flat_schema),
1173 std::vector<buffer<std::uint8_t>> arr_buffs = {
1174 std::move(vbitmap).extract_storage(),
1175 std::move(list_offsets).extract_storage(),
1176 std::move(list_sizes).extract_storage()
1180 static_cast<std::int64_t
>(size),
1181 static_cast<std::int64_t
>(null_count),
1182 std::move(arr_buffs),
1186 return arrow_proxy{std::move(arr), std::move(schema)};
1190 template <input_metadata_container METADATA_RANGE>
1191 arrow_proxy list_view_array_impl<BIG>::create_proxy(
1192 array&& flat_values,
1193 offset_buffer_type&& list_offsets,
1194 size_buffer_type&& list_sizes,
1196 std::optional<std::string_view> name,
1197 std::optional<METADATA_RANGE> metadata
1202 return list_view_array_impl<BIG>::create_proxy(
1203 std::move(flat_values),
1204 std::move(list_offsets),
1205 std::move(list_sizes),
1212 SPARROW_ASSERT(list_offsets.size() == list_sizes.size(),
"sizes and offset must have the same size");
1213 const auto size = list_sizes.size();
1217 BIG ? std::string(
"+vL") : std::string(
"+vl"),
1218 std::move(flat_schema),
1224 std::vector<buffer<std::uint8_t>> arr_buffs = {
1226 std::move(list_offsets).extract_storage(),
1227 std::move(list_sizes).extract_storage()
1231 static_cast<std::int64_t
>(size),
1233 std::move(arr_buffs),
1237 return arrow_proxy{std::move(arr), std::move(schema)};
1243 , p_list_offsets(make_list_offsets())
1244 , p_list_sizes(make_list_sizes())
1254 p_list_offsets = make_list_offsets();
1255 p_list_sizes = make_list_sizes();
1261 inline constexpr auto list_view_array_impl<BIG>::offset_range(size_type i)
const
1262 -> std::pair<offset_type, offset_type>
1264 const auto offset = p_list_offsets[i];
1265 return std::make_pair(offset, offset + p_list_sizes[i]);
1269 constexpr auto list_view_array_impl<BIG>::make_list_offsets() -> offset_type*
1271 return reinterpret_cast<offset_type*
>(
1272 this->get_arrow_proxy().buffers()[OFFSET_BUFFER_INDEX].data() + this->get_arrow_proxy().offset()
1277 constexpr auto list_view_array_impl<BIG>::make_list_sizes() -> offset_type*
1279 return reinterpret_cast<offset_type*
>(
1280 this->get_arrow_proxy().buffers()[SIZES_BUFFER_INDEX].data() + this->get_arrow_proxy().offset()
1285# pragma GCC diagnostic pop
1292 inline auto fixed_sized_list_array::list_size_from_format(
const std::string_view format) -> uint64_t
1295 const auto n_digits = format.size() - 3;
1296 const auto list_size_str = format.substr(3, n_digits);
1297 return std::stoull(std::string(list_size_str));
1306 constexpr auto fixed_sized_list_array::offset_range(size_type i)
const
1307 -> std::pair<offset_type, offset_type>
1309 const auto offset = i * m_list_size;
1310 return std::make_pair(offset, offset + m_list_size);
1313 template <val
idity_bitmap_input R, input_metadata_container METADATA_RANGE>
1314 inline arrow_proxy fixed_sized_list_array::create_proxy(
1315 std::uint64_t list_size,
1316 array&& flat_values,
1318 std::optional<std::string_view> name,
1319 std::optional<METADATA_RANGE> metadata
1322 const auto size = flat_values.size() /
static_cast<std::size_t
>(list_size);
1324 const auto null_count = vbitmap.null_count();
1328 std::string format =
"+w:" + std::to_string(list_size);
1331 std::move(flat_schema),
1337 std::vector<buffer<std::uint8_t>> arr_buffs = {vbitmap.extract_storage()};
1340 static_cast<std::int64_t
>(size),
1341 static_cast<std::int64_t
>(null_count),
1342 std::move(arr_buffs),
1346 return arrow_proxy{std::move(arr), std::move(schema)};
1349 template <val
idity_bitmap_input R, input_metadata_container METADATA_RANGE>
1350 inline arrow_proxy fixed_sized_list_array::create_proxy(
1351 std::uint64_t list_size,
1352 array&& flat_values,
1354 std::optional<std::string_view> name,
1355 std::optional<METADATA_RANGE> metadata
1360 return fixed_sized_list_array::create_proxy(
1362 std::move(flat_values),
1369 const auto size = flat_values.size() /
static_cast<std::size_t
>(list_size);
1372 std::string format =
"+w:" + std::to_string(list_size);
1375 std::move(flat_schema),
1381 std::vector<buffer<std::uint8_t>> arr_buffs = {
1382 buffer<std::uint8_t>{
nullptr, 0}
1386 static_cast<std::int64_t
>(size),
1388 std::move(arr_buffs),
1392 return arrow_proxy{std::move(arr), std::move(schema)};
typename base_type::const_bitmap_range const_bitmap_range
typename base_type::iterator_tag iterator_tag
constexpr array_bitmap_base_impl & operator=(const array_bitmap_base_impl &)
typename base_type::bitmap_const_reference bitmap_const_reference
typename base_type::bitmap_type bitmap_type
Base class for array type erasure.
Dynamically typed array encapsulating an Arrow layout.
Object that owns a piece of contiguous memory.
Smart pointer behaving like a copiable std::unique_ptr.
constexpr size_type null_count() const noexcept
Returns the number of bits set to false (null/invalid).
fixed_sized_list_array & operator=(const self_type &)=default
constexpr fixed_sized_list_array(const self_type &)=default
inner_types::list_size_type list_size_type
array_inner_types< self_type > inner_types
fixed_sized_list_array(arrow_proxy proxy)
Constructs fixed size list array from Arrow proxy.
fixed_sized_list_array(ARGS &&... args)
Generic constructor for creating fixed size list array.
list_array_crtp_base< self_type > base_type
fixed_sized_list_array self_type
fixed_sized_list_array & operator=(self_type &&)=default
fixed_sized_list_array(self_type &&)=default
typename base_type::size_type size_type
std::uint64_t offset_type
CRTP base class for all list array implementations.
typename base_type::const_bitmap_range const_bitmap_range
constexpr list_array_crtp_base & operator=(const self_type &)
Copy assignment operator.
constexpr array_wrapper * raw_flat_array()
Gets mutable access to the underlying flat array.
nullable< inner_const_reference, bitmap_const_reference > const_reference
typename inner_types::const_value_iterator const_value_iterator
list_value inner_value_type
typename base_type::bitmap_const_reference bitmap_const_reference
typename base_type::iterator_tag iterator_tag
list_array_crtp_base(arrow_proxy proxy)
Constructs list array base from Arrow proxy.
constexpr list_array_crtp_base(const self_type &)
Copy constructor.
typename inner_types::value_iterator value_iterator
typename base_type::bitmap_type bitmap_type
list_array_crtp_base< DERIVED > self_type
typename base_type::size_type size_type
array_inner_types< DERIVED > inner_types
nullable< inner_value_type > value_type
list_value inner_const_reference
constexpr const array_wrapper * raw_flat_array() const
Gets read-only access to the underlying flat array.
list_value inner_reference
array_bitmap_base< DERIVED > base_type
constexpr list_array_crtp_base(self_type &&) noexcept=default
list_array_impl< BIG > self_type
constexpr list_array_impl(const self_type &)
Copy constructor.
std::conditional_t< BIG, const std::int64_t, const std::int32_t > offset_type
typename base_type::size_type size_type
constexpr list_array_impl & operator=(const self_type &)
Copy assignment operator.
array_inner_types< self_type > inner_types
constexpr list_array_impl(self_type &&) noexcept=default
static constexpr auto offset_from_sizes(SIZES_RANGE &&sizes) -> offset_buffer_type
Creates offset buffer from list sizes.
inner_types::list_size_type list_size_type
list_array_crtp_base< list_array_impl< BIG > > base_type
u8_buffer< std::remove_const_t< offset_type > > offset_buffer_type
list_array_impl(arrow_proxy proxy)
Constructs list array from Arrow proxy.
constexpr list_view_array_impl & operator=(self_type &&)=default
typename base_type::size_type size_type
constexpr list_view_array_impl(self_type &&)=default
u8_buffer< std::remove_const_t< offset_type > > offset_buffer_type
list_view_array_impl(arrow_proxy proxy)
Constructs list view array from Arrow proxy.
std::conditional_t< BIG, const std::int64_t, const std::int32_t > offset_type
array_inner_types< self_type > inner_types
list_array_crtp_base< list_view_array_impl< BIG > > base_type
list_view_array_impl(ARGS &&... args)
Generic constructor for creating list view array from various inputs.
list_view_array_impl< BIG > self_type
constexpr list_view_array_impl(const self_type &)
Copy constructor.
inner_types::list_size_type list_size_type
u8_buffer< std::remove_const_t< list_size_type > > size_buffer_type
constexpr list_view_array_impl & operator=(const self_type &)
Copy assignment operator.
A view that repeats a value a given number of times.
This buffer class is used as storage buffer for all sparrow arrays.
#define SPARROW_ASSERT(expr__, message__)
ArrowArray make_list_arrow_array(std::int64_t size, std::int64_t null_count, std::vector< buffer< std::uint8_t > > &&arr_buffs, ArrowArray &&flat_arr)
ArrowSchema make_list_arrow_schema(std::string format, ArrowSchema &&flat_schema, std::optional< std::string_view > name, std::optional< METADATA_RANGE > metadata, bool nullable)
constexpr sparrow::u8_buffer< OFFSET_TYPE > offset_buffer_from_sizes(SIZES_RANGE &&sizes)
constexpr std::size_t size(typelist< T... >={})
Gets the count of types contained in a typelist.
constexpr bool excludes_copy_and_move_ctor_v
Convenience variable template for excludes_copy_and_move_ctor.
ArrowSchema make_arrow_schema(F format, N name, std::optional< M > metadata, std::optional< std::unordered_set< ArrowFlag > > flags, ArrowSchema **children, const CHILDREN_OWNERSHIP &children_ownership, ArrowSchema *dictionary, bool dictionary_ownership)
Creates an ArrowSchema owned by a unique_ptr and holding the provided data.
constexpr bool is_list_view_array_v
Checks whether T is a list_view_array type.
list_array_impl< false > list_array
A list array implementation.
array_bitmap_base_impl< D, false > array_bitmap_base
Convenient alias for arrays with immutable validity bitmaps.
constexpr bool is_fixed_sized_list_array_v
Checks whether T is a fixed_sized_list_array type.
list_view_array_impl< true > big_list_view_array
std::pair< ArrowArray, ArrowSchema > extract_arrow_structures(A &&a)
Extracts the internal ArrowArray and ArrowSchema structures from the given array or typed layout.
constexpr bool is_big_list_array_v
Checks whether T is a big_list_array type.
ArrowArray make_arrow_array(int64_t length, int64_t null_count, int64_t offset, B buffers, ArrowArray **children, const CHILDREN_OWNERSHIP &children_ownership, ArrowArray *dictionary, bool dictionary_ownership)
Creates an ArrowArray.
list_view_array_impl< false > list_view_array
A list view array implementation.
dynamic_bitset< std::uint8_t > validity_bitmap
Type alias for a validity bitmap using 8-bit storage blocks.
constexpr bool is_list_array_v
Checks whether T is a list_array type.
SPARROW_API cloning_ptr< array_wrapper > array_factory(arrow_proxy proxy)
list_array_impl< true > big_list_array
A big list array implementation.
validity_bitmap ensure_validity_bitmap(std::size_t size, R &&validity_input)
Ensures a validity bitmap of the specified size from various input types.
constexpr bool is_big_list_view_array_v
Checks whether T is a big_list_view_array type.
data_type
Runtime identifier of arrow data types, usually associated with raw bytes with the associated value.
Extensions to the C++ standard library.
list_value inner_value_type
functor_index_iterator< detail::layout_value_functor< const array_type, inner_value_type > > const_value_iterator
std::random_access_iterator_tag iterator_tag
fixed_sized_list_array array_type
list_value inner_reference
list_value inner_const_reference
std::uint64_t list_size_type
functor_index_iterator< detail::layout_value_functor< array_type, inner_value_type > > value_iterator
std::conditional_t< BIG, std::uint64_t, std::uint32_t > list_size_type
functor_index_iterator< detail::layout_value_functor< const array_type, inner_value_type > > const_value_iterator
std::random_access_iterator_tag iterator_tag
list_array_impl< BIG > array_type
functor_index_iterator< detail::layout_value_functor< array_type, inner_value_type > > value_iterator
list_value inner_value_type
list_value inner_const_reference
list_value inner_reference
list_value inner_value_type
list_value inner_const_reference
std::random_access_iterator_tag iterator_tag
functor_index_iterator< detail::layout_value_functor< array_type, inner_value_type > > value_iterator
list_value inner_reference
std::conditional_t< BIG, std::uint64_t, std::uint32_t > list_size_type
functor_index_iterator< detail::layout_value_functor< const array_type, inner_value_type > > const_value_iterator
list_view_array_impl< BIG > array_type
Base class for array_inner_types specializations.
Traits class that must be specialized by array implementations.
static constexpr sparrow::data_type get()
static constexpr sparrow::data_type get()
static constexpr sparrow::data_type get()
Metafunction for retrieving the data_type of a typed array.