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,
116 std::optional<std::string_view> name = std::nullopt,
117 std::optional<METADATA_RANGE> metadata = std::nullopt
119 : base_type(create_proxy(init,
nullable,
std::move(name),
std::move(metadata)))
135 [[nodiscard]] static auto create_proxy(
138 VALIDITY_RANGE&& bitmaps,
139 std::optional<
std::string_view> name =
std::nullopt,
140 std::optional<METADATA_RANGE> metadata =
std::nullopt
146 [[nodiscard]] static auto create_proxy(
150 std::optional<
std::string_view> name =
std::nullopt,
151 std::optional<METADATA_RANGE> metadata =
std::nullopt
157 [[nodiscard]] static auto create_proxy(
160 std::optional<
std::string_view> name =
std::nullopt,
161 std::optional<METADATA_RANGE> metadata =
std::nullopt
165 requires
std::convertible_to<U, T>
168 const U& value = U{},
170 std::optional<std::string_view> name = std::nullopt,
171 std::optional<METADATA_RANGE> metadata = std::nullopt
176 std::ranges::input_range R,
179 requires(std::convertible_to<std::ranges::range_value_t<R>, T>)
183 std::optional<std::string_view> name = std::nullopt,
184 std::optional<METADATA_RANGE> metadata = std::nullopt
188 template <std::ranges::input_range NULLABLE_RANGE, input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
189 requires std::is_same_v<std::ranges::range_value_t<NULLABLE_RANGE>,
nullable<T>>
192 std::optional<std::string_view> name = std::nullopt,
193 std::optional<METADATA_RANGE> metadata = std::nullopt
196 template <input_metadata_container METADATA_RANGE = std::vector<metadata_pair>>
197 [[nodiscard]]
static arrow_proxy create_proxy_impl(
200 std::optional<validity_bitmap>&& bitmap,
201 std::optional<std::string_view> name = std::nullopt,
202 std::optional<METADATA_RANGE> metadata = std::nullopt
218 static constexpr size_type DATA_BUFFER_INDEX = 1;
230 template <trivial_copyable_type T>
237 template <trivial_copyable_type T>
244 template <trivial_copyable_type T>
252 template <trivial_copyable_type T>
259 template <trivial_copyable_type T>
267 template <trivial_copyable_type T>
268 template <val
idity_bitmap_input VALIDITY_RANGE, input_metadata_container METADATA_RANGE>
269 auto primitive_array_impl<T>::create_proxy(
272 VALIDITY_RANGE&& bitmap_input,
273 std::optional<std::string_view> name,
274 std::optional<METADATA_RANGE> metadata
277 return create_proxy_impl(
286 template <trivial_copyable_type T>
287 template <std::ranges::input_range VALUE_RANGE, val
idity_bitmap_input VALIDITY_RANGE, input_metadata_container METADATA_RANGE>
288 requires(std::convertible_to<std::ranges::range_value_t<VALUE_RANGE>, T>)
290 VALUE_RANGE&& values,
291 VALIDITY_RANGE&& validity_input,
292 std::optional<std::string_view> name,
293 std::optional<METADATA_RANGE> metadata
296 auto size =
static_cast<size_t>(std::ranges::distance(values));
298 std::forward<VALUE_RANGE>(values)
301 std::move(data_buffer),
303 std::forward<VALIDITY_RANGE>(validity_input),
309 template <trivial_copyable_type T>
310 template <
class U, input_metadata_container METADATA_RANGE>
311 requires std::convertible_to<U, T>
316 std::optional<std::string_view> name,
317 std::optional<METADATA_RANGE> metadata
322 return create_proxy_impl(
323 std::move(data_buffer),
325 nullable ? std::make_optional<validity_bitmap>(
nullptr, 0) : std::nullopt,
331 template <trivial_copyable_type T>
332 template <val
idity_bitmap_input VALIDITY_RANGE, input_metadata_container METADATA_RANGE>
337 std::optional<std::string_view> name,
338 std::optional<METADATA_RANGE> metadata
341 std::optional<validity_bitmap> bitmap =
nullable ? std::make_optional<validity_bitmap>(
nullptr, 0)
343 return create_proxy_impl(
344 std::move(data_buffer),
352 template <trivial_copyable_type T>
353 template <std::ranges::input_range R, input_metadata_container METADATA_RANGE>
358 std::optional<std::string_view> name,
359 std::optional<METADATA_RANGE> metadata
363 auto distance =
static_cast<size_t>(std::ranges::distance(range));
364 std::optional<validity_bitmap> bitmap =
nullable ? std::make_optional<validity_bitmap>(
nullptr, 0)
366 return create_proxy_impl(
367 std::move(data_buffer),
376 template <trivial_copyable_type T>
377 template <std::ranges::input_range NULLABLE_RANGE, input_metadata_container METADATA_RANGE>
378 requires std::is_same_v<std::ranges::range_value_t<NULLABLE_RANGE>,
nullable<T>>
380 NULLABLE_RANGE&& nullable_range,
381 std::optional<std::string_view> name,
382 std::optional<METADATA_RANGE> metadata
386 auto values = nullable_range
387 | std::views::transform(
393 auto is_non_null = nullable_range
394 | std::views::transform(
397 return v.has_value();
400 return self_type::create_proxy(values, is_non_null, std::move(name), std::move(metadata));
403 template <trivial_copyable_type T>
404 template <input_metadata_container METADATA_RANGE>
405 [[nodiscard]]
arrow_proxy primitive_array_impl<T>::create_proxy_impl(
408 std::optional<validity_bitmap>&& bitmap,
409 std::optional<std::string_view> name,
410 std::optional<METADATA_RANGE> metadata
413 const bool bitmap_has_value = bitmap.has_value();
414 const auto null_count = bitmap_has_value ? bitmap->null_count() : 0;
415 const auto flags = bitmap_has_value
431 buffer<uint8_t> bitmap_buffer = bitmap_has_value ? std::move(*bitmap).extract_storage()
434 std::vector<buffer<uint8_t>> buffers(2);
435 buffers[0] = std::move(bitmap_buffer);
436 buffers[1] = std::move(data_buffer).extract_storage();
440 static_cast<std::int64_t
>(size),
441 static_cast<int64_t
>(null_count),
449 return arrow_proxy(std::move(arr), std::move(schema));
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.
Object that owns a piece of contiguous memory.
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
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
typename base_type::const_value_iterator const_value_iterator
primitive_array_impl(std::initializer_list< inner_value_type > init, bool nullable=true, 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::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 &&) noexcept
typename inner_types::inner_reference inner_reference
primitive_array_impl(const primitive_array_impl &)
typename inner_types::inner_const_reference inner_const_reference
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
constexpr bool is_type_instance_of_v
true if T is a concrete type template instanciation of U which is a type template.
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::pair< metadata_key, metadata_value > metadata_pair
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.