aboutsummaryrefslogtreecommitdiff
path: root/src/engine/graphics/matrix_iterator_impl.hpp
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2022-06-08 16:47:48 +0200
committerHampusM <hampus@hampusmat.com>2022-06-13 17:57:01 +0200
commit7e84d664079d9c407bdf94861825bb05ccf1b0f7 (patch)
tree6c0caeb168379a4978b2bc074133f3942276af47 /src/engine/graphics/matrix_iterator_impl.hpp
parent45e3ae285c63d91dcac426cffdd9d9648e48399b (diff)
refactor: move matrix iterator to engine graphics folder
Diffstat (limited to 'src/engine/graphics/matrix_iterator_impl.hpp')
-rw-r--r--src/engine/graphics/matrix_iterator_impl.hpp115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/engine/graphics/matrix_iterator_impl.hpp b/src/engine/graphics/matrix_iterator_impl.hpp
new file mode 100644
index 0000000..4b2c785
--- /dev/null
+++ b/src/engine/graphics/matrix_iterator_impl.hpp
@@ -0,0 +1,115 @@
+#pragma once
+
+#include "matrix_iterator.hpp"
+
+// Matrix row iterator
+
+template <typename Element>
+MatrixRowIterator<Element>::MatrixRowIterator(ColumnPtr column_ptr) noexcept
+ : _column_ptr(column_ptr)
+{
+}
+
+template <typename Element>
+auto MatrixRowIterator<Element>::operator++() noexcept -> MatrixRowIterator<Element> &
+{
+ ++_column_ptr;
+
+ return *this;
+}
+
+template <typename Element>
+auto MatrixRowIterator<Element>::operator++(int) noexcept -> MatrixRowIterator<Element>
+{
+ auto copy = *this;
+
+ ++(*this);
+
+ return copy;
+}
+
+template <typename Element>
+auto MatrixRowIterator<Element>::operator*() const noexcept -> Element &
+{
+ return *_column_ptr;
+}
+
+template <typename Element>
+auto MatrixRowIterator<Element>::operator==(const MatrixRowIterator &rhs) const noexcept
+ -> bool
+{
+ return _column_ptr == rhs._column_ptr;
+}
+
+template <typename Element>
+auto MatrixRowIterator<Element>::operator!=(const MatrixRowIterator &rhs) const noexcept
+ -> bool
+{
+ return _column_ptr != rhs._column_ptr;
+}
+
+// Matrix row
+
+template <typename Element>
+MatrixRow<Element>::MatrixRow(RowPtr row_ptr, const uint32_t &column_cnt) noexcept
+ : _row_ptr(row_ptr), _column_cnt(column_cnt)
+{
+}
+
+template <typename Element>
+auto MatrixRow<Element>::begin() const noexcept -> MatrixRowIterator<Element>
+{
+ return MatrixRowIterator<Element>(_row_ptr);
+}
+
+template <typename Element>
+auto MatrixRow<Element>::end() const noexcept -> MatrixRowIterator<Element>
+{
+ return MatrixRowIterator<Element>(_row_ptr + _column_cnt);
+}
+
+// Matrix iterator
+
+template <typename Element>
+MatrixIterator<Element>::MatrixIterator(
+ RowPtr row_ptr,
+ const uint32_t &column_cnt) noexcept
+ : _row_ptr(row_ptr), _column_cnt(column_cnt)
+{
+}
+
+template <typename Element>
+auto MatrixIterator<Element>::operator++() noexcept -> MatrixIterator<Element> &
+{
+ ++_row_ptr;
+
+ return *this;
+}
+
+template <typename Element>
+auto MatrixIterator<Element>::operator++(int) noexcept -> MatrixIterator<Element>
+{
+ auto copy = *this;
+
+ ++(*this);
+
+ return copy;
+}
+
+template <typename Element>
+auto MatrixIterator<Element>::operator*() const noexcept -> MatrixRow<Element>
+{
+ return MatrixRow(*_row_ptr, _column_cnt);
+}
+
+template <typename Element>
+auto MatrixIterator<Element>::operator==(const MatrixIterator &rhs) const noexcept -> bool
+{
+ return _row_ptr == rhs._row_ptr;
+}
+
+template <typename Element>
+auto MatrixIterator<Element>::operator!=(const MatrixIterator &rhs) const noexcept -> bool
+{
+ return _row_ptr != rhs._row_ptr;
+}