1
1
/* VecMem project, part of the ACTS project (R&D line)
2
2
*
3
- * (c) 2023 CERN for the benefit of the ACTS project
3
+ * (c) 2023-2025 CERN for the benefit of the ACTS project
4
4
*
5
5
* Mozilla Public License Version 2.0
6
6
*/
@@ -31,96 +31,109 @@ template <typename TYPE>
31
31
struct buffer_alloc ;
32
32
33
33
template <typename TYPE>
34
- struct buffer_alloc <type::scalar<TYPE> > {
34
+ struct buffer_alloc <type::scalar<TYPE>> {
35
35
// / The number of @c TYPE elements to allocate for the payload
36
- template <typename SIZE_TYPE = std::size_t >
37
- VECMEM_HOST static std::size_t payload_size (const std::vector<SIZE_TYPE>&) {
36
+ template <typename SIZE_TYPE = std::size_t ,
37
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
38
+ VECMEM_HOST static std::size_t payload_size (
39
+ const std::vector<SIZE_TYPE, SIZE_ALLOC>&) {
38
40
return 1u ;
39
41
}
40
42
// / The number of "layout meta-objects" to allocate for the payload
41
- template <typename SIZE_TYPE = std::size_t >
42
- VECMEM_HOST static std::size_t layout_size (const std::vector<SIZE_TYPE>&) {
43
+ template <typename SIZE_TYPE = std::size_t ,
44
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
45
+ VECMEM_HOST static std::size_t layout_size (
46
+ const std::vector<SIZE_TYPE, SIZE_ALLOC>&) {
43
47
return 0u ;
44
48
}
45
49
// / Construct a view for a scalar variable.
46
- template <typename SIZE_TYPE = std::size_t >
47
- VECMEM_HOST static typename view_type<type::scalar<TYPE> >::type make_view (
48
- const std::vector<SIZE_TYPE>&, unsigned int *,
49
- typename view_type<type::scalar<TYPE> >::layout_ptr,
50
- typename view_type<type::scalar<TYPE> >::layout_ptr,
51
- typename view_type<type::scalar<TYPE> >::payload_ptr ptr) {
50
+ template <typename SIZE_TYPE = std::size_t ,
51
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
52
+ VECMEM_HOST static typename view_type<type::scalar<TYPE>>::type make_view (
53
+ const std::vector<SIZE_TYPE, SIZE_ALLOC>&, unsigned int *,
54
+ typename view_type<type::scalar<TYPE>>::layout_ptr,
55
+ typename view_type<type::scalar<TYPE>>::layout_ptr,
56
+ typename view_type<type::scalar<TYPE>>::payload_ptr ptr) {
52
57
return ptr;
53
58
}
54
59
}; // struct buffer_alloc
55
60
56
61
template <typename TYPE>
57
- struct buffer_alloc <type::vector<TYPE> > {
62
+ struct buffer_alloc <type::vector<TYPE>> {
58
63
// / The number of @c TYPE elements to allocate for the payload
59
- template <typename SIZE_TYPE = std::size_t >
64
+ template <typename SIZE_TYPE = std::size_t ,
65
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
60
66
VECMEM_HOST static std::size_t payload_size (
61
- const std::vector<SIZE_TYPE>& sizes) {
67
+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes) {
62
68
return sizes.size ();
63
69
}
64
70
// / The number of "layout meta-objects" to allocate for the payload
65
- template <typename SIZE_TYPE = std::size_t >
66
- VECMEM_HOST static std::size_t layout_size (const std::vector<SIZE_TYPE>&) {
71
+ template <typename SIZE_TYPE = std::size_t ,
72
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
73
+ VECMEM_HOST static std::size_t layout_size (
74
+ const std::vector<SIZE_TYPE, SIZE_ALLOC>&) {
67
75
return 0u ;
68
76
}
69
77
// / Construct a view for a vector variable.
70
- template <typename SIZE_TYPE = std::size_t >
71
- VECMEM_HOST static typename view_type<type::vector<TYPE> >::type make_view (
72
- const std::vector<SIZE_TYPE>& capacity, unsigned int * size,
73
- typename view_type<type::vector<TYPE> >::layout_ptr,
74
- typename view_type<type::vector<TYPE> >::layout_ptr,
75
- typename view_type<type::vector<TYPE> >::payload_ptr ptr) {
78
+ template <typename SIZE_TYPE = std::size_t ,
79
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
80
+ VECMEM_HOST static typename view_type<type::vector<TYPE>>::type make_view (
81
+ const std::vector<SIZE_TYPE, SIZE_ALLOC>& capacity, unsigned int * size,
82
+ typename view_type<type::vector<TYPE>>::layout_ptr,
83
+ typename view_type<type::vector<TYPE>>::layout_ptr,
84
+ typename view_type<type::vector<TYPE>>::payload_ptr ptr) {
76
85
return {static_cast <
77
- typename view_type<type::vector<TYPE> >::type::size_type>(
86
+ typename view_type<type::vector<TYPE>>::type::size_type>(
78
87
capacity.size ()),
79
88
size, ptr};
80
89
}
81
90
}; // struct buffer_alloc
82
91
83
92
template <typename TYPE>
84
- struct buffer_alloc <type::jagged_vector<TYPE> > {
93
+ struct buffer_alloc <type::jagged_vector<TYPE>> {
85
94
// / The number of @c TYPE elements to allocate for the payload
86
- template <typename SIZE_TYPE = std::size_t >
95
+ template <typename SIZE_TYPE = std::size_t ,
96
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
87
97
VECMEM_HOST static std::size_t payload_size (
88
- const std::vector<SIZE_TYPE>& sizes) {
98
+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes) {
89
99
return std::accumulate (sizes.begin (), sizes.end (),
90
100
static_cast <std::size_t >(0 ));
91
101
}
92
102
// / The number of "layout meta-objects" to allocate for the payload
93
- template <typename SIZE_TYPE = std::size_t >
103
+ template <typename SIZE_TYPE = std::size_t ,
104
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
94
105
VECMEM_HOST static std::size_t layout_size (
95
- const std::vector<SIZE_TYPE>& sizes) {
106
+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes) {
96
107
return sizes.size ();
97
108
}
98
109
// / Construct a view for a jagged vector variable.
99
- template <typename SIZE_TYPE = std::size_t >
100
- VECMEM_HOST static typename view_type<type::jagged_vector<TYPE> >::type
110
+ template <typename SIZE_TYPE = std::size_t ,
111
+ typename SIZE_ALLOC = std::allocator<SIZE_TYPE>>
112
+ VECMEM_HOST static typename view_type<type::jagged_vector<TYPE>>::type
101
113
make_view (
102
- const std::vector<SIZE_TYPE>& capacities, unsigned int * sizes,
103
- typename view_type<type::jagged_vector<TYPE> >::layout_ptr layout,
104
- typename view_type<type::jagged_vector<TYPE> >::layout_ptr host_layout,
105
- typename view_type<type::jagged_vector<TYPE> >::payload_ptr ptr) {
114
+ const std::vector<SIZE_TYPE, SIZE_ALLOC>& capacities,
115
+ unsigned int * sizes,
116
+ typename view_type<type::jagged_vector<TYPE>>::layout_ptr layout,
117
+ typename view_type<type::jagged_vector<TYPE>>::layout_ptr host_layout,
118
+ typename view_type<type::jagged_vector<TYPE>>::payload_ptr ptr) {
106
119
107
120
// Set up the "layout objects" for use by the view.
108
- typename view_type<type::jagged_vector<TYPE> >::layout_ptr used_layout =
121
+ typename view_type<type::jagged_vector<TYPE>>::layout_ptr used_layout =
109
122
(host_layout != nullptr ? host_layout : layout);
110
123
std::ptrdiff_t ptrdiff = 0 ;
111
124
for (std::size_t i = 0 ; i < capacities.size (); ++i) {
112
125
new (used_layout + i)
113
- typename view_type<type::jagged_vector<TYPE> >::layout_type (
126
+ typename view_type<type::jagged_vector<TYPE>>::layout_type (
114
127
static_cast <typename view_type<
115
- type::jagged_vector<TYPE> >::layout_type::size_type>(
128
+ type::jagged_vector<TYPE>>::layout_type::size_type>(
116
129
capacities[i]),
117
130
(sizes != nullptr ? &(sizes[i]) : nullptr ), ptr + ptrdiff);
118
131
ptrdiff += capacities[i];
119
132
}
120
133
121
134
// Create the jagged vector view.
122
135
return {static_cast <
123
- typename view_type<type::vector<TYPE> >::type::size_type>(
136
+ typename view_type<type::vector<TYPE>>::type::size_type>(
124
137
capacities.size ()),
125
138
layout, host_layout};
126
139
}
@@ -129,9 +142,10 @@ struct buffer_alloc<type::jagged_vector<TYPE> > {
129
142
// / @}
130
143
131
144
// / Function constructing fixed size view objects for @c vecmem::edm::buffer
132
- template <typename SIZE_TYPE, typename ... TYPES, std::size_t ... INDICES>
145
+ template <typename SIZE_TYPE, typename SIZE_ALLOC, typename ... TYPES,
146
+ std::size_t ... INDICES>
133
147
VECMEM_HOST auto make_buffer_views (
134
- const std::vector<SIZE_TYPE>& sizes,
148
+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes,
135
149
const std::tuple<typename view_type<TYPES>::layout_ptr...>& layouts,
136
150
const std::tuple<typename view_type<TYPES>::layout_ptr...>& host_layouts,
137
151
const std::tuple<typename view_type<TYPES>::payload_ptr...>& payloads,
@@ -143,9 +157,10 @@ VECMEM_HOST auto make_buffer_views(
143
157
}
144
158
145
159
// / Function constructing resizable view objects for @c vecmem::edm::buffer
146
- template <typename SIZE_TYPE, typename ... TYPES, std::size_t ... INDICES>
160
+ template <typename SIZE_TYPE, typename SIZE_ALLOC, typename ... TYPES,
161
+ std::size_t ... INDICES>
147
162
VECMEM_HOST auto make_buffer_views (
148
- const std::vector<SIZE_TYPE>& capacities,
163
+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& capacities,
149
164
const std::tuple<typename view_type<TYPES>::size_ptr...>& sizes,
150
165
const std::tuple<typename view_type<TYPES>::layout_ptr...>& layouts,
151
166
const std::tuple<typename view_type<TYPES>::layout_ptr...>& host_layouts,
@@ -212,13 +227,13 @@ VECMEM_HOST constexpr void* find_last_pointer(
212
227
213
228
// / Function creating a view for the layout of a buffer.
214
229
template <typename ... TYPES>
215
- VECMEM_HOST constexpr typename view<schema<TYPES...> >::memory_view_type
230
+ VECMEM_HOST constexpr typename view<schema<TYPES...>>::memory_view_type
216
231
find_layout_view (
217
232
const std::tuple<typename view_type<TYPES>::layout_ptr...>& layouts,
218
233
const std::array<std::size_t , sizeof ...(TYPES)>& sizes) {
219
234
220
235
// The result type.
221
- using result_type = typename view<schema<TYPES...> >::memory_view_type;
236
+ using result_type = typename view<schema<TYPES...>>::memory_view_type;
222
237
223
238
// Find the first non-zero pointer.
224
239
typename result_type::pointer ptr =
@@ -235,13 +250,13 @@ find_layout_view(
235
250
236
251
// / Function creating a view of the payload of a buffer
237
252
template <typename ... TYPES>
238
- VECMEM_HOST constexpr typename view<schema<TYPES...> >::memory_view_type
253
+ VECMEM_HOST constexpr typename view<schema<TYPES...>>::memory_view_type
239
254
find_payload_view (
240
255
const std::tuple<typename view_type<TYPES>::payload_ptr...>& payloads,
241
256
const std::array<std::size_t , sizeof ...(TYPES)>& sizes) {
242
257
243
258
// The result type.
244
- using result_type = typename view<schema<TYPES...> >::memory_view_type;
259
+ using result_type = typename view<schema<TYPES...>>::memory_view_type;
245
260
246
261
// Find the first non-zero pointer.
247
262
typename result_type::pointer ptr =
0 commit comments