From 3824f1abf382cc6b22b84aadb97e6e9fa564225f Mon Sep 17 00:00:00 2001 From: Nao Pross Date: Thu, 7 Feb 2019 17:52:29 +0100 Subject: Add initial implementation for mmmatrix and update to build.ninja --- include/mm/mmmatrix.hpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 include/mm/mmmatrix.hpp (limited to 'include/mm') diff --git a/include/mm/mmmatrix.hpp b/include/mm/mmmatrix.hpp new file mode 100644 index 0000000..7934d87 --- /dev/null +++ b/include/mm/mmmatrix.hpp @@ -0,0 +1,59 @@ +/* mmmatrix.hpp + * Part of Mathematical library built (ab)using Modern C++ 17 abstractions. + * + * This library is not intended to be _performant_, it does not contain + * hand written SMID / SSE / AVX optimizations. It is instead an example + * of highly abstracted code, where matrices can contain any data type. + * + * As a challenge, the matrix data structure has been built on a container + * of static capacity. But if a dynamic base container is needed, the code + * should be easily modifiable to add further abstraction, by templating + * the container and possibly the allocator. + * + * Naoki Pross + * 2018 ~ 2019 + */ +#pragma once + +#include +#include + +namespace mm { + template + class basic_matrix; +} + +template +class mm::basic_matrix { +public: + using type = T; + + static constexpr std::size_t rows = Rows; + static constexpr std::size_t cols = Cols; + + basic_matrix() {} + + template + basic_matrix(const basic_matrix& other); + + const T& at(std::size_t row, std::size_t col); + +private: + std::array data; +}; + + + +template +template +mm::basic_matrix::basic_matrix(const basic_matrix& other) { + static_assert((ORows <= Rows), + "cannot copy a taller matrix into a smaller one" + ); + + static_assert((OCols <= Cols), + "cannot copy a larger matrix into a smaller one" + ); + + std::copy(std::begin(other.data), std::end(other.data), data.begin()); +} -- cgit v1.2.1