#pragma once #include namespace td { /** * Reflectable std::array */ template class Array { private: T* m_Data; public: Array() : m_Data(new T[S]) {} Array(const Array& a_Other) : Array() { *this = a_Other; } Array(Array&& a_Other) { m_Data = a_Other.m_Data; a_Other.m_Data = nullptr; } Array(const std::initializer_list& args) { std::size_t i = 0; for(const T& element : args) { m_Data[i] = element; i++; } } Array& operator=(const Array& a_Other) { for (std::size_t i = 0; i < S; i++) { m_Data[i] = a_Other.m_Data[i]; } return *this; } Array& operator=(Array&& a_Other) { std::swap(m_Data, a_Other.m_Data); return *this; } T& operator[](std::size_t a_Index) { return m_Data[a_Index]; } const T& operator[](std::size_t a_Index) const { return m_Data[a_Index]; } ~Array() { delete [] m_Data; } }; } // namespace td