diff options
Diffstat (limited to 'src/engine/graphics/matrix.hpp')
-rw-r--r-- | src/engine/graphics/matrix.hpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/engine/graphics/matrix.hpp b/src/engine/graphics/matrix.hpp new file mode 100644 index 0000000..2c9ba81 --- /dev/null +++ b/src/engine/graphics/matrix.hpp @@ -0,0 +1,53 @@ +#pragma once + +#include "interfaces/matrix.hpp" + +#include "engine/data/bounds.hpp" +#include "engine/data/vector2.hpp" +#include "engine/matrix_iterator.hpp" + +#include <gsl/pointers> +#include <memory> + +template <typename Element> +class Matrix : public IMatrix<Element> +{ +public: + explicit Matrix(const Bounds &bounds) noexcept; + + Matrix(const Matrix &matrix) noexcept; + + Matrix(Matrix &&matrix) noexcept; + + ~Matrix() noexcept override; + + void fill(Element element) noexcept override; + + [[nodiscard]] Element get(const Vector2 &pos) const noexcept override; + + void set(const Vector2 &pos, Element element) noexcept override; + + [[nodiscard]] uint32_t get_row_cnt() const noexcept override; + + [[nodiscard]] uint32_t get_column_cnt() const noexcept override; + + [[nodiscard]] MatrixIterator<Element> begin() const noexcept override; + + [[nodiscard]] MatrixIterator<Element> end() const noexcept override; + + Matrix &operator=(const Matrix &rhs) noexcept; + + Matrix &operator=(Matrix &&rhs) noexcept; + +private: + gsl::owner<Element **> _matrix; + + uint32_t _row_cnt; + uint32_t _column_cnt; + + void _delete_matrix() noexcept; + + void _copy_matrix_from(const Matrix &source) noexcept; +}; + +#include "matrix.tpp" |