diff --git a/src/Matrix.cpp b/src/Matrix.cpp index bb38e4c..013e87c 100644 --- a/src/Matrix.cpp +++ b/src/Matrix.cpp @@ -530,9 +530,17 @@ Matrix::Normalize(Matrix &result) const } template -template -Matrix &Matrix::SubMatrix(Matrix &buffer, uint8_t row_offset, uint8_t column_offset) const +template +Matrix Matrix::SubMatrix() const { + // static assert that sub_rows + row_offset <= rows + // static assert that sub_columns + column_offset <= columns + static_assert(sub_rows + row_offset <= rows, + "The submatrix you're trying to get is out of bounds (rows)"); + static_assert(sub_columns + column_offset <= columns, + "The submatrix you're trying to get is out of bounds (columns)"); + + Matrix buffer{}; for (uint8_t row_idx{0}; row_idx < sub_rows; row_idx++) { for (uint8_t column_idx{0}; column_idx < sub_columns; column_idx++) diff --git a/src/Matrix.hpp b/src/Matrix.hpp index 449dce9..4c64771 100644 --- a/src/Matrix.hpp +++ b/src/Matrix.hpp @@ -193,8 +193,8 @@ public: Matrix operator*(float scalar) const; - template - Matrix &SubMatrix(Matrix &buffer, uint8_t row_offset, uint8_t column_offset) const; + template + Matrix SubMatrix() const; template void SetSubMatrix(const Matrix &sub_matrix, uint8_t row_offset, uint8_t column_offset);