29 template <trivial_copyable_type T>
32 template <trivial_copyable_type T>
53 template <trivial_copyable_type T>
69 using pointer =
typename inner_types::pointer;
101 template <
class... Args>
104 :
base_type(create_proxy(std::forward<Args>(args)...))
112 template <input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
114 std::initializer_list<inner_value_type> init,
115 std::optional<std::string_view> name = std::nullopt,
116 std::optional<METADATA_RANGE> metadata = std::nullopt
118 : base_type(create_proxy(init,
std::move(name),
std::move(metadata)))
131 template <input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
134 std::optional<std::string_view> name = std::nullopt,
135 std::optional<METADATA_RANGE> metadata = std::nullopt
141 static auto create_proxy(
145 std::optional<std::string_view> name = std::nullopt,
146 std::optional<METADATA_RANGE> metadata = std::nullopt
150 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
151 requires std::convertible_to<std::ranges::range_value_t<R>, T>
152 static auto create_proxy(
154 std::optional<std::string_view> name = std::nullopt,
155 std::optional<METADATA_RANGE> metadata = std::nullopt
158 template <
class U, input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
159 requires std::convertible_to<U, T>
162 const U& value = U{},
163 std::optional<std::string_view> name = std::nullopt,
164 std::optional<METADATA_RANGE> metadata = std::nullopt
169 std::ranges::input_range R,
170 validity_bitmap_input R2,
171 input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
172 requires(std::convertible_to<std::ranges::range_value_t<R>, T>)
173 static arrow_proxy create_proxy(
176 std::optional<std::string_view> name = std::nullopt,
177 std::optional<METADATA_RANGE> metadata = std::nullopt
181 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
182 requires std::is_same_v<std::ranges::range_value_t<R>, nullable<T>>
183 static arrow_proxy create_proxy(
185 std::optional<std::string_view> name = std::nullopt,
186 std::optional<METADATA_RANGE> metadata = std::nullopt
202 static constexpr size_type DATA_BUFFER_INDEX = 1;
214 template <trivial_copyable_type T>
221 template <trivial_copyable_type T>
228 template <trivial_copyable_type T>
236 template <trivial_copyable_type T>
243 template <trivial_copyable_type T>
251 template <trivial_copyable_type T>
252 template <val
idity_bitmap_input VALIDITY_RANGE, input_metadata_container METADATA_RANGE>
253 auto primitive_array_impl<T>::create_proxy(
256 VALIDITY_RANGE&& bitmap_input,
257 std::optional<std::string_view> name,
258 std::optional<METADATA_RANGE> metadata
276 std::vector<buffer<uint8_t>> buffers(2);
277 buffers[0] = std::move(bitmap).extract_storage();
278 buffers[1] = std::move(data_buffer).extract_storage();
282 static_cast<std::int64_t
>(size),
283 static_cast<int64_t
>(null_count),
291 return arrow_proxy(std::move(arr), std::move(schema));
294 template <trivial_copyable_type T>
295 template <std::ranges::input_range VALUE_RANGE, val
idity_bitmap_input VALIDITY_RANGE, input_metadata_container METADATA_RANGE>
296 requires(std::convertible_to<std::ranges::range_value_t<VALUE_RANGE>, T>)
298 VALUE_RANGE&& values,
299 VALIDITY_RANGE&& validity_input,
300 std::optional<std::string_view> name,
301 std::optional<METADATA_RANGE> metadata
304 auto size =
static_cast<size_t>(std::ranges::distance(values));
306 std::forward<VALUE_RANGE>(values)
309 std::move(data_buffer),
311 std::forward<VALIDITY_RANGE>(validity_input),
317 template <trivial_copyable_type T>
318 template <
class U, input_metadata_container METADATA_RANGE>
319 requires std::convertible_to<U, T>
323 std::optional<std::string_view> name,
324 std::optional<METADATA_RANGE> metadata
329 return create_proxy(std::move(data_buffer), std::move(name), std::move(metadata));
332 template <trivial_copyable_type T>
333 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE>
334 requires std::convertible_to<std::ranges::range_value_t<R>, T>
335 arrow_proxy primitive_array_impl<T>::create_proxy(
337 std::optional<std::string_view> name,
338 std::optional<METADATA_RANGE> metadata
342 const auto iota = std::ranges::iota_view{std::size_t(0), n};
343 std::ranges::transform_view iota_to_is_non_missing(
350 return self_type::create_proxy(
351 std::forward<R>(range),
352 std::move(iota_to_is_non_missing),
359 template <trivial_copyable_type T>
360 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE>
361 requires std::is_same_v<std::ranges::range_value_t<R>,
nullable<T>>
364 std::optional<std::string_view> name,
365 std::optional<METADATA_RANGE> metadata
370 | std::views::transform(
376 auto is_non_null = range
377 | std::views::transform(
380 return v.has_value();
383 return self_type::create_proxy(values, is_non_null, std::move(name), std::move(metadata));
array_bitmap_base_impl & operator=(const array_bitmap_base_impl &)
std::conditional_t< is_mutable, mutable_array_base< D >, array_crtp_base< D > > base_type
Proxy class over ArrowArray and ArrowSchema.
Data access class for trivial copyable types.
constexpr void resize_values(size_t new_length, const T &value)
constexpr value_iterator erase_values(const_value_iterator pos, size_t count)
inner_value_type * inner_pointer
static u8_buffer< T > make_data_buffer(RANGE &&r)
constexpr inner_reference value(size_t i)
const T & inner_const_reference
constexpr value_iterator insert_values(const_value_iterator pos, InputIt first, InputIt last)
constexpr value_iterator value_begin()
constexpr value_iterator value_end()
constexpr const_value_iterator value_cend() const
pointer_iterator< inner_const_pointer > const_value_iterator
const inner_value_type * inner_const_pointer
void reset_proxy(arrow_proxy &proxy)
constexpr value_iterator insert_value(const_value_iterator pos, T value, size_t count)
pointer_iterator< inner_pointer > value_iterator
constexpr const_value_iterator value_cbegin() const
constexpr size_type null_count() const noexcept
The nullable class models a value or a reference that can be "null", or missing, like values traditio...
friend class run_end_encoded_array
typename base_type::value_iterator value_iterator
primitive_array_impl & operator=(primitive_array_impl &&)
typename base_type::const_value_iterator const_value_iterator
typename inner_types::pointer pointer
primitive_array_impl< T > self_type
primitive_array_impl(Args &&... args)
Constructs an array of trivial copyable type, with the passed range of values and an optional bitmap.
mutable_array_bitmap_base< primitive_array_impl< T > > base_type
primitive_array_impl(arrow_proxy)
primitive_array_impl(primitive_array_impl &&)
typename inner_types::inner_reference inner_reference
primitive_array_impl(const primitive_array_impl &)
typename inner_types::inner_const_reference inner_const_reference
primitive_array_impl(std::initializer_list< inner_value_type > init, std::optional< std::string_view > name=std::nullopt, std::optional< METADATA_RANGE > metadata=std::nullopt)
Constructs a primitive array from an initializer_list of raw values.
typename inner_types::const_pointer const_pointer
array_inner_types< self_type > inner_types
details::primitive_data_access< T > access_class_type
typename inner_types::inner_value_type inner_value_type
primitive_array_impl & operator=(const primitive_array_impl &)
A view that repeats a value a given number of times.
This buffer class is use as storage buffer for all sparrow arrays.
constexpr bool excludes_copy_and_move_ctor_v
array_bitmap_base_impl< D, true > mutable_array_bitmap_base
Convenient typedef to be used as a crtp base class for arrays using a mutable validity buffer.
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 std::string_view data_type_format_of()
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.
dynamic_bitset< std::uint8_t > validity_bitmap
validity_bitmap ensure_validity_bitmap(std::size_t size, R &&validity_input)
std::size_t range_size(R &&r)
typename data_access_type::inner_value_type inner_value_type
typename data_access_type::value_iterator value_iterator
details::primitive_data_access< T > data_access_type
typename data_access_type::inner_const_pointer const_pointer
typename data_access_type::inner_const_reference inner_const_reference
std::random_access_iterator_tag iterator_tag
typename data_access_type::inner_pointer pointer
typename data_access_type::inner_reference inner_reference
typename data_access_type::const_value_iterator const_value_iterator
primitive_array_impl< T > array_type
nullable< inner_const_reference, bitmap_const_reference > const_reference
bitmap_type::const_reference bitmap_const_reference
Base class for array_inner_types specialization.
Traits class that must be specialized by array classes inheriting from array_crtp_base.