Project
Loading...
Searching...
No Matches
GPUCommonArray.h
Go to the documentation of this file.
1// Copyright 2019-2020 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
14
15#ifndef GPUCOMMONARRAY_H
16#define GPUCOMMONARRAY_H
17
18#if !defined(GPUCA_GPUCODE_DEVICE) || defined(__CUDACC__) || defined(__HIPCC__) // TODO: Get rid of GPUCommonArray once OpenCL supports <array>
19#ifndef GPUCA_GPUCODE_COMPILEKERNELS
20#include <array>
21#endif
22#else
23
24#include "GPUCommonDef.h"
25namespace std
26{
27#ifdef GPUCA_GPUCODE_DEVICE
28template <typename T, size_t N>
29struct array {
30 GPUd() T& operator[](size_t i) { return m_internal_V__[i]; };
31 GPUd() const T& operator[](size_t i) const { return m_internal_V__[i]; };
32 GPUd() T* data() { return m_internal_V__; };
33 GPUd() const T* data() const { return m_internal_V__; };
34 GPUd() void fill(const T& t)
35 {
36 for (size_t i{0}; i < N; ++i) {
37 m_internal_V__[i] = t;
38 }
39 }
40 T m_internal_V__[N];
41};
42template <class T, class... E>
43GPUd() array(T, E...)->array<T, 1 + sizeof...(E)>;
44#else
45template <typename T, size_t N>
46using array = std::array<T, N>;
47#endif
48} // namespace std
49#endif
50
51#endif // GPUCOMMONARRAY_H
int32_t i
#define GPUd()
GLenum array
Definition glcorearb.h:4274
GLboolean * data
Definition glcorearb.h:298
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
Defining DataPointCompositeObject explicitly as copiable.