63 template <trivial_copyable_type T, trivial_copyable_type T2 = T>
114 template <mpl::iterator_of_type<T2> InputIt>
117 template <mpl::iterator_of_type<T2> InputIt>
125 template <std::ranges::input_range RANGE>
135 [[nodiscard]]
const arrow_proxy& get_proxy()
const;
138 size_t m_data_buffer_index;
178 template <mpl::iterator_of_type<
bool> InputIt>
181 template <mpl::iterator_of_type<
bool> InputIt>
189 template <std::ranges::input_range RANGE>
204 [[nodiscard]]
size_t get_offset(
size_t i)
const;
206 [[nodiscard]] adaptor_iterator adaptor_begin();
207 [[nodiscard]] adaptor_iterator adaptor_end();
209 [[nodiscard]] const_adaptor_iterator adaptor_cbegin()
const;
210 [[nodiscard]] const_adaptor_iterator adaptor_cend()
const;
213 [[nodiscard]]
const arrow_proxy& get_proxy()
const;
216 [[nodiscard]] bitset_adaptor get_data_adaptor();
218 void update_data_view();
221 size_t m_data_buffer_index;
224 bitset_adaptor m_adaptor;
231 template <trivial_copyable_type T, trivial_copyable_type T2>
234 , m_data_buffer_index(data_buffer_index)
238 template <trivial_copyable_type T, trivial_copyable_type T2>
241 return get_proxy().buffers()[m_data_buffer_index].template
data<T2>()
242 +
static_cast<size_t>(get_proxy().offset());
245 template <trivial_copyable_type T, trivial_copyable_type T2>
248 return get_proxy().buffers()[m_data_buffer_index].template
data<T2>()
249 +
static_cast<size_t>(get_proxy().offset());
252 template <trivial_copyable_type T, trivial_copyable_type T2>
259 template <trivial_copyable_type T, trivial_copyable_type T2>
267 template <trivial_copyable_type T, trivial_copyable_type T2>
273 template <trivial_copyable_type T, trivial_copyable_type T2>
279 template <trivial_copyable_type T, trivial_copyable_type T2>
285 template <trivial_copyable_type T, trivial_copyable_type T2>
291 template <trivial_copyable_type T, trivial_copyable_type T2>
294 const size_t new_size = new_length +
static_cast<size_t>(get_proxy().offset());
295 get_data_buffer().resize(new_size,
value);
298 template <trivial_copyable_type T, trivial_copyable_type T2>
308 get_data_buffer().insert(pos, count,
value);
313 template <trivial_copyable_type T, trivial_copyable_type T2>
324 template <trivial_copyable_type T, trivial_copyable_type T2>
325 template <mpl::iterator_of_type<T2> InputIt>
335 get_data_buffer().insert(pos, first, last);
340 template <trivial_copyable_type T, trivial_copyable_type T2>
341 template <mpl::iterator_of_type<T2> InputIt>
351 template <trivial_copyable_type T, trivial_copyable_type T2>
359 const auto distance =
static_cast<size_t>(
362 auto data_buffer = get_data_buffer();
363 const auto first =
sparrow::next(data_buffer.cbegin(), distance);
365 data_buffer.erase(first, last);
370 template <trivial_copyable_type T, trivial_copyable_type T2>
380 template <trivial_copyable_type T, trivial_copyable_type T2>
386 template <trivial_copyable_type T, trivial_copyable_type T2>
387 template <std::ranges::input_range RANGE>
393 template <trivial_copyable_type T, trivial_copyable_type T2>
400 template <trivial_copyable_type T, trivial_copyable_type T2>
402 primitive_data_access<T, T2>::get_data_buffer()
404 auto& buffers = get_proxy().get_array_private_data()->buffers();
408 template <trivial_copyable_type T, trivial_copyable_type T2>
409 [[nodiscard]]
arrow_proxy& primitive_data_access<T, T2>::get_proxy()
414 template <trivial_copyable_type T, trivial_copyable_type T2>
415 [[nodiscard]]
const arrow_proxy& primitive_data_access<T, T2>::get_proxy()
const
426 , m_data_buffer_index(data_buffer_index)
427 , m_view(get_data_view())
429 , m_adaptor(get_data_adaptor())
435 return m_view[get_offset(i)];
440 return m_view[get_offset(i)];
460 return m_view.cend();
465 m_adaptor.resize(get_offset(new_length),
value);
474 auto res = m_adaptor.insert(ins_iter, count,
value);
482 auto iter =
sparrow::next(adaptor_cbegin(),
static_cast<difference_type
>(idx));
483 auto res = m_adaptor.insert(iter, count,
value);
489 template <mpl::iterator_of_type<
bool> InputIt>
495 auto res = m_adaptor.insert(ins_iter, first, last);
500 template <mpl::iterator_of_type<
bool> InputIt>
504 auto iter =
sparrow::next(adaptor_cbegin(),
static_cast<difference_type
>(idx));
505 auto res = m_adaptor.insert(iter, first, last);
515 auto res = m_adaptor.erase(iter, iter_end);
524 auto res = m_adaptor.erase(iter, iter_end);
532 m_view = get_data_view();
533 m_adaptor = get_data_adaptor();
536 template <std::ranges::input_range RANGE>
539 auto size =
static_cast<size_t>(std::ranges::distance(r));
542 std::copy(r.begin(), r.end(), v.begin());
552 std::fill(v.begin(), v.end(),
value);
561 std::size_t block_nb = size / 8;
562 if (block_nb * 8 < size)
567 std::uint8_t*
buffer =
reinterpret_cast<std::uint8_t*
>(res.data());
568 bitset_view v(
buffer, size);
573 [[nodiscard]]
inline size_t primitive_data_access<bool>::get_offset(
size_t i)
const
575 return i + get_proxy().offset();
585 return m_adaptor.end();
595 return m_adaptor.cend();
598 [[nodiscard]]
inline arrow_proxy& primitive_data_access<bool>::get_proxy()
603 [[nodiscard]]
inline const arrow_proxy& primitive_data_access<bool>::get_proxy()
const
610 auto& proxy = get_proxy();
611 const size_t size = proxy.length() + proxy.offset();
612 return {proxy.buffers()[m_data_buffer_index].data(),
size};
617 auto& proxy = get_proxy();
618 if (proxy.is_created_with_sparrow())
620 size_t size = proxy.length() + proxy.offset();
621 return bitset_adaptor(&(proxy.get_array_private_data()->buffers()[m_data_buffer_index]), size);
625 return bitset_adaptor(&m_dummy_buffer, 0u);
631 m_view = bitset_view(get_proxy().buffers()[m_data_buffer_index].data(), m_adaptor.size());
Class which has internally a reference to a contiguous container of a certain type and provides an AP...
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
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
dynamic_bitset_view< std::uint8_t, non_tracking_null_count<> > bitset_view
typename bitset_view::value_type inner_value_type
typename bitset_view::const_iterator const_value_iterator
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)
Provides access to primitive data stored in Arrow format buffers.
primitive_data_access(arrow_proxy &proxy, size_t data_buffer_index)
Constructor for primitive_data_access.
constexpr inner_reference value(size_t i)
pointer_iterator< inner_const_pointer > const_value_iterator
inner_value_type * inner_pointer
constexpr inner_pointer data()
std::conditional_t< std::is_same_v< T2, bool >, T2, const T2 & > inner_const_reference
const inner_value_type * inner_const_pointer
primitive_data_access(primitive_data_access &&)=delete
constexpr const_value_iterator value_cbegin() const
constexpr value_iterator insert_value(const_value_iterator pos, T2 value, size_t count)
static constexpr u8_buffer< T2 > make_data_buffer(RANGE &&r)
constexpr inner_const_pointer data() const
constexpr value_iterator value_begin()
constexpr value_iterator value_end()
constexpr const_value_iterator value_cend() const
constexpr value_iterator insert_value(size_t idx, T2 value, size_t count)
constexpr value_iterator insert_values(size_t idx, InputIt first, InputIt last)
primitive_data_access & operator=(const primitive_data_access &)=delete
constexpr void reset_proxy(arrow_proxy &proxy)
primitive_data_access(const primitive_data_access &)=delete
constexpr value_iterator insert_values(const_value_iterator pos, InputIt first, InputIt last)
constexpr void resize_values(size_t new_length, const T2 &value)
static constexpr u8_buffer< T2 > make_data_buffer(size_t n, const T2 &value)
constexpr inner_const_reference value(size_t i) const
constexpr value_iterator erase_values(size_t idx, size_t count)
pointer_iterator< inner_pointer > value_iterator
primitive_data_access & operator=(primitive_data_access &&)=delete
constexpr value_iterator erase_values(const_value_iterator pos, size_t count)
bitset_reference< self_type > reference
bitset_iterator< self_type, true > const_iterator
bitset_iterator< self_type, false > iterator
typename storage_type_without_cvrefpointer::difference_type difference_type
A non-owning view to a dynamic size sequence of bits stored in external memory.
This buffer class is used as storage buffer for all sparrow arrays.
#define SPARROW_ASSERT_TRUE(expr__)
constexpr std::size_t size(typelist< T... >={})
Gets the count of types contained in a typelist.
constexpr InputIt next(InputIt it, Distance n)
auto make_buffer_adaptor(FromBufferRef &buf)