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 }
0046
0047 #endif