@@ -31,96 +31,109 @@ template <typename TYPE>
3131struct buffer_alloc ;
3232
3333template <typename TYPE>
34- struct buffer_alloc <type::scalar<TYPE> > {
34+ struct buffer_alloc <type::scalar<TYPE>> {
3535 // / 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>&) {
3840 return 1u ;
3941 }
4042 // / 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>&) {
4347 return 0u ;
4448 }
4549 // / 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) {
5257 return ptr;
5358 }
5459}; // struct buffer_alloc
5560
5661template <typename TYPE>
57- struct buffer_alloc <type::vector<TYPE> > {
62+ struct buffer_alloc <type::vector<TYPE>> {
5863 // / 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>>
6066 VECMEM_HOST static std::size_t payload_size (
61- const std::vector<SIZE_TYPE>& sizes) {
67+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes) {
6268 return sizes.size ();
6369 }
6470 // / 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>&) {
6775 return 0u ;
6876 }
6977 // / 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) {
7685 return {static_cast <
77- typename view_type<type::vector<TYPE> >::type::size_type>(
86+ typename view_type<type::vector<TYPE>>::type::size_type>(
7887 capacity.size ()),
7988 size, ptr};
8089 }
8190}; // struct buffer_alloc
8291
8392template <typename TYPE>
84- struct buffer_alloc <type::jagged_vector<TYPE> > {
93+ struct buffer_alloc <type::jagged_vector<TYPE>> {
8594 // / 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>>
8797 VECMEM_HOST static std::size_t payload_size (
88- const std::vector<SIZE_TYPE>& sizes) {
98+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes) {
8999 return std::accumulate (sizes.begin (), sizes.end (),
90100 static_cast <std::size_t >(0 ));
91101 }
92102 // / 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>>
94105 VECMEM_HOST static std::size_t layout_size (
95- const std::vector<SIZE_TYPE>& sizes) {
106+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes) {
96107 return sizes.size ();
97108 }
98109 // / 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
101113 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) {
106119
107120 // 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 =
109122 (host_layout != nullptr ? host_layout : layout);
110123 std::ptrdiff_t ptrdiff = 0 ;
111124 for (std::size_t i = 0 ; i < capacities.size (); ++i) {
112125 new (used_layout + i)
113- typename view_type<type::jagged_vector<TYPE> >::layout_type (
126+ typename view_type<type::jagged_vector<TYPE>>::layout_type (
114127 static_cast <typename view_type<
115- type::jagged_vector<TYPE> >::layout_type::size_type>(
128+ type::jagged_vector<TYPE>>::layout_type::size_type>(
116129 capacities[i]),
117130 (sizes != nullptr ? &(sizes[i]) : nullptr ), ptr + ptrdiff);
118131 ptrdiff += capacities[i];
119132 }
120133
121134 // Create the jagged vector view.
122135 return {static_cast <
123- typename view_type<type::vector<TYPE> >::type::size_type>(
136+ typename view_type<type::vector<TYPE>>::type::size_type>(
124137 capacities.size ()),
125138 layout, host_layout};
126139 }
@@ -129,9 +142,10 @@ struct buffer_alloc<type::jagged_vector<TYPE> > {
129142// / @}
130143
131144// / 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>
133147VECMEM_HOST auto make_buffer_views (
134- const std::vector<SIZE_TYPE>& sizes,
148+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& sizes,
135149 const std::tuple<typename view_type<TYPES>::layout_ptr...>& layouts,
136150 const std::tuple<typename view_type<TYPES>::layout_ptr...>& host_layouts,
137151 const std::tuple<typename view_type<TYPES>::payload_ptr...>& payloads,
@@ -143,9 +157,10 @@ VECMEM_HOST auto make_buffer_views(
143157}
144158
145159// / 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>
147162VECMEM_HOST auto make_buffer_views (
148- const std::vector<SIZE_TYPE>& capacities,
163+ const std::vector<SIZE_TYPE, SIZE_ALLOC >& capacities,
149164 const std::tuple<typename view_type<TYPES>::size_ptr...>& sizes,
150165 const std::tuple<typename view_type<TYPES>::layout_ptr...>& layouts,
151166 const std::tuple<typename view_type<TYPES>::layout_ptr...>& host_layouts,
@@ -212,13 +227,13 @@ VECMEM_HOST constexpr void* find_last_pointer(
212227
213228// / Function creating a view for the layout of a buffer.
214229template <typename ... TYPES>
215- VECMEM_HOST constexpr typename view<schema<TYPES...> >::memory_view_type
230+ VECMEM_HOST constexpr typename view<schema<TYPES...>>::memory_view_type
216231find_layout_view (
217232 const std::tuple<typename view_type<TYPES>::layout_ptr...>& layouts,
218233 const std::array<std::size_t , sizeof ...(TYPES)>& sizes) {
219234
220235 // 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;
222237
223238 // Find the first non-zero pointer.
224239 auto ptr = static_cast <typename result_type::pointer>(
@@ -233,13 +248,13 @@ find_layout_view(
233248
234249// / Function creating a view of the payload of a buffer
235250template <typename ... TYPES>
236- VECMEM_HOST constexpr typename view<schema<TYPES...> >::memory_view_type
251+ VECMEM_HOST constexpr typename view<schema<TYPES...>>::memory_view_type
237252find_payload_view (
238253 const std::tuple<typename view_type<TYPES>::payload_ptr...>& payloads,
239254 const std::array<std::size_t , sizeof ...(TYPES)>& sizes) {
240255
241256 // The result type.
242- using result_type = typename view<schema<TYPES...> >::memory_view_type;
257+ using result_type = typename view<schema<TYPES...>>::memory_view_type;
243258
244259 // Find the first non-zero pointer.
245260 auto ptr = static_cast <typename result_type::pointer>(
0 commit comments