#include <iomanip>
#include <iostream>
#include "matrix.hpp"
template<typename T>
void print_matrix(const Matrix<T>& A) {
for (std::size_t i = 0; i < A.m; ++i) {
for (std::size_t j = 0; j < A.n; ++j) {
std::cout << " " << std::setw(8) << A(i, j);
}
std::cout << std::endl;
}
}
template<typename T, typename Initializer>
void init_matrix(Matrix<T>& A, Initializer&& initializer) {
for (std::size_t i = 0; i < A.m; ++i) {
for (std::size_t j = 0; j < A.n; ++j) {
A(i, j) = initializer(i, j);
}
}
}
template<typename T>
T sum_matrix(const Matrix<T>& A) {
T sum{};
for (std::size_t i = 0; i < A.m; ++i) {
for (std::size_t j = 0; j < A.n; ++j) {
sum += A(i, j);
}
}
return sum;
}
int main() {
Matrix<double> A(7, 8, StorageOrder::ColMajor);
init_matrix(A, [&A](std::size_t i, std::size_t j) {
return i * A.n + j;
});
std::cout << "A:" << std::endl; print_matrix(A);
std::cout << std::endl << "sum(A) = " << sum_matrix(A) << std::endl;
}