vecmem 1.14.0
Loading...
Searching...
No Matches
proxy.hpp
1/* VecMem project, part of the ACTS project (R&D line)
2 *
3 * (c) 2024-2025 CERN for the benefit of the ACTS project
4 *
5 * Mozilla Public License Version 2.0
6 */
7#pragma once
8
9// Local include(s).
10#include "vecmem/edm/details/proxy_traits.hpp"
11#include "vecmem/edm/schema.hpp"
12#include "vecmem/utils/tuple.hpp"
13#include "vecmem/utils/types.hpp"
14
15namespace vecmem {
16namespace edm {
17
19template <typename T, details::proxy_domain PDOMAIN,
20 details::proxy_access PACCESS, details::proxy_type PTYPE>
21class proxy;
22
32template <typename... VARTYPES, details::proxy_domain PDOMAIN,
33 details::proxy_access PACCESS, details::proxy_type PTYPE>
35
36public:
40 static constexpr details::proxy_domain proxy_domain = PDOMAIN;
42 static constexpr details::proxy_access access_type = PACCESS;
44 static constexpr details::proxy_type proxy_type = PTYPE;
47 VARTYPES, proxy_domain, access_type, proxy_type>::type...>;
48
51
58 template <typename PARENT>
59 VECMEM_HOST_AND_DEVICE proxy(PARENT& parent,
60 typename PARENT::size_type index);
61
68 template <typename PARENT>
69 VECMEM_HOST_AND_DEVICE proxy(const PARENT& parent,
70 typename PARENT::size_type index);
71
73 proxy(const proxy&) = default;
74
76 proxy(proxy&&) = default;
77
86 template <typename... OVARTYPES, details::proxy_domain OPDOMAIN,
87 details::proxy_access OPACCESS, details::proxy_type OPTYPE>
88 VECMEM_HOST_AND_DEVICE proxy(
90
98 VECMEM_HOST_AND_DEVICE proxy(
99 typename details::proxy_var_type<VARTYPES, proxy_domain, access_type,
100 proxy_type>::type... data);
101
108 VECMEM_HOST_AND_DEVICE
109 proxy& operator=(const proxy& other);
110
122 template <typename... OVARTYPES, details::proxy_domain OPDOMAIN,
123 details::proxy_access OPACCESS, details::proxy_type OPTYPE>
124 VECMEM_HOST_AND_DEVICE proxy<schema<VARTYPES...>, PDOMAIN, PACCESS, PTYPE>&
125 operator=(
127
129
132
134 template <std::size_t INDEX>
135 VECMEM_HOST_AND_DEVICE
137 VARTYPES...>::return_type
138 get();
140 template <std::size_t INDEX>
141 VECMEM_HOST_AND_DEVICE
143 VARTYPES...>::const_return_type
144 get() const;
145
147
150
152 VECMEM_HOST_AND_DEVICE
153 tuple_type& variables();
155 VECMEM_HOST_AND_DEVICE
156 const tuple_type& variables() const;
157
159
160private:
162 tuple_type m_data;
163
164}; // class proxy
165
166} // namespace edm
167} // namespace vecmem
168
169// Include the implementation.
170#include "vecmem/edm/impl/proxy.ipp"
Technical base type for data<schema<VARTYPES...>>
Definition data.hpp:25
proxy(const proxy &)=default
Default copy constructor.
schema< VARTYPES... > schema_type
The schema describing the host's payload.
Definition proxy.hpp:38
Technical base type for proxy<schema<VARTYPES...>,PDOMAIN,PACCESS,PTYPE>
Definition proxy.hpp:21
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16
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
std::vector< T, vecmem::polymorphic_allocator< T > > vector
Alias type for vectors with our polymorphic allocator.
Definition vector.hpp:35
Proxy types for one element of a type pack.
Definition proxy_traits.hpp:301
Technical base class for the proxy_var_type traits.
Definition proxy_traits.hpp:57
Meta type describing the "schema" of an SoA container.
Definition schema.hpp:46