9 template <nem::scalar_type _T,
size_t _C,
size_t _R>
13 static constexpr size_t ROWS = _R;
64 constexpr mat(std::initializer_list<std::initializer_list<ITEM_TYPE>> rows) :
data{}
70 for (
const auto& row_list : rows)
75 for (
const auto& val : row_list)
84 template <
size_t OTHER_COLUMNS>
88 for (
size_t r = 0; r <
ROWS; ++r)
90 for (
size_t c = 0; c < OTHER_COLUMNS; ++c)
92 for (
size_t n = 0; n <
COLUMNS; ++n)
94 result[c][r] += lhs[n][r] * rhs[c][n];
101 static constexpr mat NaN() {
return mat(std::numeric_limits<ITEM_TYPE>::quiet_NaN()); }
105 for (
size_t c = 0; c <
COLUMNS; ++c)
107 (*this)[c] += other[c];
132 return !(lhs == rhs);
138 for (
size_t c = 0; c <
COLUMNS; ++c)
140 for (
size_t r = 0; r <
ROWS; ++r)
142 result[r] += lhs[c][r] * rhs[c];
#define NEM_RUNTIME_ASSERT(condition, message)
constexpr bool equal(T a, T b) noexcept
Are a and b nearly equal? Given an Epsilon > 0, within each all numbers are considered indistinguisab...
constexpr COLUMN_TYPE & column(size_t index)
constexpr mat(ITEM_TYPE scalar)
COLUMN_TYPE columns[COLUMNS]
constexpr ITEM_TYPE & at(size_t row, size_t col)
constexpr ITEM_TYPE item(size_t i) const
constexpr friend bool operator!=(const mat &lhs, const mat &rhs)
constexpr mat(std::initializer_list< std::initializer_list< ITEM_TYPE > > rows)
constexpr friend nem::vec< ITEM_TYPE, ROWS > operator*(const mat &lhs, const nem::vec< ITEM_TYPE, COLUMNS > &rhs)
constexpr const COLUMN_TYPE & column(size_t index) const
constexpr ITEM_TYPE * item_ptr(size_t i)
static constexpr mat NaN()
constexpr friend mat< ITEM_TYPE, OTHER_COLUMNS, ROWS > operator*(const mat &lhs, const mat< ITEM_TYPE, OTHER_COLUMNS, COLUMNS > &rhs)
constexpr mat & operator+=(const mat &other)
static constexpr size_t COLUMNS
constexpr friend bool operator==(const mat &lhs, const mat &rhs)
constexpr friend mat operator+(mat lhs, const mat &rhs)
static constexpr size_t ITEM_COUNT
constexpr const COLUMN_TYPE & operator[](size_t col) const
constexpr COLUMN_TYPE & operator[](size_t col)
static constexpr size_t ROWS
constexpr const ITEM_TYPE & at(size_t row, size_t col) const
ITEM_TYPE data[ITEM_COUNT]
constexpr const ITEM_TYPE * item_ptr(size_t i) const