sparrow
2.4.0
C++20 idiomatic APIs for the Apache Arrow Columnar Format
Toggle main menu visibility
Loading...
Searching...
No Matches
layout_iterator.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/utils/iterator.hpp
"
18
19
namespace
sparrow
20
{
24
template
<
class
T>
25
concept
iterator_types
=
requires
{
26
typename
T::value_type;
27
typename
T::reference;
28
typename
T::value_iterator;
29
typename
T::bitmap_iterator;
30
typename
T::iterator_tag;
31
};
32
39
template
<iterator_types Iterator_types>
40
class
layout_iterator
:
public
iterator_base
<
41
layout_iterator<Iterator_types>,
42
typename Iterator_types::value_type,
43
typename Iterator_types::iterator_tag,
44
typename Iterator_types::reference>
45
{
46
public
:
47
48
using
self_type
=
layout_iterator<Iterator_types>
;
49
using
base_type
=
iterator_base
<
50
self_type
,
51
typename
Iterator_types::value_type,
52
typename
Iterator_types::iterator_tag,
53
typename
Iterator_types::reference>;
54
55
using
reference
=
typename
base_type::reference;
56
using
difference_type
=
typename
base_type::difference_type;
57
58
using
value_iterator
= Iterator_types::value_iterator;
59
60
using
bitmap_iterator
= Iterator_types::bitmap_iterator;
61
62
constexpr
layout_iterator
() noexcept = default;
63
constexpr
layout_iterator
(
value_iterator
value_iter,
bitmap_iterator
bitmap_iter);
64
65
private:
66
67
[[nodiscard]] constexpr
reference
dereference() const;
68
[[nodiscard]] constexpr
reference
dereference();
69
constexpr
void
increment();
70
constexpr
void
decrement();
71
constexpr
void
advance(
difference_type
n);
72
[[nodiscard]] constexpr
difference_type
distance_to(const
self_type
& rhs) const;
73
[[nodiscard]] constexpr
bool
equal(const
self_type
& rhs) const;
74
[[nodiscard]] constexpr
bool
less_than(const
self_type
& rhs) const;
75
76
value_iterator
m_value_iter;
77
bitmap_iterator
m_bitmap_iter;
78
79
friend class
iterator_access
;
80
};
81
82
/**********************************
83
* layout_iterator implementation *
84
**********************************/
85
86
template <
iterator_types
Iterator_types>
87
constexpr
layout_iterator
<Iterator_types>::
layout_iterator
(
value_iterator
value_iter,
bitmap_iterator
bitmap_iter)
88
: m_value_iter(value_iter)
89
, m_bitmap_iter(bitmap_iter)
90
{
91
}
92
93
template
<iterator_types Iterator_types>
94
constexpr
auto
layout_iterator<Iterator_types>::dereference() const ->
reference
95
{
96
return
reference
(*m_value_iter, *m_bitmap_iter);
97
}
98
99
template
<iterator_types Iterator_types>
100
constexpr
auto
layout_iterator<Iterator_types>::dereference() ->
reference
101
{
102
return
reference
(*m_value_iter, *m_bitmap_iter);
103
}
104
105
template
<iterator_types Iterator_types>
106
constexpr
void
layout_iterator<Iterator_types>::increment
()
107
{
108
++m_value_iter;
109
++m_bitmap_iter;
110
}
111
112
template
<iterator_types Iterator_types>
113
constexpr
void
layout_iterator<Iterator_types>::decrement
()
114
{
115
--m_value_iter;
116
--m_bitmap_iter;
117
}
118
119
template
<iterator_types Iterator_types>
120
constexpr
void
layout_iterator<Iterator_types>::advance
(
difference_type
n)
121
{
122
m_value_iter += n;
123
m_bitmap_iter += n;
124
}
125
126
template
<iterator_types Iterator_types>
127
constexpr
auto
layout_iterator<Iterator_types>::distance_to
(
const
self_type
& rhs)
const
->
difference_type
128
{
129
return
rhs.m_value_iter - m_value_iter;
130
}
131
132
template
<iterator_types Iterator_types>
133
constexpr
bool
layout_iterator<Iterator_types>::equal
(
const
self_type
& rhs)
const
134
{
135
return
m_value_iter == rhs.m_value_iter && m_bitmap_iter == rhs.m_bitmap_iter;
136
}
137
138
template
<iterator_types Iterator_types>
139
constexpr
bool
layout_iterator<Iterator_types>::less_than
(
const
self_type
& rhs)
const
140
{
141
return
m_value_iter < rhs.m_value_iter && m_bitmap_iter < rhs.m_bitmap_iter;
142
}
143
}
sparrow::iterator_base
Definition
iterator.hpp:381
sparrow::layout_iterator< iterator_types >::difference_type
typename base_type::difference_type difference_type
Definition
layout_iterator.hpp:56
sparrow::layout_iterator< iterator_types >::self_type
layout_iterator< Iterator_types > self_type
Definition
layout_iterator.hpp:48
sparrow::layout_iterator::layout_iterator
constexpr layout_iterator() noexcept=default
sparrow::layout_iterator< iterator_types >::bitmap_iterator
Iterator_types::bitmap_iterator bitmap_iterator
Definition
layout_iterator.hpp:60
sparrow::layout_iterator< iterator_types >::reference
typename base_type::reference reference
Definition
layout_iterator.hpp:55
sparrow::layout_iterator< iterator_types >::value_iterator
Iterator_types::value_iterator value_iterator
Definition
layout_iterator.hpp:58
sparrow::layout_iterator< iterator_types >::base_type
iterator_base< self_type, typename Iterator_types::value_type, typename Iterator_types::iterator_tag, typename Iterator_types::reference > base_type
Definition
layout_iterator.hpp:49
sparrow::layout_iterator< iterator_types >::iterator_access
friend class iterator_access
Definition
layout_iterator.hpp:79
sparrow::iterator_types
Concept for iterator types.
Definition
layout_iterator.hpp:25
iterator.hpp
sparrow
Definition
array.hpp:21
sparrow
layout
layout_iterator.hpp
Generated by
1.17.0