vecmem 1.18.0
Loading...
Searching...
No Matches
jagged_vector_view.ipp
1/*
2 * VecMem project, part of the ACTS project (R&D line)
3 *
4 * (c) 2021-2025 CERN for the benefit of the ACTS project
5 *
6 * Mozilla Public License Version 2.0
7 */
8
9#pragma once
10
11// System include(s).
12#include <algorithm>
13
14namespace vecmem {
15namespace data {
16
17template <typename T>
19 size_type size, pointer ptr, pointer host_ptr)
20 : m_size(size),
21 m_ptr(ptr),
22 m_host_ptr(host_ptr != nullptr ? host_ptr : ptr) {}
23
24template <typename T>
25template <typename OTHERTYPE,
26 std::enable_if_t<details::is_same_nc<T, OTHERTYPE>::value, bool> >
29 : m_size(parent.size()),
30 // This looks scarier than it really is. We "just" reinterpret a
31 // vecmem::data::vector_view<T> pointer to be seen as
32 // vecmem::data::vector_view<const T> instead.
35 parent.ptr()))),
36 m_host_ptr(reinterpret_cast<pointer>(
38 parent.host_ptr()))) {}
39
40template <typename T>
41template <typename OTHERTYPE,
42 std::enable_if_t<details::is_same_nc<T, OTHERTYPE>::value, bool> >
45
46 // Self-assignment is not dangerous for this type. But putting in
47 // extra checks into the code would not be great.
48 m_size = rhs.size();
49 m_ptr = reinterpret_cast<pointer>(
51 m_host_ptr = reinterpret_cast<pointer>(
53 rhs.host_ptr()));
54
55 // Return this (updated) object.
56 return *this;
57}
58
59template <typename T>
60template <typename OTHERTYPE,
61 std::enable_if_t<std::is_same<std::remove_cv_t<T>,
62 std::remove_cv_t<OTHERTYPE> >::value,
63 bool> >
64VECMEM_HOST_AND_DEVICE bool jagged_vector_view<T>::operator==(
66
67 return ((m_size == rhs.size()) &&
68 (static_cast<const void*>(m_ptr) ==
69 static_cast<const void*>(rhs.ptr())) &&
70 (static_cast<const void*>(m_host_ptr) ==
71 static_cast<const void*>(rhs.host_ptr())));
72}
73
74template <typename T>
75template <typename OTHERTYPE,
76 std::enable_if_t<std::is_same<std::remove_cv_t<T>,
77 std::remove_cv_t<OTHERTYPE> >::value,
78 bool> >
79VECMEM_HOST_AND_DEVICE bool jagged_vector_view<T>::operator!=(
82 return !(*this == rhs);
83}
84
85template <typename T>
86VECMEM_HOST_AND_DEVICE auto jagged_vector_view<T>::size() const -> size_type {
87
88 return m_size;
89}
90
91template <typename T>
92VECMEM_HOST_AND_DEVICE auto jagged_vector_view<T>::capacity() const
93 -> size_type {
94
95 return m_size;
96}
97
98template <typename T>
99VECMEM_HOST_AND_DEVICE auto jagged_vector_view<T>::ptr() const -> pointer {
100
101 return m_ptr;
102}
103
104template <typename T>
105VECMEM_HOST_AND_DEVICE auto jagged_vector_view<T>::host_ptr() const -> pointer {
106
107 return m_host_ptr;
108}
109
110template <typename T>
111VECMEM_HOST std::vector<typename vector_view<T>::size_type> get_capacities(
113
114 std::vector<typename vector_view<T>::size_type> result(data.size());
115 std::transform(data.host_ptr(), data.host_ptr() + data.size(),
116 result.begin(),
117 [](const auto& vv) { return vv.capacity(); });
118 return result;
120
121} // namespace data
122} // namespace vecmem
An allocator class that wraps a memory resource.
Definition allocator.hpp:37
A view for jagged vectors.
Definition jagged_vector_view.hpp:45
VECMEM_HOST_AND_DEVICE pointer host_ptr() const
Access the host accessible array describing the inner vectors.
Definition jagged_vector_view.ipp:105
VECMEM_HOST_AND_DEVICE jagged_vector_view & operator=(const jagged_vector_view< OTHERTYPE > &rhs)
Assignment operator from a "slightly different" object.
std::size_t size_type
We cannot use boolean types.
Definition jagged_vector_view.hpp:53
std::add_pointer_t< value_type > pointer
Pointer type to the jagged array.
Definition jagged_vector_view.hpp:57
VECMEM_HOST_AND_DEVICE bool operator!=(const jagged_vector_view< OTHERTYPE > &rhs) const
Inequality check. Simply based on operator==.
Definition jagged_vector_view.ipp:79
jagged_vector_view()=default
Default constructor.
VECMEM_HOST_AND_DEVICE size_type capacity() const
Get the maximum capacity of the "outer" vector.
Definition jagged_vector_view.ipp:92
VECMEM_HOST_AND_DEVICE bool operator==(const jagged_vector_view< OTHERTYPE > &rhs) const
Equality check.
Definition jagged_vector_view.ipp:64
VECMEM_HOST_AND_DEVICE pointer ptr() const
Get a pointer to the vector elements.
Definition jagged_vector_view.ipp:99
VECMEM_HOST_AND_DEVICE size_type size() const
Get the "outer" size of the jagged vector.
Definition jagged_vector_view.ipp:86
VECMEM_HOST std::vector< typename vector_view< T >::size_type > get_capacities(const jagged_vector_view< T > &data)
Get the capacities of the inner vectors of a jagged vector.
Definition jagged_vector_view.ipp:111
Main namespace for the vecmem classes/functions.
Definition atomic_ref.hpp:16