#pragma once #include "matrix_iterator.hpp" // Matrix row iterator template MatrixRowIterator::MatrixRowIterator(ColumnPtr column_ptr) noexcept : _column_ptr(column_ptr) { } template auto MatrixRowIterator::operator++() noexcept -> MatrixRowIterator & { ++_column_ptr; return *this; } template auto MatrixRowIterator::operator++(int) noexcept -> MatrixRowIterator { auto copy = *this; ++(*this); return copy; } template auto MatrixRowIterator::operator*() const noexcept -> Element & { return *_column_ptr; } template auto MatrixRowIterator::operator==(const MatrixRowIterator &rhs) const noexcept -> bool { return _column_ptr == rhs._column_ptr; } template auto MatrixRowIterator::operator!=(const MatrixRowIterator &rhs) const noexcept -> bool { return _column_ptr != rhs._column_ptr; } // Matrix row template MatrixRow::MatrixRow(RowPtr row_ptr, const uint32_t &column_cnt) noexcept : _row_ptr(row_ptr), _column_cnt(column_cnt) { } template auto MatrixRow::begin() const noexcept -> MatrixRowIterator { return MatrixRowIterator(_row_ptr); } template auto MatrixRow::end() const noexcept -> MatrixRowIterator { return MatrixRowIterator(_row_ptr + _column_cnt); } // Matrix iterator template MatrixIterator::MatrixIterator( RowPtr row_ptr, const uint32_t &column_cnt) noexcept : _row_ptr(row_ptr), _column_cnt(column_cnt) { } template auto MatrixIterator::operator++() noexcept -> MatrixIterator & { ++_row_ptr; return *this; } template auto MatrixIterator::operator++(int) noexcept -> MatrixIterator { auto copy = *this; ++(*this); return copy; } template auto MatrixIterator::operator*() const noexcept -> MatrixRow { return MatrixRow(*_row_ptr, _column_cnt); } template auto MatrixIterator::operator==(const MatrixIterator &rhs) const noexcept -> bool { return _row_ptr == rhs._row_ptr; } template auto MatrixIterator::operator!=(const MatrixIterator &rhs) const noexcept -> bool { return _row_ptr != rhs._row_ptr; }