Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:15:44

0001 #ifndef HeterogeneousCore_CUDAUtilities_interface_FlexiStorage_h
0002 #define HeterogeneousCore_CUDAUtilities_interface_FlexiStorage_h
0003 
0004 #include <cstdint>
0005 
0006 namespace cms {
0007   namespace cuda {
0008 
0009     template <typename I, int S>
0010     class FlexiStorage {
0011     public:
0012       constexpr int capacity() const { return S; }
0013 
0014       constexpr I& operator[](int i) { return m_v[i]; }
0015       constexpr const I& operator[](int i) const { return m_v[i]; }
0016 
0017       constexpr I* data() { return m_v; }
0018       constexpr I const* data() const { return m_v; }
0019 
0020     private:
0021       I m_v[S];
0022     };
0023 
0024     template <typename I>
0025     class FlexiStorage<I, -1> {
0026     public:
0027       constexpr void init(I* v, int s) {
0028         m_v = v;
0029         m_capacity = s;
0030       }
0031 
0032       constexpr int capacity() const { return m_capacity; }
0033 
0034       constexpr I& operator[](int i) { return m_v[i]; }
0035       constexpr const I& operator[](int i) const { return m_v[i]; }
0036 
0037       constexpr I* data() { return m_v; }
0038       constexpr I const* data() const { return m_v; }
0039 
0040     private:
0041       I* m_v;
0042       int m_capacity;
0043     };
0044 
0045   }  // namespace cuda
0046 
0047 }  // namespace cms
0048 
0049 #endif