33 template <trivial_copyable_type T>
84 template <mpl::iterator_of_type<T> InputIt>
87 template <mpl::iterator_of_type<T> InputIt>
95 template <std::ranges::input_range RANGE>
105 [[nodiscard]]
const arrow_proxy& get_proxy()
const;
108 size_t m_data_buffer_index;
148 template <mpl::iterator_of_type<
bool> InputIt>
151 template <mpl::iterator_of_type<
bool> InputIt>
159 template <std::ranges::input_range RANGE>
174 [[nodiscard]]
size_t get_offset(
size_t i)
const;
176 [[nodiscard]] adaptor_iterator adaptor_begin();
177 [[nodiscard]] adaptor_iterator adaptor_end();
179 [[nodiscard]] const_adaptor_iterator adaptor_cbegin()
const;
180 [[nodiscard]] const_adaptor_iterator adaptor_cend()
const;
183 [[nodiscard]]
const arrow_proxy& get_proxy()
const;
186 [[nodiscard]] bitset_adaptor get_data_adaptor();
188 void update_data_view();
191 size_t m_data_buffer_index;
194 bitset_adaptor m_adaptor;
201 template <trivial_copyable_type T>
204 , m_data_buffer_index(data_buffer_index)
208 template <trivial_copyable_type T>
211 return get_proxy().buffers()[m_data_buffer_index].template
data<T>()
212 +
static_cast<size_t>(get_proxy().offset());
215 template <trivial_copyable_type T>
218 return get_proxy().buffers()[m_data_buffer_index].template
data<T>()
219 +
static_cast<size_t>(get_proxy().offset());
222 template <trivial_copyable_type T>
229 template <trivial_copyable_type T>
236 template <trivial_copyable_type T>
242 template <trivial_copyable_type T>
248 template <trivial_copyable_type T>
254 template <trivial_copyable_type T>
260 template <trivial_copyable_type T>
263 const size_t new_size = new_length +
static_cast<size_t>(get_proxy().offset());
264 get_data_buffer().resize(new_size,
value);
267 template <trivial_copyable_type T>
276 get_data_buffer().insert(pos, count,
value);
281 template <trivial_copyable_type T>
292 template <trivial_copyable_type T>
293 template <mpl::iterator_of_type<T> InputIt>
303 get_data_buffer().insert(pos, first, last);
308 template <trivial_copyable_type T>
309 template <mpl::iterator_of_type<T> InputIt>
319 template <trivial_copyable_type T>
327 const auto distance =
static_cast<size_t>(
330 auto data_buffer = get_data_buffer();
331 const auto first =
sparrow::next(data_buffer.cbegin(), distance);
333 data_buffer.erase(first, last);
338 template <trivial_copyable_type T>
348 template <trivial_copyable_type T>
354 template <trivial_copyable_type T>
355 template <std::ranges::input_range RANGE>
361 template <trivial_copyable_type T>
367 template <trivial_copyable_type T>
370 auto& buffers = get_proxy().get_array_private_data()->buffers();
374 template <trivial_copyable_type T>
375 [[nodiscard]]
arrow_proxy& primitive_data_access<T>::get_proxy()
380 template <trivial_copyable_type T>
381 [[nodiscard]]
const arrow_proxy& primitive_data_access<T>::get_proxy()
const
392 , m_data_buffer_index(data_buffer_index)
393 , m_view(get_data_view())
395 , m_adaptor(get_data_adaptor())
401 return m_view[get_offset(i)];
406 return m_view[get_offset(i)];
426 return m_view.cend();
431 m_adaptor.resize(get_offset(new_length),
value);
440 auto res = m_adaptor.insert(ins_iter, count,
value);
448 auto iter =
sparrow::next(adaptor_cbegin(),
static_cast<difference_type
>(idx));
449 auto res = m_adaptor.insert(iter, count,
value);
455 template <mpl::iterator_of_type<
bool> InputIt>
461 auto res = m_adaptor.insert(ins_iter, first, last);
466 template <mpl::iterator_of_type<
bool> InputIt>
470 auto iter =
sparrow::next(adaptor_cbegin(),
static_cast<difference_type
>(idx));
471 auto res = m_adaptor.insert(iter, first, last);
481 auto res = m_adaptor.erase(iter, iter_end);
490 auto res = m_adaptor.erase(iter, iter_end);
498 m_view = get_data_view();
499 m_adaptor = get_data_adaptor();
502 template <std::ranges::input_range RANGE>
505 auto size =
static_cast<size_t>(std::ranges::distance(r));
508 std::copy(r.begin(), r.end(), v.begin());
518 std::fill(v.begin(), v.end(),
value);
527 std::size_t block_nb = size / 8;
528 if (block_nb * 8 < size)
533 std::uint8_t*
buffer =
reinterpret_cast<std::uint8_t*
>(res.data());
534 bitset_view v(
buffer, size);
539 [[nodiscard]]
inline size_t primitive_data_access<bool>::get_offset(
size_t i)
const
541 return i + get_proxy().offset();
551 return m_adaptor.end();
561 return m_adaptor.cend();
564 [[nodiscard]]
inline arrow_proxy& primitive_data_access<bool>::get_proxy()
569 [[nodiscard]]
inline const arrow_proxy& primitive_data_access<bool>::get_proxy()
const
576 auto& proxy = get_proxy();
577 size_t size = proxy.length() + proxy.offset();
578 return bitset_view(proxy.buffers()[m_data_buffer_index].data(), size);
583 auto& proxy = get_proxy();
584 if (proxy.is_created_with_sparrow())
586 size_t size = proxy.length() + proxy.offset();
587 return bitset_adaptor(&(proxy.get_array_private_data()->buffers()[m_data_buffer_index]), size);
591 return bitset_adaptor(&m_dummy_buffer, 0u);
597 m_view = bitset_view(get_proxy().buffers()[m_data_buffer_index].data(), m_adaptor.size());
Proxy class over ArrowArray and ArrowSchema.
Class which have internally a reference to a contiguous container of a certain type and provides an A...
Object that owns a piece of contiguous memory.
static u8_buffer< bool > make_data_buffer(RANGE &&r)
typename bitset_view::iterator value_iterator
value_iterator value_begin()
inner_value_type * inner_pointer
const_value_iterator value_cend() const
primitive_data_access(arrow_proxy &proxy, size_t data_buffer_index)
constexpr value_iterator insert_values(const_value_iterator pos, InputIt first, InputIt last)
const inner_value_type * inner_const_pointer
primitive_data_access & operator=(primitive_data_access &&)=delete
const_value_iterator value_cbegin() const
inner_reference value(size_t i)
typename bitset_view::const_reference inner_const_reference
typename bitset_view::value_type inner_value_type
typename bitset_view::const_iterator const_value_iterator
dynamic_bitset_view< std::uint8_t > bitset_view
typename bitset_view::reference inner_reference
primitive_data_access(const primitive_data_access &)=delete
primitive_data_access(primitive_data_access &&)=delete
primitive_data_access & operator=(const primitive_data_access &)=delete
constexpr value_iterator insert_values(size_t idx, InputIt first, InputIt last)
Data access class for trivial copyable types.
constexpr void resize_values(size_t new_length, const T &value)
constexpr value_iterator insert_values(size_t idx, InputIt first, InputIt last)
primitive_data_access & operator=(const primitive_data_access &)=delete
constexpr value_iterator erase_values(const_value_iterator pos, size_t count)
constexpr value_iterator erase_values(size_t idx, size_t count)
inner_value_type * inner_pointer
static u8_buffer< T > make_data_buffer(RANGE &&r)
primitive_data_access(primitive_data_access &&)=delete
constexpr inner_const_reference value(size_t i) const
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()
static u8_buffer< T > make_data_buffer(size_t n, const T &value)
constexpr value_iterator value_end()
constexpr const_value_iterator value_cend() const
constexpr value_iterator insert_value(size_t idx, T value, size_t count)
pointer_iterator< inner_const_pointer > const_value_iterator
primitive_data_access(arrow_proxy &proxy, size_t data_buffer_index)
Constructor for primitive_data_access.
const inner_value_type * inner_const_pointer
void reset_proxy(arrow_proxy &proxy)
constexpr inner_pointer data()
primitive_data_access & operator=(primitive_data_access &&)=delete
constexpr value_iterator insert_value(const_value_iterator pos, T value, size_t count)
constexpr inner_const_pointer data() const
primitive_data_access(const primitive_data_access &)=delete
pointer_iterator< inner_pointer > value_iterator
constexpr const_value_iterator value_cbegin() const
bitset_reference< self_type > reference
bitset_iterator< self_type, false > iterator
bitset_iterator< self_type, true > const_iterator
typename storage_type_without_cvrefpointer::difference_type difference_type
This class represents a view to a dynamic size sequence of bits.
This buffer class is use as storage buffer for all sparrow arrays.
#define SPARROW_ASSERT_TRUE(expr__)
constexpr std::size_t size(typelist< T... >={})
constexpr InputIt next(InputIt it, Distance n)
auto make_buffer_adaptor(FromBufferRef &buf)