62 template <trivial_copyable_type T, trivial_copyable_type T2 = T>
113 template <mpl::iterator_of_type<T2> InputIt>
116 template <mpl::iterator_of_type<T2> InputIt>
124 template <std::ranges::input_range RANGE>
134 [[nodiscard]]
const arrow_proxy& get_proxy()
const;
137 size_t m_data_buffer_index;
177 template <mpl::iterator_of_type<
bool> InputIt>
180 template <mpl::iterator_of_type<
bool> InputIt>
188 template <std::ranges::input_range RANGE>
203 [[nodiscard]]
size_t get_offset(
size_t i)
const;
205 [[nodiscard]] adaptor_iterator adaptor_begin();
206 [[nodiscard]] adaptor_iterator adaptor_end();
208 [[nodiscard]] const_adaptor_iterator adaptor_cbegin()
const;
209 [[nodiscard]] const_adaptor_iterator adaptor_cend()
const;
212 [[nodiscard]]
const arrow_proxy& get_proxy()
const;
215 [[nodiscard]] bitset_adaptor get_data_adaptor();
217 void update_data_view();
220 size_t m_data_buffer_index;
223 bitset_adaptor m_adaptor;
230 template <trivial_copyable_type T, trivial_copyable_type T2>
233 , m_data_buffer_index(data_buffer_index)
237 template <trivial_copyable_type T, trivial_copyable_type T2>
240 return get_proxy().buffers()[m_data_buffer_index].template
data<T2>()
241 +
static_cast<size_t>(get_proxy().offset());
244 template <trivial_copyable_type T, trivial_copyable_type T2>
247 return get_proxy().buffers()[m_data_buffer_index].template
data<T2>()
248 +
static_cast<size_t>(get_proxy().offset());
251 template <trivial_copyable_type T, trivial_copyable_type T2>
258 template <trivial_copyable_type T, trivial_copyable_type T2>
266 template <trivial_copyable_type T, trivial_copyable_type T2>
272 template <trivial_copyable_type T, trivial_copyable_type T2>
278 template <trivial_copyable_type T, trivial_copyable_type T2>
284 template <trivial_copyable_type T, trivial_copyable_type T2>
290 template <trivial_copyable_type T, trivial_copyable_type T2>
293 const size_t new_size = new_length +
static_cast<size_t>(get_proxy().offset());
294 get_data_buffer().resize(new_size,
value);
297 template <trivial_copyable_type T, trivial_copyable_type T2>
307 get_data_buffer().insert(pos, count,
value);
312 template <trivial_copyable_type T, trivial_copyable_type T2>
323 template <trivial_copyable_type T, trivial_copyable_type T2>
324 template <mpl::iterator_of_type<T2> InputIt>
334 get_data_buffer().insert(pos, first, last);
339 template <trivial_copyable_type T, trivial_copyable_type T2>
340 template <mpl::iterator_of_type<T2> InputIt>
350 template <trivial_copyable_type T, trivial_copyable_type T2>
358 const auto distance =
static_cast<size_t>(
361 auto data_buffer = get_data_buffer();
362 const auto first =
sparrow::next(data_buffer.cbegin(), distance);
364 data_buffer.erase(first, last);
369 template <trivial_copyable_type T, trivial_copyable_type T2>
379 template <trivial_copyable_type T, trivial_copyable_type T2>
385 template <trivial_copyable_type T, trivial_copyable_type T2>
386 template <std::ranges::input_range RANGE>
392 template <trivial_copyable_type T, trivial_copyable_type T2>
399 template <trivial_copyable_type T, trivial_copyable_type T2>
401 primitive_data_access<T, T2>::get_data_buffer()
403 auto& buffers = get_proxy().get_array_private_data()->buffers();
407 template <trivial_copyable_type T, trivial_copyable_type T2>
408 [[nodiscard]]
arrow_proxy& primitive_data_access<T, T2>::get_proxy()
413 template <trivial_copyable_type T, trivial_copyable_type T2>
414 [[nodiscard]]
const arrow_proxy& primitive_data_access<T, T2>::get_proxy()
const
425 , m_data_buffer_index(data_buffer_index)
426 , m_view(get_data_view())
428 , m_adaptor(get_data_adaptor())
434 return m_view[get_offset(i)];
439 return m_view[get_offset(i)];
459 return m_view.cend();
464 m_adaptor.resize(get_offset(new_length),
value);
473 auto res = m_adaptor.insert(ins_iter, count,
value);
481 auto iter =
sparrow::next(adaptor_cbegin(),
static_cast<difference_type
>(idx));
482 auto res = m_adaptor.insert(iter, count,
value);
488 template <mpl::iterator_of_type<
bool> InputIt>
494 auto res = m_adaptor.insert(ins_iter, first, last);
499 template <mpl::iterator_of_type<
bool> InputIt>
503 auto iter =
sparrow::next(adaptor_cbegin(),
static_cast<difference_type
>(idx));
504 auto res = m_adaptor.insert(iter, first, last);
514 auto res = m_adaptor.erase(iter, iter_end);
523 auto res = m_adaptor.erase(iter, iter_end);
531 m_view = get_data_view();
532 m_adaptor = get_data_adaptor();
535 template <std::ranges::input_range RANGE>
538 auto size =
static_cast<size_t>(std::ranges::distance(r));
541 std::copy(r.begin(), r.end(), v.begin());
551 std::fill(v.begin(), v.end(),
value);
560 std::size_t block_nb = size / 8;
561 if (block_nb * 8 < size)
566 std::uint8_t*
buffer =
reinterpret_cast<std::uint8_t*
>(res.data());
567 bitset_view v(
buffer, size);
572 [[nodiscard]]
inline size_t primitive_data_access<bool>::get_offset(
size_t i)
const
574 return i + get_proxy().offset();
584 return m_adaptor.end();
594 return m_adaptor.cend();
597 [[nodiscard]]
inline arrow_proxy& primitive_data_access<bool>::get_proxy()
602 [[nodiscard]]
inline const arrow_proxy& primitive_data_access<bool>::get_proxy()
const
609 auto& proxy = get_proxy();
610 size_t size = proxy.length() + proxy.offset();
611 return bitset_view(proxy.buffers()[m_data_buffer_index].data(), size);
616 auto& proxy = get_proxy();
617 if (proxy.is_created_with_sparrow())
619 size_t size = proxy.length() + proxy.offset();
620 return bitset_adaptor(&(proxy.get_array_private_data()->buffers()[m_data_buffer_index]), size);
624 return bitset_adaptor(&m_dummy_buffer, 0u);
630 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
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)
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, false > iterator
bitset_iterator< self_type, true > const_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)