sparrow ..
Loading...
Searching...
No Matches
sparrow::dense_union_array Class Reference

Dense union array implementation with offset buffer. More...

#include <union_array.hpp>

Inheritance diagram for sparrow::dense_union_array:
[legend]
Collaboration diagram for sparrow::dense_union_array:
[legend]

Public Types

using base_type = union_array_crtp_base<dense_union_array>
 
using offset_buffer_type = u8_buffer<std::uint32_t>
 
using type_id_buffer_type = typename base_type::type_id_buffer_type
 
- Public Types inherited from sparrow::union_array_crtp_base< dense_union_array >
using self_type
 
using derived_type
 
using inner_value_type
 
using value_type
 
using const_reference
 
using functor_type
 
using const_functor_type
 
using iterator
 
using const_iterator
 
using const_reverse_iterator
 
using size_type
 
using type_id_buffer_type
 

Public Member Functions

template<class... Args>
requires (mpl::excludes_copy_and_move_ctor_v<dense_union_array, Args...>)
 dense_union_array (Args &&... args)
 Generic constructor for creating dense union arrays.
 
SPARROW_API dense_union_array (arrow_proxy proxy)
 Constructs dense union array from Arrow proxy.
 
SPARROW_API dense_union_array (const dense_union_array &rhs)
 Copy constructor.
 
SPARROW_API dense_union_arrayoperator= (const dense_union_array &rhs)
 Copy assignment operator.
 
 dense_union_array (dense_union_array &&rhs)=default
 
dense_union_arrayoperator= (dense_union_array &&rhs)=default
 
template<input_metadata_container METADATA_RANGE>
auto create_proxy_impl (std::vector< array > &&children, type_id_buffer_type &&element_type, offset_buffer_type &&offsets, std::string &&format, std::optional< std::string_view > name, std::optional< METADATA_RANGE > metadata) -> arrow_proxy
 
- Public Member Functions inherited from sparrow::union_array_crtp_base< dense_union_array >
constexpr std::optional< std::string_view > name () const
 Gets the optional name of the union array.
 
SPARROW_CONSTEXPR_CLANG std::optional< key_value_viewmetadata () 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.
 
constexpr void zero_null_values (const inner_value_type &value)
 Sets all null values to the specified value.
 
constexpr auto type_id_map_from_child_to_type_id (const std::optional< R > &child_index_to_type_id) -> type_id_map
 
constexpr std::optional< std::string_view > name () const
 Gets the optional name of the union array.
 
SPARROW_CONSTEXPR_CLANG std::optional< key_value_viewmetadata () 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 const_iterator begin () const
 Gets const iterator to the beginning of the array.
 
constexpr iterator end ()
 Gets iterator to the end 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.
 
constexpr void zero_null_values (const inner_value_type &value)
 Sets all null values to the specified value.
 
constexpr auto type_id_map_from_child_to_type_id (const std::optional< R > &child_index_to_type_id) -> type_id_map
 

Friends

class union_array_crtp_base< dense_union_array >
 

Additional Inherited Members

- Protected Types inherited from sparrow::union_array_crtp_base< dense_union_array >
using type_id_map
 
using children_type
 
- Protected Types inherited from sparrow::crtp_base< D >
using derived_type = D
 
- Protected Member Functions inherited from sparrow::union_array_crtp_base< dense_union_array >
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_typeoperator= (const self_type &rhs)
 Copy assignment operator.
 
constexpr union_array_crtp_base (self_type &&rhs)=default
 
constexpr self_typeoperator= (self_type &&rhs)=default
 
constexpr arrow_proxyget_arrow_proxy ()
 Gets mutable reference to the Arrow proxy.
 
constexpr const arrow_proxyget_arrow_proxy () const
 Gets const reference to the Arrow proxy.
 
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 union_array_crtp_base (self_type &&rhs)=default
 
constexpr self_typeoperator= (const self_type &rhs)
 Copy assignment operator.
 
constexpr self_typeoperator= (self_type &&rhs)=default
 
constexpr arrow_proxyget_arrow_proxy ()
 Gets mutable reference to the Arrow proxy.
 
constexpr const arrow_proxyget_arrow_proxy () const
 Gets const reference to the Arrow proxy.
 
- Protected Member Functions inherited from sparrow::crtp_base< D >
constexpr derived_typederived_cast ()
 
constexpr const derived_typederived_cast () const
 
- Static Protected Member Functions inherited from sparrow::union_array_crtp_base< dense_union_array >
static constexpr type_id_map parse_type_id_map (std::string_view format_string)
 Parses type ID mapping from Arrow format string.
 
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.
 
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 constexpr type_id_map parse_type_id_map (std::string_view format_string)
 Parses type ID mapping from Arrow format string.
 
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.
 
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.
 
- Protected Attributes inherited from sparrow::union_array_crtp_base< dense_union_array >
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::array< std::uint8_t, TYPE_ID_MAP_SIZEm_type_id_map
 Type ID to child index mapping.
 
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::array< std::uint8_t, TYPE_ID_MAP_SIZEm_type_id_map
 Type ID to child index mapping.
 
- Static Protected Attributes inherited from sparrow::union_array_crtp_base< dense_union_array >
static constexpr size_t TYPE_ID_MAP_SIZE
 
static constexpr size_t TYPE_ID_MAP_SIZE
 

Detailed Description

Dense union array implementation with offset buffer.

Dense union arrays store an additional offset buffer that maps each element to its position within the corresponding child array. This allows child arrays to be densely packed (only containing values that are actually used), making them more memory efficient when union elements are sparse.

Memory layout:

  • Type ID buffer: Maps each element to child array type
  • Offset buffer: Maps each element to position in child array
  • Child arrays: Contain only the values actually used

Related Apache Arrow specification: https://arrow.apache.org/docs/dev/format/Columnar.html#dense-union

Postcondition
Maintains Arrow dense union format compatibility ("+ud:")
Child arrays can be shorter than the union array length
Provides memory-efficient storage for sparse union data
//Create dense union with int and string children
std::vector<array> children = {int_array, string_array};
type_id_buffer_type type_ids = {0, 1, 0, 1}; // alternating types
offset_buffer_type offsets = {0, 0, 1, 1}; // positions in child arrays
dense_union_array union_arr(std::move(children),
std::move(type_ids),
std::move(offsets));
u8_buffer< std::uint32_t > offset_buffer_type
typename base_type::type_id_buffer_type type_id_buffer_type
dense_union_array(Args &&... args)
Generic constructor for creating dense union arrays.
string_array_impl< std::int32_t > string_array
Type alias for variable-size string arrays with 32-bit offsets.

Definition at line 542 of file union_array.hpp.

Member Typedef Documentation

◆ base_type

◆ offset_buffer_type

Definition at line 547 of file union_array.hpp.

◆ type_id_buffer_type

using sparrow::dense_union_array::type_id_buffer_type = typename base_type::type_id_buffer_type

Definition at line 548 of file union_array.hpp.

Constructor & Destructor Documentation

◆ dense_union_array() [1/4]

template<class... Args>
requires (mpl::excludes_copy_and_move_ctor_v<dense_union_array, Args...>)
sparrow::dense_union_array::dense_union_array ( Args &&... args)
inlineexplicit

Generic constructor for creating dense union arrays.

Creates a dense union array from various input combinations including child arrays, type IDs, offsets, and optional type mapping.

Template Parameters
ArgsParameter pack for constructor arguments
Parameters
argsConstructor arguments (children, type_ids, offsets, etc.)
Precondition
Args must match one of the create_proxy() overload signatures
Args must exclude copy and move constructor signatures
Children, type IDs, and offsets must have consistent sizes
Postcondition
Array is created with the specified children and configuration

Definition at line 566 of file union_array.hpp.

Here is the caller graph for this function:

◆ dense_union_array() [2/4]

SPARROW_API sparrow::dense_union_array::dense_union_array ( arrow_proxy proxy)
explicit

Constructs dense union array from Arrow proxy.

Parameters
proxyArrow proxy containing dense union array data and schema
Precondition
proxy must contain valid Arrow dense union array and schema
proxy format must be "+ud:..."
proxy must have type ID buffer and offset buffer
Postcondition
Array is initialized with data from proxy
Offset buffer pointer is cached for efficient access

◆ dense_union_array() [3/4]

SPARROW_API sparrow::dense_union_array::dense_union_array ( const dense_union_array & rhs)

Copy constructor.

Parameters
rhsSource dense union array to copy from
Precondition
rhs must be in a valid state
Postcondition
This array contains a copy of rhs data
Offset buffer pointer is properly set
Here is the call graph for this function:

◆ dense_union_array() [4/4]

sparrow::dense_union_array::dense_union_array ( dense_union_array && rhs)
default
Here is the call graph for this function:

Member Function Documentation

◆ create_proxy_impl()

template<input_metadata_container METADATA_RANGE>
auto sparrow::dense_union_array::create_proxy_impl ( std::vector< array > && children,
type_id_buffer_type && element_type,
offset_buffer_type && offsets,
std::string && format,
std::optional< std::string_view > name,
std::optional< METADATA_RANGE > metadata ) -> arrow_proxy

Definition at line 1205 of file union_array.hpp.

Here is the call graph for this function:

◆ operator=() [1/2]

SPARROW_API dense_union_array & sparrow::dense_union_array::operator= ( const dense_union_array & rhs)

Copy assignment operator.

Parameters
rhsSource dense union array to copy from
Returns
Reference to this array
Precondition
rhs must be in a valid state
Postcondition
This array contains a copy of rhs data
Previous data is properly released
Offset buffer pointer is updated
Here is the call graph for this function:

◆ operator=() [2/2]

dense_union_array & sparrow::dense_union_array::operator= ( dense_union_array && rhs)
default
Here is the call graph for this function:

Friends And Related Symbol Documentation

◆ union_array_crtp_base< dense_union_array >

friend class union_array_crtp_base< dense_union_array >
friend

Definition at line 771 of file union_array.hpp.


The documentation for this class was generated from the following file: