Back to home page

Project CMSSW displayed by LXR

 
 

    


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

0001 
0002 #ifndef HeterogeneousCore_AlpakaInterface_interface_FlexiStorage_h
0003 #define HeterogeneousCore_AlpakaInterface_interface_FlexiStorage_h
0004 
0005 #include <cstdint>
0006 
0007 namespace cms::alpakatools {
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 cms::alpakatools
0046 
0047 #endif  // HeterogeneousCore_AlpakaInterface_interface_FlexiStorage_h