aboutsummaryrefslogtreecommitdiff
path: root/include/matrix.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/matrix.hpp')
-rw-r--r--include/matrix.hpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/include/matrix.hpp b/include/matrix.hpp
new file mode 100644
index 0000000..ba3e4ae
--- /dev/null
+++ b/include/matrix.hpp
@@ -0,0 +1,41 @@
+#pragma once
+
+#include <cstddef>
+#include <initializer_list>
+#include <vector>
+
+namespace linalg {
+
+class Matrix {
+public:
+ Matrix() = default;
+ Matrix(std::size_t rows, std::size_t cols);
+ Matrix(std::size_t rows, std::size_t cols, double value);
+ Matrix(std::initializer_list<std::initializer_list<double>> values);
+
+ [[nodiscard]] std::size_t rows() const noexcept;
+ [[nodiscard]] std::size_t cols() const noexcept;
+ [[nodiscard]] bool empty() const noexcept;
+
+ double& operator()(std::size_t i, std::size_t j);
+ const double& operator()(std::size_t i, std::size_t j) const;
+
+ void fill(double value);
+
+ double* data() noexcept;
+ const double* data() const noexcept;
+
+ static Matrix identity(std::size_t n);
+ static Matrix zeros(std::size_t rows, std::size_t cols);
+
+private:
+ [[nodiscard]] std::size_t index(std::size_t i, std::size_t j) const;
+ void check_bounds(std::size_t i, std::size_t j) const;
+
+ std::size_t rows_ = 0;
+ std::size_t cols_ = 0;
+ std::vector<double> data_;
+};
+
+} // namespace linalg
+