#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() { std::memcpy(m_Data, a_Other.m_Data, S); } 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) { std::memcpy(m_Data, a_Other.m_Data, S); 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]; } ~Array() { delete [] m_Data; } }; } // namespace td