10#include "vecmem/containers/data/vector_view.hpp"
11#include "vecmem/containers/details/reverse_iterator.hpp"
12#include "vecmem/memory/device_atomic_ref.hpp"
13#include "vecmem/utils/type_traits.hpp"
14#include "vecmem/utils/types.hpp"
24template <
typename T,
template <
typename>
class I>
35template <
typename TYPE>
39 template <
typename T,
template <
typename>
class I>
55 typename std::conditional<std::is_const<TYPE>::value,
const size_type*,
59 using reference = std::add_lvalue_reference_t<value_type>;
62 std::add_lvalue_reference_t<std::add_const_t<value_type>>;
64 using pointer = std::add_pointer_t<value_type>;
81 VECMEM_HOST_AND_DEVICE
87 std::enable_if_t<std::is_convertible<OTHERTYPE, TYPE>::value,
97 std::enable_if_t<std::is_convertible<OTHERTYPE, TYPE>::value,
106 VECMEM_HOST_AND_DEVICE
109 VECMEM_HOST_AND_DEVICE
113 VECMEM_HOST_AND_DEVICE
116 VECMEM_HOST_AND_DEVICE
120 VECMEM_HOST_AND_DEVICE
123 VECMEM_HOST_AND_DEVICE
127 VECMEM_HOST_AND_DEVICE
130 VECMEM_HOST_AND_DEVICE
134 VECMEM_HOST_AND_DEVICE
137 VECMEM_HOST_AND_DEVICE
146 VECMEM_HOST_AND_DEVICE
151 std::enable_if_t<details::is_iterator_of<InputIt, value_type>::value,
156 assert(m_size !=
nullptr);
166 construct(
asize.fetch_add(1), *
itr);
171 template <
typename...
Args>
174 VECMEM_HOST_AND_DEVICE
208 VECMEM_HOST_AND_DEVICE
212 VECMEM_HOST_AND_DEVICE
215 VECMEM_HOST_AND_DEVICE
219 VECMEM_HOST_AND_DEVICE
239 VECMEM_HOST_AND_DEVICE
243 VECMEM_HOST_AND_DEVICE
247 VECMEM_HOST_AND_DEVICE
251 VECMEM_HOST_AND_DEVICE
254 VECMEM_HOST_AND_DEVICE
257 VECMEM_HOST_AND_DEVICE
261 VECMEM_HOST_AND_DEVICE
264 VECMEM_HOST_AND_DEVICE
267 VECMEM_HOST_AND_DEVICE
271 VECMEM_HOST_AND_DEVICE
275 VECMEM_HOST_AND_DEVICE
279 VECMEM_HOST_AND_DEVICE
288 VECMEM_HOST_AND_DEVICE
291 VECMEM_HOST_AND_DEVICE
294 VECMEM_HOST_AND_DEVICE
297 VECMEM_HOST_AND_DEVICE
304 VECMEM_HOST_AND_DEVICE
307 VECMEM_HOST_AND_DEVICE
322#include "vecmem/containers/impl/device_vector.ipp"
Class holding data about a 1 dimensional vector/array.
Definition vector_view.hpp:38
Type mimicking std::reverse_iterator.
Definition reverse_iterator.hpp:25
Class mimicking an std::vector in "device code".
Definition device_vector.hpp:36
VECMEM_HOST_AND_DEVICE size_type bulk_append(size_type n)
Default-construct a given number of elements at the end of the vector.
Definition device_vector.ipp:236
VECMEM_HOST_AND_DEVICE reference back()
Return the last element of the vector (non-const)
Definition device_vector.ipp:142
VECMEM_HOST_AND_DEVICE void assign(InputIt other_begin, InputIt other_end)
Assign new values to the vector (not thread-safe)
Definition device_vector.hpp:153
VECMEM_HOST_AND_DEVICE void clear()
Clear the vector (not thread-safe)
Definition device_vector.ipp:333
VECMEM_HOST_AND_DEVICE iterator begin()
Return a forward iterator pointing at the beginning of the vector.
Definition device_vector.ipp:418
VECMEM_HOST_AND_DEVICE reference operator[](size_type pos)
Return a specific element of the vector (non-const)
Definition device_vector.ipp:105
VECMEM_HOST_AND_DEVICE void resize_implicit_unsafe(size_type new_size)
Resize a vector in constant time, unsafely deallocating non-implicit lifetime types.
Definition device_vector.ipp:407
VECMEM_HOST_AND_DEVICE pointer data()
Access the underlying memory array (non-const)
Definition device_vector.ipp:163
std::add_pointer_t< value_type > pointer
Value pointer type.
Definition device_vector.hpp:64
device_vector(const device_vector &parent)=default
Copy constructor.
VECMEM_HOST_AND_DEVICE size_type bulk_append_implicit_unsafe(size_type n)
Reserve a fixed number of slots in the array in a way that technically is ill-formed.
Definition device_vector.ipp:303
VECMEM_HOST_AND_DEVICE reference emplace_back(Args &&... args)
Add a new element at the end of the vector (thread-safe)
VECMEM_HOST_AND_DEVICE device_vector & operator=(const device_vector &rhs)
Copy assignment operator from an identical type.
Definition device_vector.ipp:48
std::add_pointer_t< std::add_const_t< value_type > > const_pointer
Constant value pointer type.
Definition device_vector.hpp:66
VECMEM_HOST_AND_DEVICE size_type capacity() const
Return the current (fixed) capacity of the vector.
Definition device_vector.ipp:525
TYPE value_type
Type of the array elements.
Definition device_vector.hpp:47
std::ptrdiff_t difference_type
Pointer difference type.
Definition device_vector.hpp:51
VECMEM_HOST_AND_DEVICE const_reverse_iterator crend() const
Return a constant reverse iterator pointing at the beginning of the vector.
Definition device_vector.ipp:490
VECMEM_HOST_AND_DEVICE size_type size() const
Return the number of elements in the vector.
Definition device_vector.ipp:503
const_pointer const_iterator
Constant forward iterator type.
Definition device_vector.hpp:71
VECMEM_HOST_AND_DEVICE bool empty() const
Check whether the vector is empty.
Definition device_vector.ipp:497
VECMEM_HOST_AND_DEVICE void assign(size_type count, const_reference value)
Assign new values to the vector (not thread-safe)
Definition device_vector.ipp:175
VECMEM_HOST_AND_DEVICE reference front()
Return the first element of the vector (non-const)
Definition device_vector.ipp:121
VECMEM_HOST_AND_DEVICE device_vector & operator=(const device_vector< OTHERTYPE > &rhs)
Copy assignment operator from a different type.
VECMEM_HOST_AND_DEVICE void resize(size_type new_size)
Resize the vector (not thread-safe)
Definition device_vector.ipp:350
VECMEM_HOST_AND_DEVICE const_reverse_iterator crbegin() const
Return a constant reverse iterator pointing at the end of the vector.
Definition device_vector.ipp:470
VECMEM_HOST_AND_DEVICE size_type push_back(const_reference value)
Add a new element at the end of the vector (thread-safe)
Definition device_vector.ipp:216
VECMEM_HOST_AND_DEVICE size_type bulk_append_implicit(size_type n)
Reserve a fixed number of slots in the array in a standards-conformant way.
Definition device_vector.ipp:279
unsigned int size_type
Size type for the array.
Definition device_vector.hpp:49
VECMEM_HOST_AND_DEVICE iterator end()
Return a forward iterator pointing at the end of the vector.
Definition device_vector.ipp:438
pointer iterator
Forward iterator type.
Definition device_vector.hpp:69
std::add_lvalue_reference_t< value_type > reference
Value reference type.
Definition device_vector.hpp:59
typename std::conditional< std::is_const< TYPE >::value, const size_type *, size_type * >::type size_pointer
Pointer type to the size of the array.
Definition device_vector.hpp:56
VECMEM_HOST_AND_DEVICE size_type max_size() const
Return the maximum (fixed) number of elements in the vector.
Definition device_vector.ipp:519
std::add_lvalue_reference_t< std::add_const_t< value_type > > const_reference
Constant value reference type.
Definition device_vector.hpp:62
VECMEM_HOST_AND_DEVICE const_iterator cend() const
Return a constant forward iterator pointing at the end of the vector.
Definition device_vector.ipp:450
VECMEM_HOST_AND_DEVICE reference at(size_type pos)
Return a specific element of the vector in a "safe way" (non-const)
Definition device_vector.ipp:83
VECMEM_HOST_AND_DEVICE const_iterator cbegin() const
Return a constant forward iterator pointing at the beginning of the vector.
Definition device_vector.ipp:431
VECMEM_HOST_AND_DEVICE size_type pop_back()
Remove the last element of the vector (not thread-safe)
Definition device_vector.ipp:316
VECMEM_HOST_AND_DEVICE reverse_iterator rend()
Return a reverse iterator pointing at the beginning of the vector.
Definition device_vector.ipp:477
VECMEM_HOST_AND_DEVICE reverse_iterator rbegin()
Return a reverse iterator pointing at the end of the vector.
Definition device_vector.ipp:457
VECMEM_HOST_AND_DEVICE void resize_implicit(size_type new_size)
Resize a vector of implicit lifetime types.
Definition device_vector.ipp:390
Technical base type for device<schema<VARTYPES...>,INTERFACE>
Definition device_vector.hpp:25
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16
std::vector< T, vecmem::polymorphic_allocator< T > > vector
Alias type for vectors with our polymorphic allocator.
Definition vector.hpp:35