sparrow
2.4.0
C++20 idiomatic APIs for the Apache Arrow Columnar Format
Toggle main menu visibility
Loading...
Searching...
No Matches
array_bitmap_base.hpp
Go to the documentation of this file.
1
// Copyright 2024 Man Group Operations Limited
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
// http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or mplied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#pragma once
16
17
#include "
sparrow/arrow_interface/arrow_array_schema_proxy.hpp
"
18
#include "
sparrow/layout/mutable_array_base.hpp
"
19
20
namespace
sparrow
21
{
51
template
<
class
D,
bool
is_mutable>
52
class
array_bitmap_base_impl
53
:
public
std::conditional_t<is_mutable, mutable_array_base<D>, array_crtp_base<D>>
54
{
55
public
:
56
57
using
base_type
= std::conditional_t<is_mutable, mutable_array_base<D>,
array_crtp_base<D>
>;
58
59
using
size_type
= std::size_t;
60
61
using
bitmap_type
=
typename
base_type::bitmap_type;
62
using
const_bitmap_type
=
typename
base_type::const_bitmap_type;
63
using
bitmap_iterator
=
typename
base_type::bitmap_iterator;
64
using
const_bitmap_iterator
=
typename
base_type::const_bitmap_iterator;
65
66
using
bitmap_const_reference
=
typename
base_type::bitmap_const_reference;
67
using
difference_type
=
typename
base_type::difference_type;
68
69
using
const_bitmap_range
=
typename
base_type::const_bitmap_range;
70
71
using
iterator_tag
=
typename
base_type::iterator_tag;
72
73
protected
:
74
89
array_bitmap_base_impl
(
arrow_proxy
proxy);
90
101
constexpr
array_bitmap_base_impl
(
const
array_bitmap_base_impl
&);
102
114
constexpr
array_bitmap_base_impl
&
operator=
(
const
array_bitmap_base_impl
&);
115
116
constexpr
array_bitmap_base_impl
(
array_bitmap_base_impl
&&) noexcept = default;
117
constexpr
array_bitmap_base_impl
& operator=(
array_bitmap_base_impl
&&) noexcept = default;
118
130
[[nodiscard]] constexpr
bitmap_type
&
get_bitmap
()
131
requires is_mutable;
132
141
[[nodiscard]] constexpr const
const_bitmap_type
&
get_bitmap
() const;
142
157
constexpr
void
resize_bitmap
(
size_type
new_length,
bool
value)
158
requires is_mutable;
159
181
constexpr
bitmap_iterator
insert_bitmap
(
const_bitmap_iterator
pos,
bool
value,
size_type
count)
182
requires is_mutable;
183
208
template <
std
::input_iterator InputIt>
209
requires
std
::same_as<typename
std
::iterator_traits<InputIt>::value_type,
bool
>
210
constexpr
bitmap_iterator
insert_bitmap
(
const_bitmap_iterator
pos, InputIt first, InputIt last)
211
requires is_mutable;
212
234
constexpr
bitmap_iterator
erase_bitmap
(
const_bitmap_iterator
pos,
size_type
count)
235
requires is_mutable;
236
237
private:
238
239
friend
array_crtp_base
<D>;
240
friend
mutable_array_base
<D>;
241
};
242
251
template <class D>
252
using
array_bitmap_base
=
array_bitmap_base_impl
<D, false>;
253
263
template <class D>
264
using
mutable_array_bitmap_base
=
array_bitmap_base_impl
<D, true>;
265
266
/************************************
267
* array_bitmap_base implementation *
268
************************************/
269
270
template <class D,
bool
is_mutable>
271
array_bitmap_base_impl
<D, is_mutable>::
array_bitmap_base_impl
(
arrow_proxy
proxy_param)
272
:
base_type
(
std
::move(proxy_param))
273
{
274
}
275
276
template
<
class
D,
bool
is_mutable>
277
constexpr
array_bitmap_base_impl<D, is_mutable>::array_bitmap_base_impl
(
const
array_bitmap_base_impl
& rhs)
278
:
base_type
(rhs)
279
{
280
}
281
282
template
<
class
D,
bool
is_mutable>
283
constexpr
array_bitmap_base_impl<D, is_mutable>
&
284
array_bitmap_base_impl<D, is_mutable>::operator=
(
const
array_bitmap_base_impl
& rhs)
285
{
286
base_type::operator=(rhs);
287
return
*
this
;
288
}
289
290
template
<
class
D,
bool
is_mutable>
291
constexpr
auto
array_bitmap_base_impl<D, is_mutable>::get_bitmap
() ->
bitmap_type
&
292
requires
is_mutable
293
{
294
arrow_proxy
&
arrow_proxy
= this->get_arrow_proxy();
295
SPARROW_ASSERT_TRUE
(
arrow_proxy
.
bitmap
().has_value());
296
return
*
arrow_proxy
.
bitmap
();
297
}
298
299
template
<
class
D,
bool
is_mutable>
300
constexpr
auto
array_bitmap_base_impl<D, is_mutable>::get_bitmap
() const -> const
const_bitmap_type
&
301
{
302
const
arrow_proxy
& proxy = this->get_arrow_proxy();
303
SPARROW_ASSERT_TRUE
(proxy.
const_bitmap
().has_value());
304
return
*proxy.
const_bitmap
();
305
}
306
307
template
<
class
D,
bool
is_mutable>
308
constexpr
void
array_bitmap_base_impl<D, is_mutable>::resize_bitmap
(
size_type
new_length,
bool
value)
309
requires
is_mutable
310
{
311
this->get_arrow_proxy().resize_bitmap(new_length, value);
312
}
313
314
template
<
class
D,
bool
is_mutable>
315
constexpr
auto
316
array_bitmap_base_impl<D, is_mutable>::insert_bitmap
(
const_bitmap_iterator
pos,
bool
value,
size_type
count)
317
->
bitmap_iterator
318
requires
is_mutable
319
{
320
SPARROW_ASSERT_TRUE
(this->bitmap_cbegin() <= pos)
321
SPARROW_ASSERT_TRUE
(pos <= this->bitmap_cend())
322
const
auto
pos_index =
static_cast<
size_t
>
(std::distance(this->bitmap_cbegin(), pos));
323
const
auto
idx = this->get_arrow_proxy().insert_bitmap(pos_index, value, count);
324
return
sparrow::next
(this->bitmap_begin(), idx);
325
}
326
327
template
<
class
D,
bool
is_mutable>
328
template
<std::input_iterator InputIt>
329
requires
std::same_as<typename std::iterator_traits<InputIt>::value_type,
bool
>
330
constexpr
auto
331
array_bitmap_base_impl<D, is_mutable>::insert_bitmap
(
const_bitmap_iterator
pos, InputIt first, InputIt last)
332
->
bitmap_iterator
333
requires
is_mutable
334
{
335
SPARROW_ASSERT_TRUE
(this->bitmap_cbegin() <= pos)
336
SPARROW_ASSERT_TRUE
(pos <= this->bitmap_cend());
337
if
constexpr
(std::random_access_iterator<InputIt>)
338
{
339
SPARROW_ASSERT_TRUE
(first <= last);
340
}
341
const
auto
pos_index =
static_cast<
size_t
>
(std::distance(this->bitmap_cbegin(), pos));
342
const
auto
idx = this->get_arrow_proxy().insert_bitmap(pos_index, std::ranges::subrange(first, last));
343
return
sparrow::next
(this->bitmap_begin(), idx);
344
}
345
346
template
<
class
D,
bool
is_mutable>
347
constexpr
auto
348
array_bitmap_base_impl<D, is_mutable>::erase_bitmap
(
const_bitmap_iterator
pos,
size_type
count)
349
->
bitmap_iterator
350
requires
is_mutable
351
{
352
SPARROW_ASSERT_TRUE
(this->bitmap_cbegin() <= pos)
353
SPARROW_ASSERT_TRUE
(pos < this->bitmap_cend())
354
arrow_proxy
&
arrow_proxy
= this->get_arrow_proxy();
355
const
auto
pos_idx =
static_cast<
size_t
>
(std::distance(this->bitmap_cbegin(), pos));
356
const
auto
idx =
arrow_proxy
.
erase_bitmap
(pos_idx, count);
357
return
sparrow::next
(this->bitmap_begin(), idx);
358
}
359
}
arrow_array_schema_proxy.hpp
sparrow::array_bitmap_base_impl
Definition
array_bitmap_base.hpp:54
sparrow::array_bitmap_base_impl::array_bitmap_base_impl
array_bitmap_base_impl(arrow_proxy proxy)
Constructs array bitmap base from Arrow proxy.
Definition
array_bitmap_base.hpp:271
sparrow::array_bitmap_base_impl::const_bitmap_range
typename base_type::const_bitmap_range const_bitmap_range
Definition
array_bitmap_base.hpp:69
sparrow::array_bitmap_base_impl::size_type
std::size_t size_type
Definition
array_bitmap_base.hpp:59
sparrow::array_bitmap_base_impl::bitmap_iterator
typename base_type::bitmap_iterator bitmap_iterator
Definition
array_bitmap_base.hpp:63
sparrow::array_bitmap_base_impl< D, false >::array_bitmap_base_impl
constexpr array_bitmap_base_impl(array_bitmap_base_impl &&) noexcept=default
sparrow::array_bitmap_base_impl< D, false >::array_bitmap_base_impl
constexpr array_bitmap_base_impl(const array_bitmap_base_impl &)
sparrow::array_bitmap_base_impl< D, false >< self_type >::get_bitmap
constexpr bitmap_type & get_bitmap()
sparrow::array_bitmap_base_impl< D, false >< self_type >::resize_bitmap
constexpr void resize_bitmap(size_type new_length, bool value)
sparrow::array_bitmap_base_impl< D, false >< self_type >::insert_bitmap
constexpr bitmap_iterator insert_bitmap(const_bitmap_iterator pos, bool value, size_type count)
sparrow::array_bitmap_base_impl::iterator_tag
typename base_type::iterator_tag iterator_tag
Definition
array_bitmap_base.hpp:71
sparrow::array_bitmap_base_impl::const_bitmap_iterator
typename base_type::const_bitmap_iterator const_bitmap_iterator
Definition
array_bitmap_base.hpp:64
sparrow::array_bitmap_base_impl< D, false >::operator=
constexpr array_bitmap_base_impl & operator=(const array_bitmap_base_impl &)
sparrow::array_bitmap_base_impl< D, false >< self_type >::erase_bitmap
constexpr bitmap_iterator erase_bitmap(const_bitmap_iterator pos, size_type count)
sparrow::array_bitmap_base_impl::const_bitmap_type
typename base_type::const_bitmap_type const_bitmap_type
Definition
array_bitmap_base.hpp:62
sparrow::array_bitmap_base_impl::base_type
std::conditional_t< is_mutable, mutable_array_base< D >, array_crtp_base< D > > base_type
Definition
array_bitmap_base.hpp:57
sparrow::array_bitmap_base_impl::bitmap_const_reference
typename base_type::bitmap_const_reference bitmap_const_reference
Definition
array_bitmap_base.hpp:66
sparrow::array_bitmap_base_impl::bitmap_type
typename base_type::bitmap_type bitmap_type
Definition
array_bitmap_base.hpp:61
sparrow::array_bitmap_base_impl::difference_type
typename base_type::difference_type difference_type
Definition
array_bitmap_base.hpp:67
sparrow::array_crtp_base
Definition
array_base.hpp:109
sparrow::arrow_proxy
Definition
arrow_array_schema_proxy.hpp:111
sparrow::arrow_proxy::bitmap
SPARROW_API std::optional< bitmap_type > & bitmap()
sparrow::arrow_proxy::const_bitmap
SPARROW_API const std::optional< const_bitmap_type > & const_bitmap() const
sparrow::arrow_proxy::erase_bitmap
SPARROW_API size_t erase_bitmap(size_t index, size_t count=1)
Erases validity bits starting at specified position.
sparrow::mutable_array_base
Base class definining common interface for arrays with a bitmap.
Definition
mutable_array_base.hpp:36
SPARROW_ASSERT_TRUE
#define SPARROW_ASSERT_TRUE(expr__)
Definition
contracts.hpp:209
mutable_array_base.hpp
sparrow
Definition
array.hpp:21
sparrow::mutable_array_bitmap_base
array_bitmap_base_impl< D, true > mutable_array_bitmap_base
Convenient alias for arrays with mutable validity bitmaps.
Definition
array_bitmap_base.hpp:264
sparrow::next
constexpr InputIt next(InputIt it, Distance n)
Definition
iterator.hpp:605
sparrow::array_bitmap_base
array_bitmap_base_impl< D, false > array_bitmap_base
Convenient alias for arrays with immutable validity bitmaps.
Definition
array_bitmap_base.hpp:252
std
Extensions to the C++ standard library.
Definition
float16_t.hpp:1916
sparrow
layout
array_bitmap_base.hpp
Generated by
1.17.0