ACTS
Experiment-independent tracking
Loading...
Searching...
No Matches
containers.hpp
1// This file is part of the ACTS project.
2//
3// Copyright (C) 2016 CERN for the benefit of the ACTS project
4//
5// This Source Code Form is subject to the terms of the Mozilla Public
6// License, v. 2.0. If a copy of the MPL was not distributed with this
7// file, You can obtain one at https://mozilla.org/MPL/2.0/.
8
9#pragma once
10
11// Project include(s)
12#include "detray/core/detail/compact_device_vector.hpp"
13#include "detray/definitions/detail/qualifiers.hpp"
14#include "detray/utils/tuple.hpp"
15
16// Vecmem include(s)
17#include <vecmem/containers/jagged_vector.hpp>
18#include <vecmem/containers/vector.hpp>
19
20// System include(s)
21#include <array>
22#include <map>
23#include <type_traits>
24#include <vector>
25
26namespace detray {
27
28template <typename value_t, std::size_t kDIM>
30using darray = std::array<value_t, kDIM>;
31
32template <typename value_t>
34using dvector = vecmem::vector<value_t>;
35
36template <typename value_t>
38using djagged_vector = vecmem::jagged_vector<value_t>;
39
40template <typename key_t, typename value_t>
42using dmap = std::map<key_t, value_t>;
43
44template <class... types>
46using dtuple = detray::tuple<types...>;
47
49template <template <typename...> class vector_t = dvector>
51 template <typename T>
53 using vector_type = vector_t<T>;
54
55 template <class... T>
57 using tuple_type = dtuple<T...>;
58
59 template <typename T, std::size_t kDIM>
62};
63
65template <template <typename...> class vector_t = dvector>
67 template <typename T>
69 using vector_type = vector_t<std::add_const_t<T>>;
70
71 template <class... T>
74
75 template <typename T, std::size_t kDIM>
78};
79
85
86namespace detail {
87
88// make std::get available in detray detail namespace, where also the thrust and
89// index specific overloads live.
90using std::get;
91
93template <typename T>
95 private:
98 template <typename C>
99 static constexpr auto check(C*) ->
100 typename std::is_void<decltype(std::declval<C>().reserve(
101 std::declval<typename C::size_type>()))>::type;
102
105 template <typename>
106 static constexpr std::false_type check(...);
107
109 using type = decltype(check<T>(nullptr));
110
111 public:
113 static constexpr bool value = type::value;
114};
115
119template <typename T>
120 requires has_reserve<T>::value
121DETRAY_HOST_DEVICE void call_reserve(T& obj, std::size_t newsize) {
122 obj.reserve(newsize);
123}
124
125template <typename T>
126 requires(!has_reserve<T>::value)
127DETRAY_HOST_DEVICE void call_reserve(T& /*obj*/, std::size_t /*newsize*/) {
128 /*Not defined*/
129}
131
132} // namespace detail
133
134} // namespace detray
Detray include(s).
Definition array_operators.hpp:18
vecmem::vector< value_t > dvector
Vector container backed by vecmem.
Definition containers.hpp:34
vecmem::jagged_vector< value_t > djagged_vector
Jagged vector container backed by vecmem.
Definition containers.hpp:38
const_container_types<> const_host_container_types
Const-qualified host container policy based on vecmem vectors.
Definition containers.hpp:84
std::array< value_t, kDIM > darray
Fixed-size array container.
Definition containers.hpp:30
std::map< key_t, value_t > dmap
Ordered key-value map container.
Definition containers.hpp:42
detray::tuple< types... > dtuple
Tuple type used by detray storage and dispatch.
Definition containers.hpp:46
container_types<> host_container_types
Defining some common types Default host container policy based on vecmem vectors.
Definition containers.hpp:82
Bundle container type definitions.
Definition containers.hpp:66
dtuple< std::add_const_t< T >... > tuple_type
Tuple template used to combine component types.
Definition containers.hpp:73
vector_t< std::add_const_t< T > > vector_type
Vector template selected for this container policy.
Definition containers.hpp:69
darray< std::add_const_t< T >, kDIM > array_type
Fixed-size array template used for inline collections.
Definition containers.hpp:77
Bundle container type definitions.
Definition containers.hpp:50
vector_t< T > vector_type
Vector template selected for this container policy.
Definition containers.hpp:53
dtuple< T... > tuple_type
Tuple template used to combine component types.
Definition containers.hpp:57
darray< T, kDIM > array_type
Fixed-size array template used for inline collections.
Definition containers.hpp:61
Trait class to figure out if a given type has a reserve(...) function.
Definition containers.hpp:94
static constexpr bool value
Value of the check.
Definition containers.hpp:113
Default tuple type.
Definition tuple.hpp:26