|
sparrow 2.6.0
C++20 idiomatic APIs for the Apache Arrow Columnar Format
|
CRTP base class providing shared functionality for union array implementations. More...
#include <union_array.hpp>
Classes | |
| struct | union_child_schema |
| Schema of one child of a rebuilt union array. More... | |
Public Types | |
| using | self_type = union_array_crtp_base<DERIVED> |
| using | derived_type = DERIVED |
| using | inner_value_type = array_traits::inner_value_type |
| using | value_type = array_traits::const_reference |
| using | const_reference = array_traits::const_reference |
| using | functor_type = detail::layout_bracket_functor<derived_type, value_type> |
| using | const_functor_type = detail::layout_bracket_functor<const derived_type, value_type> |
| using | iterator = functor_index_iterator<functor_type> |
| using | const_iterator = functor_index_iterator<const_functor_type> |
| using | const_reverse_iterator = std::reverse_iterator<const_iterator> |
| using | size_type = std::size_t |
| using | type_id_buffer_type = u8_buffer<std::uint8_t> |
Public Member Functions | |
| constexpr std::optional< std::string_view > | name () const |
| Gets the optional name of the union array. | |
| SPARROW_CONSTEXPR_CLANG std::optional< key_value_view > | metadata () const |
| Gets the metadata associated with the union array. | |
| SPARROW_CONSTEXPR_CLANG value_type | at (size_type i) const |
| Gets element at specified position with bounds checking. | |
| SPARROW_CONSTEXPR_CLANG value_type | operator[] (size_type i) const |
| Gets element at specified position without bounds checking. | |
| SPARROW_CONSTEXPR_CLANG value_type | operator[] (size_type i) |
| Gets mutable element at specified position. | |
| SPARROW_CONSTEXPR_CLANG value_type | front () const |
| Gets reference to the first element. | |
| SPARROW_CONSTEXPR_CLANG value_type | back () const |
| Gets reference to the last element. | |
| constexpr bool | empty () const |
| Checks if the union array is empty. | |
| constexpr size_type | size () const |
| Gets the number of elements in the union array. | |
| constexpr iterator | begin () |
| Gets iterator to the beginning of the array. | |
| constexpr iterator | end () |
| Gets iterator to the end of the array. | |
| constexpr const_iterator | begin () const |
| Gets const iterator to the beginning of the array. | |
| constexpr const_iterator | end () const |
| Gets const iterator to the end of the array. | |
| constexpr const_iterator | cbegin () const |
| Gets const iterator to the beginning of the array. | |
| constexpr const_iterator | cend () const |
| Gets const iterator to the end of the array. | |
| constexpr const_reverse_iterator | rbegin () const |
| Gets reverse iterator to the beginning of reversed array. | |
| constexpr const_reverse_iterator | rend () const |
| Gets reverse iterator to the end of reversed array. | |
| constexpr const_reverse_iterator | crbegin () const |
| Gets const reverse iterator to the beginning of reversed array. | |
| constexpr const_reverse_iterator | crend () const |
| Gets const reverse iterator to the end of reversed array. | |
| iterator | insert (const_iterator pos, const_reference value, size_type count=1) |
| Inserts copies of a value before pos. | |
| iterator | insert (const_iterator pos, const array_traits::value_type &value, size_type count=1) |
| Inserts copies of an owned value before pos. | |
| template<std::input_iterator InputIt> | |
| iterator | insert (const_iterator pos, InputIt first, InputIt last, size_type count=1) |
| Inserts a range before pos, repeated count times. | |
| iterator | erase (const_iterator pos) |
| Erases the value at pos. | |
| iterator | erase (const_iterator first, const_iterator last) |
| Erases the half-open range [first, last). | |
| void | push_back (const_reference value) |
| Appends a borrowed value. | |
| void | push_back (const array_traits::value_type &value) |
| Appends an owned value. | |
| void | resize (size_type new_length) |
| Resizes the array, default-inserting any appended values. | |
| void | resize (size_type new_length, const_reference value) |
| Resizes the array, inserting value when it grows. | |
| void | resize (size_type new_length, const array_traits::value_type &value) |
| Resizes the array, inserting value when it grows. | |
| constexpr void | zero_null_values (const inner_value_type &value) |
| Replaces stored values at null positions. | |
| template<std::ranges::input_range R> | |
| constexpr auto | type_id_map_from_child_to_type_id (const std::optional< R > &child_index_to_type_id) -> type_id_map |
Protected Types | |
| using | type_id_map = std::array<std::uint8_t, TYPE_ID_MAP_SIZE> |
| using | children_type = std::vector<cloning_ptr<array_wrapper>> |
| Protected Types inherited from sparrow::crtp_base< DERIVED > | |
| using | derived_type |
Protected Member Functions | |
| constexpr children_type | make_children (arrow_proxy &proxy) |
| Creates child array wrappers from Arrow proxy. | |
| union_array_crtp_base (arrow_proxy proxy) | |
| Protected constructor from Arrow proxy. | |
| constexpr | union_array_crtp_base (const self_type &rhs) |
| Copy constructor. | |
| constexpr self_type & | operator= (const self_type &rhs) |
| Copy assignment operator. | |
| constexpr | union_array_crtp_base (self_type &&rhs)=default |
| constexpr self_type & | operator= (self_type &&rhs)=default |
| template<class VALUE> | |
| void | resize_impl (size_type new_length, VALUE &&value) |
| iterator | iterator_at (size_type index) |
| void | append_rebuild_entries (std::vector< detail::union_rebuild_value > &entries, size_type from, size_type to) const |
| Appends one rebuild entry per element in [from, to), each referring to its current child slot. | |
| iterator | insert_materialized (const_iterator pos, std::vector< array_traits::value_type > inserted, size_type count) |
Rebuilds the array with the owned inserted values repeated count times before pos. | |
| iterator | erase_values (size_type first, size_type count) |
| std::vector< union_child_schema > | make_child_schemas (std::vector< std::uint8_t > &child_type_ids, std::array< bool, TYPE_ID_MAP_SIZE > &used_type_ids) const |
| Initializes the schema bookkeeping of a rebuild from the current children. | |
| std::vector< detail::union_rebuild_value > | make_union_fillers (size_type old_child_count, const std::vector< union_child_schema > &child_schemas, std::vector< std::size_t > &inserted_children, std::vector< array_traits::value_type > &inserted) const |
| Builds the row padding the output rows a child is not selected for. | |
| detail::union_rebuild_payload | make_rebuild_payload (std::span< const detail::union_rebuild_value > values, std::span< const std::size_t > inserted_children, std::span< const std::uint8_t > child_type_ids, std::span< const detail::union_rebuild_value > fillers) const |
| Plans the rebuilt data from the row plan and the inserted-value resolution. | |
| std::vector< array > | build_rebuilt_children (const detail::union_rebuild_payload &payload, std::span< const array_traits::value_type > inserted, std::span< const std::size_t > inserted_children, const children_type &old_children, std::vector< array > &new_child_templates) const |
| Rebuilds each child array from the payload rows planned for it. | |
| arrow_proxy | create_rebuild_proxy (std::vector< array > children, detail::union_rebuild_payload &&payload, std::span< const std::uint8_t > child_type_ids) const |
| Creates the Arrow proxy of a rebuilt array from its children and buffers. | |
| iterator | adopt_rebuilt_array (arrow_proxy replacement, std::vector< std::uint8_t > child_type_ids, size_type return_index) |
Replaces this array's data with the rebuilt replacement. | |
| iterator | rebuild_values (std::vector< detail::union_rebuild_value > values, std::vector< array_traits::value_type > inserted, size_type return_index) |
Rebuilds this array from values, the inserted values they reference, and. | |
| constexpr arrow_proxy & | get_arrow_proxy () |
| Gets mutable reference to the Arrow proxy. | |
| constexpr const arrow_proxy & | get_arrow_proxy () const |
| Gets const reference to the Arrow proxy. | |
| Protected Member Functions inherited from sparrow::crtp_base< DERIVED > | |
| constexpr derived_type & | derived_cast () |
Static Protected Member Functions | |
| static std::vector< std::uint8_t > | child_type_ids_from_format (std::string_view format_string) |
| Extracts child type IDs from an Arrow union format string. | |
| static constexpr type_id_map | make_type_id_map (std::span< const std::uint8_t > child_type_ids) |
| Creates a type-ID lookup table from child type IDs. | |
| template<std::ranges::input_range R> | |
| static constexpr type_id_map | type_id_map_from_child_to_type_id (const std::optional< R > &child_index_to_type_id) |
| Creates type ID mapping from child index to type ID mapping. | |
| template<std::ranges::input_range R> requires (std::convertible_to<std::ranges::range_value_t<R>, std::uint8_t>) | |
| static constexpr std::string | make_format_string (bool dense, std::size_t n, const std::optional< R > &child_index_to_type_id) |
| Creates Arrow format string for union arrays. | |
| static std::vector< std::size_t > | resolve_inserted_children (std::span< const array_traits::value_type > inserted, std::vector< union_child_schema > &child_schemas, std::vector< std::uint8_t > &child_type_ids, std::array< bool, TYPE_ID_MAP_SIZE > &used_type_ids, std::vector< array > &new_child_templates) |
| Maps each inserted value to the child it belongs to. | |
Protected Attributes | |
| arrow_proxy | m_proxy |
| Internal Arrow proxy. | |
| const std::uint8_t * | p_type_ids |
| Pointer to type ID buffer. | |
| children_type | m_children |
| Child array wrappers. | |
| std::vector< std::uint8_t > | m_child_type_ids |
| Type IDs in child order. | |
| std::array< std::uint8_t, TYPE_ID_MAP_SIZE > | m_type_id_map |
| Type ID to child index mapping. | |
Static Protected Attributes | |
| static constexpr size_t | TYPE_ID_MAP_SIZE = 256 |
Friends | |
| class | detail::array_access |
CRTP base class providing shared functionality for union array implementations.
This class implements the common interface and logic shared between dense and sparse union arrays. Union arrays can store values of different types in a single array, with each element having an associated type ID that indicates which child array contains the actual value.
Key features:
The union array consists of:
| DERIVED | The derived union array type (dense_union_array or sparse_union_array) |
Definition at line 171 of file union_array.hpp.
|
protected |
Definition at line 513 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::const_functor_type = detail::layout_bracket_functor<const derived_type, value_type> |
Definition at line 181 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::const_iterator = functor_index_iterator<const_functor_type> |
Definition at line 183 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::const_reference = array_traits::const_reference |
Definition at line 179 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::const_reverse_iterator = std::reverse_iterator<const_iterator> |
Definition at line 184 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::derived_type = DERIVED |
Definition at line 176 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::functor_type = detail::layout_bracket_functor<derived_type, value_type> |
Definition at line 180 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::inner_value_type = array_traits::inner_value_type |
Definition at line 177 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::iterator = functor_index_iterator<functor_type> |
Definition at line 182 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::self_type = union_array_crtp_base<DERIVED> |
Definition at line 175 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::size_type = std::size_t |
Definition at line 185 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::type_id_buffer_type = u8_buffer<std::uint8_t> |
Definition at line 187 of file union_array.hpp.
|
protected |
Definition at line 459 of file union_array.hpp.
| using sparrow::union_array_crtp_base< DERIVED >::value_type = array_traits::const_reference |
Definition at line 178 of file union_array.hpp.
|
explicitprotected |
Protected constructor from Arrow proxy.
| proxy | Arrow proxy containing union array data and schema |
Definition at line 1367 of file union_array.hpp.
|
constexprprotected |
Copy constructor.
| rhs | Source union array to copy from |
Definition at line 1377 of file union_array.hpp.
|
constexprprotecteddefault |
|
protected |
Replaces this array's data with the rebuilt replacement.
return_index. Definition at line 2042 of file union_array.hpp.
|
inlineprotected |
Appends one rebuild entry per element in [from, to), each referring to its current child slot.
Definition at line 590 of file union_array.hpp.
|
nodiscard |
Gets element at specified position with bounds checking.
| i | Index of the element to access |
| std::out_of_range | if i >= size() |
|
nodiscard |
Gets reference to the last element.
Definition at line 1490 of file union_array.hpp.
|
nodiscardconstexpr |
Gets iterator to the beginning of the array.
Definition at line 1424 of file union_array.hpp.
|
nodiscardconstexpr |
Gets const iterator to the beginning of the array.
Definition at line 1436 of file union_array.hpp.
|
protected |
Rebuilds each child array from the payload rows planned for it.
| payload | Rebuilt data, holding the row plan of each child |
| inserted | Inserted values the rows may refer to |
| inserted_children | Child index of each inserted value |
| old_children | Children before the rebuild |
| new_child_templates | Prototypes the rebuilt children of an inserted alternative are taken and left empty |
Definition at line 1969 of file union_array.hpp.
|
nodiscardconstexpr |
Gets const iterator to the beginning of the array.
Definition at line 1448 of file union_array.hpp.
|
nodiscardconstexpr |
Gets const iterator to the end of the array.
Definition at line 1454 of file union_array.hpp.
|
staticprotected |
Extracts child type IDs from an Arrow union format string.
| format_string | Arrow format string containing type IDs |
Definition at line 1227 of file union_array.hpp.
|
nodiscardconstexpr |
Gets const reverse iterator to the beginning of reversed array.
Definition at line 1472 of file union_array.hpp.
|
protected |
Creates the Arrow proxy of a rebuilt array from its children and buffers.
payload is consumed: its type-ID and offset buffers are moved into the proxy.
Definition at line 2008 of file union_array.hpp.
|
nodiscardconstexpr |
Gets const reverse iterator to the end of reversed array.
Definition at line 1478 of file union_array.hpp.
|
nodiscardconstexpr |
Checks if the union array is empty.
Definition at line 1418 of file union_array.hpp.
|
nodiscardconstexpr |
Gets iterator to the end of the array.
Definition at line 1430 of file union_array.hpp.
|
nodiscardconstexpr |
Gets const iterator to the end of the array.
Definition at line 1442 of file union_array.hpp.
| auto sparrow::union_array_crtp_base< DERIVED >::erase | ( | const_iterator | first, |
| const_iterator | last ) |
Erases the half-open range [first, last).
Definition at line 1564 of file union_array.hpp.
| auto sparrow::union_array_crtp_base< DERIVED >::erase | ( | const_iterator | pos | ) |
Erases the value at pos.
Definition at line 1556 of file union_array.hpp.
|
protected |
Definition at line 1597 of file union_array.hpp.
|
nodiscard |
Gets reference to the first element.
Definition at line 1484 of file union_array.hpp.
|
nodiscardconstexprprotected |
Gets mutable reference to the Arrow proxy.
Definition at line 1355 of file union_array.hpp.
|
nodiscardconstexprprotected |
Gets const reference to the Arrow proxy.
Definition at line 1361 of file union_array.hpp.
| auto sparrow::union_array_crtp_base< DERIVED >::insert | ( | const_iterator | pos, |
| const array_traits::value_type & | value, | ||
| size_type | count = 1 ) |
Inserts copies of an owned value before pos.
Definition at line 2121 of file union_array.hpp.
| auto sparrow::union_array_crtp_base< DERIVED >::insert | ( | const_iterator | pos, |
| const_reference | value, | ||
| size_type | count = 1 ) |
Inserts copies of a value before pos.
Definition at line 2109 of file union_array.hpp.
| auto sparrow::union_array_crtp_base< DERIVED >::insert | ( | const_iterator | pos, |
| InputIt | first, | ||
| InputIt | last, | ||
| size_type | count = 1 ) -> iterator |
Inserts a range before pos, repeated count times.
Definition at line 1514 of file union_array.hpp.
|
protected |
Rebuilds the array with the owned inserted values repeated count times before pos.
Definition at line 2136 of file union_array.hpp.
|
inlineprotected |
|
protected |
Initializes the schema bookkeeping of a rebuild from the current children.
Copies the current child type IDs into child_type_ids (extended later by the children created for inserted values) and marks them as used in used_type_ids.
| child_type_ids | Output: type ID of each current child, in child order |
| used_type_ids | Output: type IDs already assigned, marked with the current ones |
Definition at line 1574 of file union_array.hpp.
|
constexprprotected |
Creates child array wrappers from Arrow proxy.
| proxy | Arrow proxy containing child array data |
Definition at line 1496 of file union_array.hpp.
|
staticconstexprprotected |
Creates Arrow format string for union arrays.
| R | Range type for type ID mapping |
| dense | Whether this is a dense union (true) or sparse (false) |
| n | Number of child arrays |
| range | Optional type ID mapping range |
| std::invalid_argument | if range size doesn't match n |
Definition at line 1305 of file union_array.hpp.
|
protected |
Plans the rebuilt data from the row plan and the inserted-value resolution.
Dense unions build a per-child row plan and a type-ID/offset buffer pair, sparse unions pad every non-selected output row of a child with its filler row.
| values | The rows to be rebuilt |
| inserted_children | Child index of each inserted value, in insertion order |
| child_type_ids | Type IDs of the children after the rebuild |
| fillers | The row padding the non-selected output rows of each child |
Definition at line 1946 of file union_array.hpp.
|
staticconstexprprotected |
Creates a type-ID lookup table from child type IDs.
| child_type_ids | Type ID for each child, in child order |
Definition at line 1254 of file union_array.hpp.
|
protected |
Builds the row padding the output rows a child is not selected for.
An old child with rows is padded by reusing its first row, marked null on copy, while a child without rows (empty, or created for an inserted value) is padded with a null of its own type, materialized once as an inserted value.
| old_child_count | Number of children before the rebuild |
| child_schemas | Schemas of all children after the rebuild |
| inserted_children | Child index of each inserted value, kept in sync with inserted |
| inserted | Inserted values, appended with one null per padded child |
Definition at line 1903 of file union_array.hpp.
|
nodiscard |
Gets the metadata associated with the union array.
Definition at line 1349 of file union_array.hpp.
|
nodiscardconstexpr |
Gets the optional name of the union array.
Definition at line 1343 of file union_array.hpp.
|
constexprprotected |
Copy assignment operator.
| rhs | Source union array to copy from |
Definition at line 1383 of file union_array.hpp.
|
constexprprotecteddefault |
|
nodiscard |
Gets mutable element at specified position.
| i | Index of the element to access |
Definition at line 1406 of file union_array.hpp.
|
nodiscard |
Gets element at specified position without bounds checking.
| i | Index of the element to access |
Definition at line 1397 of file union_array.hpp.
| void sparrow::union_array_crtp_base< DERIVED >::push_back | ( | const array_traits::value_type & | value | ) |
Appends an owned value.
Definition at line 1532 of file union_array.hpp.
| void sparrow::union_array_crtp_base< DERIVED >::push_back | ( | const_reference | value | ) |
Appends a borrowed value.
Definition at line 1526 of file union_array.hpp.
|
nodiscardconstexpr |
Gets reverse iterator to the beginning of reversed array.
Definition at line 1460 of file union_array.hpp.
|
protected |
Rebuilds this array from values, the inserted values they reference, and.
return_index. Definition at line 2061 of file union_array.hpp.
|
nodiscardconstexpr |
Gets reverse iterator to the end of reversed array.
Definition at line 1466 of file union_array.hpp.
| void sparrow::union_array_crtp_base< DERIVED >::resize | ( | size_type | new_length | ) |
Resizes the array, default-inserting any appended values.
Definition at line 1538 of file union_array.hpp.
| void sparrow::union_array_crtp_base< DERIVED >::resize | ( | size_type | new_length, |
| const array_traits::value_type & | value ) |
Resizes the array, inserting value when it grows.
Definition at line 1550 of file union_array.hpp.
| void sparrow::union_array_crtp_base< DERIVED >::resize | ( | size_type | new_length, |
| const_reference | value ) |
Resizes the array, inserting value when it grows.
Definition at line 1544 of file union_array.hpp.
|
inlineprotected |
|
staticprotected |
Maps each inserted value to the child it belongs to.
Alternatives already present in child_schemas reuse that child, others get a new child, appended to child_schemas, child_type_ids and new_child_templates, and a free type ID taken from used_type_ids.
| inserted | Inserted values to resolve, in insertion order |
| child_schemas | Schemas of the existing children, extended with the created ones |
| child_type_ids | Type IDs of the existing children, extended with the created ones |
| used_type_ids | Type IDs already assigned, updated with the newly assigned ones |
| new_child_templates | Prototypes of the created children, appended to |
Definition at line 1865 of file union_array.hpp.
|
nodiscardconstexpr |
Gets the number of elements in the union array.
Definition at line 1412 of file union_array.hpp.
|
staticconstexprprotected |
Creates type ID mapping from child index to type ID mapping.
| R | Range type containing type IDs |
| child_index_to_type_id | Optional mapping from child index to type ID |
|
constexpr |
Definition at line 1273 of file union_array.hpp.
|
inlineconstexpr |
Replaces stored values at null positions.
Definition at line 450 of file union_array.hpp.
|
friend |
Definition at line 778 of file union_array.hpp.
|
protected |
Type IDs in child order.
Definition at line 775 of file union_array.hpp.
|
protected |
Child array wrappers.
Definition at line 774 of file union_array.hpp.
|
protected |
Internal Arrow proxy.
Definition at line 772 of file union_array.hpp.
|
protected |
Type ID to child index mapping.
Definition at line 776 of file union_array.hpp.
|
protected |
Pointer to type ID buffer.
Definition at line 773 of file union_array.hpp.
|
staticconstexprprotected |
Definition at line 457 of file union_array.hpp.