sparrow
2.4.0
C++20 idiomatic APIs for the Apache Arrow Columnar Format
Toggle main menu visibility
Loading...
Searching...
No Matches
dynamic_bitset_view.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 implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
15
#pragma once
16
17
#include "
sparrow/buffer/buffer_view.hpp
"
18
#include "
sparrow/buffer/dynamic_bitset/dynamic_bitset_base.hpp
"
19
20
namespace
sparrow
21
{
64
template
<std::
int
egral T, null_count_policy NCP = tracking_null_count<>>
65
class
dynamic_bitset_view
:
public
dynamic_bitset_base
<buffer_view<T>, NCP>
66
{
67
public
:
68
69
using
base_type
=
dynamic_bitset_base<buffer_view<T>
, NCP>;
71
using
storage_type
=
typename
base_type::storage_type
;
72
using
block_type
=
typename
base_type::block_type
;
73
using
size_type
=
typename
base_type::size_type
;
74
106
constexpr
dynamic_bitset_view
(
block_type
* p,
size_type
n);
107
145
constexpr
dynamic_bitset_view
(
block_type
* p,
size_type
n,
size_type
offset
);
146
166
constexpr
dynamic_bitset_view
(
block_type
* p,
size_type
n,
size_type
offset
,
size_type
null_count
);
167
168
constexpr
~dynamic_bitset_view
() =
default
;
169
170
constexpr
dynamic_bitset_view
(
const
dynamic_bitset_view
&) =
default
;
171
constexpr
dynamic_bitset_view
(
dynamic_bitset_view
&&) noexcept = default;
172
173
constexpr
dynamic_bitset_view
& operator=(const
dynamic_bitset_view
&) = default;
174
constexpr
dynamic_bitset_view
& operator=(
dynamic_bitset_view
&&) noexcept = default;
175
187
[[nodiscard]] constexpr
dynamic_bitset_view
slice_view
(
size_type
start,
size_type
length) const;
188
199
[[nodiscard]] constexpr
dynamic_bitset_view
slice_view
(
size_type
start) const;
200
};
201
202
template <
std
::integral T,
null_count_policy
NCP>
203
constexpr
dynamic_bitset_view
<T, NCP>::
dynamic_bitset_view
(
block_type
* p,
size_type
n)
204
:
base_type
(
storage_type
(p, p !=
nullptr
? this->
compute_block_count
(n) : 0), n)
205
{
206
}
207
208
template
<std::
int
egral T, null_count_policy NCP>
209
constexpr
dynamic_bitset_view<T, NCP>::dynamic_bitset_view
(
block_type
* p,
size_type
n,
size_type
offset
)
210
:
base_type
(
storage_type
(p, p != nullptr ? this->
compute_block_count
(n +
offset
) : 0), n,
offset
)
211
{
212
}
213
214
template
<std::
int
egral T, null_count_policy NCP>
215
constexpr
dynamic_bitset_view<T, NCP>::dynamic_bitset_view
(
216
block_type
* p,
217
size_type
n,
218
size_type
offset
,
219
size_type
null_count
220
)
221
:
base_type
(
storage_type
(p, p != nullptr ? this->
compute_block_count
(n +
offset
) : 0), n,
offset
,
null_count
)
222
{
223
}
224
225
template
<std::
int
egral T, null_count_policy NCP>
226
constexpr
auto
dynamic_bitset_view<T, NCP>::slice_view
(
size_type
start,
size_type
length)
const
227
->
dynamic_bitset_view
228
{
229
if
(start + length > this->
size
())
230
{
231
throw
std::out_of_range(
"slice_view: start + length exceeds bitset size"
);
232
}
233
234
const
size_type
new_offset = this->
offset
() + start;
235
236
// Calculate the null count for the slice if tracking is enabled
237
if
constexpr
(NCP::track_null_count)
238
{
239
size_type
slice_null_count = 0;
240
for
(
size_type
i = 0; i < length; ++i)
241
{
242
if
(!this->
test
(start + i))
243
{
244
++slice_null_count;
245
}
246
}
247
return
dynamic_bitset_view
(
const_cast<
block_type
*
>
(this->
data
()), length, new_offset, slice_null_count);
248
}
249
else
250
{
251
return
dynamic_bitset_view
(
const_cast<
block_type
*
>
(this->
data
()), length, new_offset);
252
}
253
}
254
255
template
<std::
int
egral T, null_count_policy NCP>
256
constexpr
auto
dynamic_bitset_view<T, NCP>::slice_view
(
size_type
start)
const
->
dynamic_bitset_view
257
{
258
if
(start > this->
size
())
259
{
260
throw
std::out_of_range(
"slice_view: start exceeds bitset size"
);
261
}
262
263
return
slice_view
(start, this->
size
() - start);
264
}
265
}
buffer_view.hpp
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::block_type
typename storage_type_without_cvrefpointer::value_type block_type
Definition
dynamic_bitset_base.hpp:78
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::data
constexpr block_type * data() noexcept
Definition
dynamic_bitset_base.hpp:728
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::storage_type
buffer_view< T > storage_type
Definition
dynamic_bitset_base.hpp:75
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::compute_block_count
static constexpr size_type compute_block_count(size_type bits_count) noexcept
Definition
dynamic_bitset_base.hpp:913
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::test
constexpr bool test(size_type pos) const
Definition
dynamic_bitset_base.hpp:649
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::size
constexpr size_type size() const noexcept
Definition
dynamic_bitset_base.hpp:591
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::size_type
typename storage_type_without_cvrefpointer::size_type size_type
Definition
dynamic_bitset_base.hpp:83
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::dynamic_bitset_base
constexpr dynamic_bitset_base(storage_type buffer, size_type size)
Definition
dynamic_bitset_base.hpp:877
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::null_count
constexpr size_type null_count() const noexcept
Definition
dynamic_bitset_base.hpp:626
sparrow::dynamic_bitset_base< buffer_view< T >, tracking_null_count<> >::offset
constexpr size_type offset() const noexcept
Definition
dynamic_bitset_base.hpp:612
sparrow::dynamic_bitset_view::dynamic_bitset_view
constexpr dynamic_bitset_view(block_type *p, size_type n, size_type offset, size_type null_count)
Constructs a bitset view from external memory with null count and offset.
Definition
dynamic_bitset_view.hpp:215
sparrow::dynamic_bitset_view::dynamic_bitset_view
constexpr dynamic_bitset_view(block_type *p, size_type n)
Constructs a bitset view from external memory.
Definition
dynamic_bitset_view.hpp:203
sparrow::dynamic_bitset_view< const uint8_t >::storage_type
typename base_type::storage_type storage_type
Definition
dynamic_bitset_view.hpp:71
sparrow::dynamic_bitset_view::dynamic_bitset_view
constexpr dynamic_bitset_view(block_type *p, size_type n, size_type offset)
Constructs a bitset view from external memory with null count tracking.
Definition
dynamic_bitset_view.hpp:209
sparrow::dynamic_bitset_view< const uint8_t >::base_type
dynamic_bitset_base< buffer_view< T >, tracking_null_count<> > base_type
Definition
dynamic_bitset_view.hpp:69
sparrow::dynamic_bitset_view::dynamic_bitset_view
constexpr dynamic_bitset_view(dynamic_bitset_view &&) noexcept=default
sparrow::dynamic_bitset_view< const uint8_t >::size_type
typename base_type::size_type size_type
Definition
dynamic_bitset_view.hpp:73
sparrow::dynamic_bitset_view< const uint8_t >::slice_view
constexpr dynamic_bitset_view slice_view(size_type start, size_type length) const
sparrow::dynamic_bitset_view::dynamic_bitset_view
constexpr dynamic_bitset_view(const dynamic_bitset_view &)=default
sparrow::dynamic_bitset_view< const uint8_t >::block_type
typename base_type::block_type block_type
Definition
dynamic_bitset_view.hpp:72
sparrow::dynamic_bitset_view::~dynamic_bitset_view
constexpr ~dynamic_bitset_view()=default
sparrow::null_count_policy
Concept that checks if a type is a valid null count policy.
Definition
null_count_policy.hpp:233
dynamic_bitset_base.hpp
sparrow
Definition
array.hpp:21
std
Extensions to the C++ standard library.
Definition
float16_t.hpp:1916
sparrow
buffer
dynamic_bitset
dynamic_bitset_view.hpp
Generated by
1.17.0