Project
Loading...
Searching...
No Matches
containertraits.h
Go to the documentation of this file.
1// Copyright 2019-2023 CERN and copyright holders of ALICE O2.
2// See https://alice-o2.web.cern.ch/copyright for details of the copyright holders.
3// All rights not expressly granted are reserved.
4//
5// This software is distributed under the terms of the GNU General Public
6// License v3 (GPL Version 3), copied verbatim in the file "COPYING".
7//
8// In applying this license CERN does not waive the privileges and immunities
9// granted to it by virtue of its status as an Intergovernmental Organization
10// or submit itself to any jurisdiction.
11
15
16#ifndef RANS_INTERNAL_COMMON_CONTAINERTRAITS_H_
17#define RANS_INTERNAL_COMMON_CONTAINERTRAITS_H_
18
19#include <type_traits>
20#include <utility>
21
23
24namespace o2::rans
25{
26
27namespace internal
28{
29template <typename source_T, typename value_T>
30class ShiftableVector;
31
32template <class source_T, class value_T>
33class SparseVector;
34
35template <typename source_T, typename value_T>
36class HashTable;
37
38template <typename source_T, typename value_T>
39class OrderedSet;
40
41template <typename source_T, typename value_T>
42class VectorContainer;
43
44template <typename source_T, typename value_T>
45class SparseVectorContainer;
46
47template <typename source_T, typename value_T>
48class HashContainer;
49
50template <typename source_T, typename value_T>
51class SetContainer;
52
53} // namespace internal
54
55// forward declarations
56template <typename source_T, typename>
58
59template <typename source_T>
61
62template <typename source_T>
63class SparseHistogram;
64
65template <typename container_T>
67
68template <typename source_T, typename value_T>
70
71template <typename source_T, typename value_T>
73
74template <typename source_T, typename value_T>
76
77template <typename source_T>
79
80template <typename source_T>
82
83template <typename source_T>
85
86namespace internal
87{
88template <typename T>
90 using type = std::remove_cv_t<std::remove_reference_t<T>>;
91};
92
93template <typename T>
95
96template <typename T>
97struct isSymbolTable : std::false_type {
98};
99
100template <typename source_T, typename value_T>
101struct isSymbolTable<DenseSymbolTable<source_T, value_T>> : std::true_type {
102};
103
104template <typename source_T, typename value_T>
105struct isSymbolTable<AdaptiveSymbolTable<source_T, value_T>> : std::true_type {
106};
107
108template <typename source_T, typename value_T>
109struct isSymbolTable<SparseSymbolTable<source_T, value_T>> : std::true_type {
110};
111
112template <typename T>
114
115template <typename T>
116struct isHistogram : std::false_type {
117};
118
119template <typename source_T>
120struct isHistogram<DenseHistogram<source_T, void>> : std::true_type {
121};
122
123template <typename source_T>
124struct isHistogram<AdaptiveHistogram<source_T>> : std::true_type {
125};
126
127template <typename source_T>
128struct isHistogram<SparseHistogram<source_T>> : std::true_type {
129};
130
131template <typename T>
133
134template <typename T>
135struct isRenormedHistogram : std::false_type {
136};
137
138template <typename source_T>
140};
141
142template <typename source_T>
145
146template <typename source_T>
148};
149
150template <typename T>
152
153template <typename T>
154struct isDenseContainer : std::false_type {
155};
156
157template <typename source_T, typename value_T>
158struct isDenseContainer<ShiftableVector<source_T, value_T>> : std::true_type {
159};
160
161template <typename source_T>
162struct isDenseContainer<DenseHistogram<source_T, void>> : std::true_type {
163};
164
165template <typename source_T>
167};
168
169template <typename source_T, typename value_T>
170struct isDenseContainer<DenseSymbolTable<source_T, value_T>> : std::true_type {
171};
172
173template <typename T>
175
176template <typename T>
177struct isAdaptiveContainer : std::false_type {
178};
179
180template <typename source_T, typename value_T>
181struct isAdaptiveContainer<SparseVector<source_T, value_T>> : std::true_type {
182};
183
184template <typename source_T>
186};
187
188template <typename source_T>
191
192template <typename source_T, typename value_T>
193struct isAdaptiveContainer<AdaptiveSymbolTable<source_T, value_T>> : std::true_type {
194};
195
196template <typename T>
198
199template <typename T>
200struct isHashContainer : std::false_type {
201};
202
203template <typename key_T, typename value_T>
204struct isHashContainer<HashTable<key_T, value_T>> : std::true_type {
205};
206
207template <typename source_T, typename value_T>
208struct isHashContainer<SparseSymbolTable<source_T, value_T>> : std::true_type {
209};
210
211template <typename T>
213
214template <typename T>
215struct isSetContainer : std::false_type {
216};
217
218template <typename key_T, typename value_T>
219struct isSetContainer<OrderedSet<key_T, value_T>> : std::true_type {
220};
221
222template <typename source_T>
223struct isSetContainer<SparseHistogram<source_T>> : std::true_type {
224};
225
226template <typename source_T>
228};
229
230template <typename T>
232
233template <typename T, typename = void>
234struct isContainer : std::false_type {
235};
236
237template <typename T>
238struct isContainer<T, std::enable_if_t<isDenseContainer_v<T> ||
239 isAdaptiveContainer_v<T> ||
240 isHashContainer_v<T> ||
241 isSetContainer_v<T>>> : std::true_type {
242};
243
244template <typename T>
246
247template <typename T>
248class isStorageContainer : public std::false_type
249{
250};
251
252template <typename source_T, typename value_T>
253class isStorageContainer<ShiftableVector<source_T, value_T>> : public std::true_type
254{
255};
256
257template <class source_T, class value_T>
258class isStorageContainer<SparseVector<source_T, value_T>> : public std::true_type
259{
260};
261
262template <typename source_T, typename value_T>
263class isStorageContainer<HashTable<source_T, value_T>> : public std::true_type
264{
265};
266
267template <typename source_T, typename value_T>
268class isStorageContainer<OrderedSet<source_T, value_T>> : public std::true_type
269{
270};
271
272template <typename T>
274
275template <typename T>
276struct isPair : public std::false_type {
277};
278
279template <typename A, typename B>
280struct isPair<std::pair<A, B>> : public std::true_type {
281};
282
283template <typename T>
285
286} // namespace internal
287} // namespace o2::rans
288
289#endif /* RANS_INTERNAL_COMMON_CONTAINERTRAITS_H_ */
GLsizei const GLfloat * value
Definition glcorearb.h:819
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
constexpr bool isAdaptiveContainer_v
constexpr bool isPair_v
constexpr bool isRenormedHistogram_v
typename removeCVRef< T >::type removeCVRef_t
constexpr bool isSymbolTable_v
constexpr bool isDenseContainer_v
constexpr bool isContainer_v
constexpr bool isStorageContainer_v
constexpr bool isHashContainer_v
constexpr bool isSetContainer_v
constexpr bool isHistogram_v
Defining DataPointCompositeObject explicitly as copiable.
std::remove_cv_t< std::remove_reference_t< T > > type