32 template <
typename T, std::
size_t ROWS, std::
size_t COLS>
37 using vec_t = std::array<T, ROWS * COLS>;
56 (ROWS != 1 && COLS == 1) ? 0 : 1 ;
95 template <
class Derived>
101 template <
typename _Lhs,
typename _Rhs,
int Option>
107 template <
typename Op,
typename Lhs,
typename Rhs>
114 template <
typename VectorType,
int Size>
137 for (
Index c = 0; c <
cols(); c++) (*
this)(r, c) = m(r, c);
142 template <
class Derived>
151 template <
typename VectorType,
int Size>
161 template <
typename U>
170 template <
typename VECTOR>
176 for (
size_t r = 0, i = 0; r < ROWS; r++)
177 for (
size_t c = 0; c < COLS; c++)
m_data[r * COLS + c] = vals[i++];
185 for (
size_t r = 0, i = 0; r < ROWS; r++)
186 for (
size_t c = 0; c < COLS; c++)
m_data[r * COLS + c] =
data[i++];
191 size_t row,
size_t col, [[maybe_unused]]
bool zeroNewElements =
false)
216 const matrix_size_t& siz, [[maybe_unused]]
bool zeroNewElements =
false)
248 typename EIGEN_MATRIX =
eigen_t,
254 std::is_same_v<EIGEN_MATRIX, eigen_t>,
255 "Please, do not override the default template arguments of this " 257 return EIGEN_MAP(&
m_data[0], ROWS, COLS);
262 typename EIGEN_MATRIX =
eigen_t,
264 const EIGEN_MATRIX, MRPT_MAX_STATIC_ALIGN_BYTES,
269 std::is_same_v<EIGEN_MATRIX, eigen_t>,
270 "Please, do not override the default template arguments of this " 272 return EIGEN_MAP(&
m_data[0], ROWS, COLS);
310 ASSERTDEB_(static_cast<std::size_t>(i) < ROWS * COLS);
315 ASSERTDEB_(static_cast<std::size_t>(i) < ROWS * COLS);
322 ASSERT_(ROWS == 1 || COLS == 1);
323 ASSERTDEB_(static_cast<std::size_t>(i) < ROWS * COLS);
328 ASSERT_(ROWS == 1 || COLS == 1);
329 ASSERTDEB_(static_cast<std::size_t>(i) < ROWS * COLS);
347 if constexpr (ROWS == COLS)
349 for (
Index r = 0; r < static_cast<Index>(ROWS); r++)
350 for (
Index c = 0; c < static_cast<Index>(COLS); c++)
351 (*
this)(r, c) +=
A(c, r);
355 throw std::runtime_error(
"sum_At(): matrix must be square.");
413 template <
typename T, std::
size_t N, std::
size_t M>
416 constexpr
static auto get()
T & operator()(int row, int col)
Access (row,col), without out-of-bounds check (except in Debug builds)
CMatrixFixed()
Default constructor, initializes all elements to zero.
A compile-time fixed-size numeric matrix container.
static constexpr int StorageOrder
TConstructorFlags_Matrices
For usage in one of the constructors of CMatrixFixed or CMatrixDynamic (and derived classes)...
const T * data() const
Return raw pointer to row-major data buffer.
EIGEN_MAP asEigen() const
constexpr matrix_size_t size() const
Get a 2-vector with [NROWS NCOLS] (as in MATLAB command size(x))
#define THROW_EXCEPTION(msg)
size_t size(const MATRIXLIKE &m, const int dim)
const_iterator cbegin() const
const CMatrixFixed & derived() const
static constexpr int SizeAtCompileTime
void conservativeResize(size_t row, size_t col)
CMatrixFixed(const Eigen::CwiseBinaryOp< Op, Lhs, Rhs > &p)
Convert from Eigen binary op.
void resize(const matrix_size_t &siz, [[maybe_unused]] bool zeroNewElements=false)
Throws if size does not match with the fixed matrix size.
T & operator[](int i)
Access the [i-th] element (for 1xN or Nx1 matrices)
const T & operator()(int i) const
static constexpr int is_mrpt_type
CMatrixFixed(TConstructorFlags_Matrices)
Constructor which leaves the matrix uninitialized.
T & operator()(int i)
Access the i-th element, Row-Major order, without out-of-bounds check (except in Debug builds) ...
CMatrixFixed(const size_type rows, const size_type cols)
Convenient ctor from size: in this class, it throws if size does not match compile-time size...
CMatrixFixed< T, ROWS, 1 > llt_solve(const CMatrixFixed< T, ROWS, 1 > &b) const
Solves the linear system Ax=b, returns x, with A this symmetric matrix.
#define ASSERT_(f)
Defines an assertion mechanism.
void loadFromArray(const VECTOR &vals)
void resize(size_t row, size_t col)
This base provides a set of functions for maths stuff.
typename vec_t::const_iterator const_iterator
CMatrixFixed(const Eigen::Product< _Lhs, _Rhs, Option > &p)
Convert from Eigen product.
CMatrixFixed< T, ROWS, 1 > lu_solve(const CMatrixFixed< T, ROWS, 1 > &b) const
Solves the linear system Ax=b, returns x, with A this asymmetric matrix.
#define ASSERT_EQUAL_(__A, __B)
Assert comparing two values, reporting their actual values upon failure.
void setFromMatrixLike(const MAT &m)
void sum_At(const CMatrixFixed< Scalar, ROWS, COLS > &A)
this += AT
CMatrixFixed & operator=(const Eigen::VectorBlock< VectorType, Size > &m)
Assignment from an Eigen vector block.
std::array< double, ROWS *COLS > vec_t
RowMajor matrix data.
Eigen::Matrix< T, ROWS, COLS, StorageOrder, ROWS, COLS > eigen_t
const double & const_reference
const_iterator end() const
static constexpr int ColsAtCompileTime
CMatrixFixed & operator=(const Eigen::MatrixBase< Derived > &m)
Assignment from an Eigen matrix.
const T & operator()(int row, int col) const
double value_type
The type of the matrix elements.
CMatrixFixed(const T *data)
Initializes from a plain buffer with RowMajor values.
CMatrixFixed(const T(&vals)[N])
Initializes from a C array with RowMajor values.
constexpr size_type rows() const
Number of rows in the matrix.
const_iterator cend() const
Base CRTP class for all MRPT matrices.
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries.
CMatrixFixed & operator=(const CMatrixDynamic< U > &m)
Assignment from a Dynamic matrix.
const T & operator[](int i) const
CMatrixFixed< float, ROWS, COLS > cast_float() const
#define ASSERTDEB_(f)
Defines an assertion mechanism - only when compiled in debug.
CMatrixFixed(const Eigen::MatrixBase< Derived > &m)
Convert from Eigen matrix.
CMatrixFixed(const Eigen::VectorBlock< VectorType, Size > &m)
Convert from Eigen block.
EIGEN_MAP asEigen()
Get as an Eigen-compatible Eigen::Map object.
#define MRPT_MATRIX_CONSTRUCTORS_FROM_POSES(_CLASS_)
constexpr size_type cols() const
Number of columns in the matrix.
std::ptrdiff_t difference_type
void swap(CMatrixFixed &o)
typename vec_t::iterator iterator
This template class provides the basic functionality for a general 2D any-size, resizable container o...
CMatrixFixed< double, ROWS, COLS > cast_double() const
Auxiliary class used in CMatrixDynamic:size(), CMatrixDynamic::resize(), CMatrixFixed::size(), CMatrixFixed::resize(), to mimic the behavior of STL-containers.
void setSize(size_t row, size_t col, [[maybe_unused]] bool zeroNewElements=false)
Throws if size does not match with the fixed matrix size.
void loadFromRawPointer(const T *data)
Initializes from a plain buffer with RowMajor values.
static constexpr int RowsAtCompileTime
const_iterator begin() const