12#include "vecmem/utils/types.hpp"
21template <
typename T, std::
size_t N>
29 throw std::out_of_range(
"Index greater than size of static array.");
35template <
typename T, std::
size_t N>
43 throw std::out_of_range(
"Index greater than size of static array.");
49template <
typename T, std::
size_t N>
51 size_type i) -> reference {
59template <
typename T, std::
size_t N>
61 size_type i)
const -> const_reference {
68template <
typename T, std::
size_t N>
69template <std::size_t I,
70 std::enable_if_t<I<N, bool> > VECMEM_HOST_AND_DEVICE
constexpr auto
76template <
typename T, std::
size_t N>
77template <std::size_t I,
78 std::enable_if_t<I<N, bool> > VECMEM_HOST_AND_DEVICE
constexpr auto
84template <
typename T, std::
size_t N>
93template <
typename T, std::
size_t N>
102template <
typename T, std::
size_t N>
108 return m_array[N - 1];
111template <
typename T, std::
size_t N>
117 return m_array[N - 1];
120template <
typename T, std::
size_t N>
129template <
typename T, std::
size_t N>
138template <
typename T, std::
size_t N>
144template <
typename T, std::
size_t N>
151template <
typename T, std::
size_t N>
158template <
typename T, std::
size_t N>
164template <
typename T, std::
size_t N>
171template <
typename T, std::
size_t N>
178template <
typename T, std::
size_t N>
180 -> reverse_iterator {
182 return reverse_iterator(end());
185template <
typename T, std::
size_t N>
187 -> const_reverse_iterator {
189 return const_reverse_iterator(end());
192template <
typename T, std::
size_t N>
194 -> const_reverse_iterator {
199template <
typename T, std::
size_t N>
201 -> reverse_iterator {
203 return reverse_iterator(begin());
206template <
typename T, std::
size_t N>
208 -> const_reverse_iterator {
210 return const_reverse_iterator(begin());
213template <
typename T, std::
size_t N>
215 -> const_reverse_iterator {
220template <
typename T, std::
size_t N>
226template <
typename T, std::
size_t N>
233template <
typename T, std::
size_t N>
240template <
typename T, std::
size_t N>
243 for (std::size_t i = 0; i < N; ++i) {
248template <
typename T, std::
size_t N>
256 if (lhs[i] != rhs[i]) {
268template <
typename T, std::
size_t N>
277 if (lhs[i] != rhs[i]) {
288template <std::size_t I,
class T, std::size_t N,
289 std::enable_if_t<I<N, bool> > VECMEM_HOST_AND_DEVICE
constexpr T&
get(
290 static_array<T, N>& a)
noexcept {
292 return a.template
get<I>();
296 std::size_t I,
class T, std::size_t N,
297 std::enable_if_t<I<N, bool> > VECMEM_HOST_AND_DEVICE
constexpr const T&
get(
300 return a.template
get<I>();
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16
VECMEM_HOST_AND_DEVICE bool operator!=(const static_array< T, N > &lhs, const static_array< T, N > &rhs)
Non-equality check on two arrays.
Definition static_array.ipp:269
VECMEM_HOST_AND_DEVICE bool operator==(const static_array< T, N > &lhs, const static_array< T, N > &rhs)
Equality check on two arrays.
Definition static_array.ipp:249
VECMEM_HOST_AND_DEVICE constexpr const auto & get(const tuple< Ts... > &t) noexcept
Get a constant element out of a tuple.
Definition tuple.ipp:58
Simple statically-sized array-like class designed for use in device code.
Definition static_array.hpp:33
VECMEM_HOST constexpr reference at(size_type i)
Bounds-checked accessor method.
std::size_t size_type
Size type for the array.
Definition static_array.hpp:41
VECMEM_HOST_AND_DEVICE constexpr reference operator[](size_type i)
Accessor method.