vecmem 1.28.0
Loading...
Searching...
No Matches
jagged_device_vector_iterator.ipp
1/*
2 * VecMem project, part of the ACTS project (R&D line)
3 *
4 * (c) 2021-2026 CERN for the benefit of the ACTS project
5 *
6 * Mozilla Public License Version 2.0
7 */
8#pragma once
9
10namespace vecmem {
11namespace details {
12
13template <typename TYPE>
15 const data_pointer data)
16 : m_vec(*data) {}
17
18template <typename TYPE>
19VECMEM_HOST_AND_DEVICE auto
24
25template <typename TYPE>
26VECMEM_HOST_AND_DEVICE auto
32
33template <typename TYPE>
34VECMEM_HOST_AND_DEVICE
37
38template <typename TYPE>
39VECMEM_HOST_AND_DEVICE
43
44template <typename TYPE>
45template <typename OTHERTYPE,
46 std::enable_if_t<details::is_same_nc<TYPE, OTHERTYPE>::value, bool> >
47VECMEM_HOST_AND_DEVICE
50 // Just like for vecmem::data::vector_view, this looks more scary than it
51 // is. We convert from a non-const type to a constant one here.
52 : m_ptr{reinterpret_cast<data_pointer>(data)} {}
53
54template <typename TYPE>
55VECMEM_HOST_AND_DEVICE
59
60template <typename TYPE>
61template <typename OTHERTYPE,
62 std::enable_if_t<details::is_same_nc<TYPE, OTHERTYPE>::value, bool> >
63VECMEM_HOST_AND_DEVICE
66 // Just like for the constructor taking a vector_view, this looks more
67 // scary than it is. We convert from a non-const type to a constant one
68 // here.
69 : m_ptr{reinterpret_cast<data_pointer>(parent.m_ptr)} {}
70
71template <typename TYPE>
72VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>&
75
76 // Check if anything needs to be done.
77 if (this == &rhs) {
78 return *this;
79 }
80
81 // Perform the copy.
82 m_ptr = rhs.m_ptr;
83
84 // Return this object.
85 return *this;
86}
87
88template <typename TYPE>
90 const -> reference {
91
92 return reference{*m_ptr};
93}
94
95template <typename TYPE>
96VECMEM_HOST_AND_DEVICE auto
101
102template <typename TYPE>
104 difference_type n) const -> reference {
105
106 return reference{*(*this + n)};
107}
108
109template <typename TYPE>
110VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>&
112
113 ++m_ptr;
114 return *this;
115}
116
117template <typename TYPE>
118VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>
120
122 ++m_ptr;
123 return tmp;
124}
125
126template <typename TYPE>
127VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>&
129
130 --m_ptr;
131 return *this;
132}
133
134template <typename TYPE>
135VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>
137
139 --m_ptr;
140 return tmp;
141}
142
143template <typename TYPE>
144VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>
149
150template <typename TYPE>
151VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>&
153
154 m_ptr += n;
155 return *this;
156}
157
158template <typename TYPE>
159VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>
164
165template <typename TYPE>
166VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator<TYPE>&
168
169 m_ptr -= n;
170 return *this;
171}
172
173template <typename TYPE>
176
177 return (m_ptr == other.m_ptr);
178}
179
180template <typename TYPE>
183
184 return !(*this == other);
185}
186
187} // namespace details
188} // namespace vecmem
An allocator class that wraps a memory resource.
Definition allocator.hpp:37
Class holding data about a 1 dimensional vector/array.
Definition vector_view.hpp:38
Helper class for returning "pointer-like" objects from the iterator.
Definition jagged_device_vector_iterator.hpp:67
VECMEM_HOST_AND_DEVICE pointer(const data_pointer data)
Constructor from a data pointer.
Definition jagged_device_vector_iterator.ipp:14
VECMEM_HOST_AND_DEVICE value_type * operator->()
Return a pointer to a device vector (non-const)
Definition jagged_device_vector_iterator.ipp:20
Custom iterator for vecmem::jagged_device_vector.
Definition jagged_device_vector_iterator.hpp:34
std::add_pointer_t< std::add_const_t< data_type > > data_pointer
Pointer to the data object.
Definition jagged_device_vector_iterator.hpp:47
VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator operator-(difference_type n) const
Increment the underlying iterator by a specific value.
Definition jagged_device_vector_iterator.ipp:160
VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator & operator=(const jagged_device_vector_iterator &rhs)
Copy assignment operator.
Definition jagged_device_vector_iterator.ipp:73
VECMEM_HOST_AND_DEVICE bool operator!=(const jagged_device_vector_iterator &other) const
Check for the inequality of two iterators.
Definition jagged_device_vector_iterator.ipp:181
VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator operator+(difference_type n) const
Decrement the underlying iterator by a specific value.
Definition jagged_device_vector_iterator.ipp:145
VECMEM_HOST_AND_DEVICE reference operator[](difference_type n) const
Return the value at a specific offset.
Definition jagged_device_vector_iterator.ipp:103
std::ptrdiff_t difference_type
(Pointer) Difference type
Definition jagged_device_vector_iterator.hpp:57
VECMEM_HOST_AND_DEVICE reference operator*() const
De-reference the iterator.
Definition jagged_device_vector_iterator.ipp:89
VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator & operator+=(difference_type n)
Decrement the underlying iterator by a specific value.
Definition jagged_device_vector_iterator.ipp:152
VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator & operator--()
Increment the underlying iterator (with '–' as a prefix)
Definition jagged_device_vector_iterator.ipp:128
VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator & operator-=(difference_type n)
Increment the underlying iterator by a specific value.
Definition jagged_device_vector_iterator.ipp:167
VECMEM_HOST_AND_DEVICE jagged_device_vector_iterator & operator++()
Decrement the underlying iterator (with '++' as a prefix)
Definition jagged_device_vector_iterator.ipp:111
VECMEM_HOST_AND_DEVICE bool operator==(const jagged_device_vector_iterator &other) const
Check for the equality of two iterators.
Definition jagged_device_vector_iterator.ipp:174
VECMEM_HOST_AND_DEVICE pointer operator->() const
Use the iterator as a pointer.
Definition jagged_device_vector_iterator.ipp:97
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16