FlexiStorage

FlexiStorage

Macros

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47

#ifndef HeterogeneousCore_AlpakaInterface_interface_FlexiStorage_h
#define HeterogeneousCore_AlpakaInterface_interface_FlexiStorage_h

#include <cstdint>

namespace cms::alpakatools {

  template <typename I, int S>
  class FlexiStorage {
  public:
    constexpr int capacity() const { return S; }

    constexpr I& operator[](int i) { return m_v[i]; }
    constexpr const I& operator[](int i) const { return m_v[i]; }

    constexpr I* data() { return m_v; }
    constexpr I const* data() const { return m_v; }

  private:
    I m_v[S];
  };

  template <typename I>
  class FlexiStorage<I, -1> {
  public:
    constexpr void init(I* v, int s) {
      m_v = v;
      m_capacity = s;
    }

    constexpr int capacity() const { return m_capacity; }

    constexpr I& operator[](int i) { return m_v[i]; }
    constexpr const I& operator[](int i) const { return m_v[i]; }

    constexpr I* data() { return m_v; }
    constexpr I const* data() const { return m_v; }

  private:
    I* m_v;
    int m_capacity;
  };

}  // namespace cms::alpakatools

#endif  // HeterogeneousCore_AlpakaInterface_interface_FlexiStorage_h