#pragma once #include "interfaces/matrix.hpp" #include "engine/data/bounds.hpp" #include "engine/data/vector2.hpp" #include "engine/matrix_iterator.hpp" #include #include #include #include class StringMatrix : public IMatrix { public: explicit StringMatrix(const Bounds &bounds) noexcept; StringMatrix(const StringMatrix &string_matrix) noexcept; StringMatrix(StringMatrix &&string_matrix) noexcept; ~StringMatrix() noexcept override; void fill(std::string_view element) noexcept override; [[nodiscard]] std::string_view get(const Vector2 &pos) const noexcept override; void set(const Vector2 &pos, std::string_view element) noexcept override; [[nodiscard]] uint32_t get_row_cnt() const noexcept override; [[nodiscard]] uint32_t get_column_cnt() const noexcept override; [[nodiscard]] MatrixIterator begin() const noexcept override; [[nodiscard]] MatrixIterator end() const noexcept override; StringMatrix &operator=(const StringMatrix &rhs) noexcept; StringMatrix &operator=(StringMatrix &&rhs) noexcept; private: gsl::owner _matrix; uint32_t _row_cnt; uint32_t _column_cnt; void _delete_matrix() noexcept; void _copy_matrix_from(const StringMatrix &source) noexcept; };