Visual Computing Library  devel
Loading...
Searching...
No Matches
matrix.h
1/*****************************************************************************
2 * VCLib *
3 * Visual Computing Library *
4 * *
5 * Copyright(C) 2021-2026 *
6 * Visual Computing Lab *
7 * ISTI - Italian National Research Council *
8 * *
9 * All rights reserved. *
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the Mozilla Public License Version 2.0 as published *
13 * by the Mozilla Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 * This program is distributed in the hope that it will be useful, *
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
19 * Mozilla Public License Version 2.0 *
20 * (https://www.mozilla.org/en-US/MPL/2.0/) for more details. *
21 ****************************************************************************/
22
23#ifndef VCL_SPACE_CORE_MATRIX_MATRIX_H
24#define VCL_SPACE_CORE_MATRIX_MATRIX_H
25
26#include <vclib/base.h>
27
28#include <Eigen/Core>
29
30namespace vcl {
31
32template<typename Scalar, int R, int C>
33class Matrix : public Eigen::Matrix<Scalar, R, C>
34{
35 using Base = Eigen::Matrix<Scalar, R, C>;
36
37public:
38 Matrix() = default;
39
40 // inherit constructors
41 using Base::Base;
42
43 template<typename OtherDerived>
44 Matrix(const Eigen::MatrixBase<OtherDerived>& other) : Base(other)
45 {
46 }
47
48 template<typename OtherDerived>
49 Matrix& operator=(const Eigen::MatrixBase<OtherDerived>& other)
50 {
51 this->Base::operator=(other);
52 return *this;
53 }
54
55 void serialize(std::ostream& os) const
56 {
57 uint rows = Base::rows();
58 uint cols = Base::cols();
59 vcl::serialize(os, rows, cols);
60 vcl::serializeN(os, Base::data(), Base::rows() * Base::cols());
61 }
62
63 void deserialize(std::istream& is)
64 {
65 uint rows, cols;
66 vcl::deserialize(is, rows, cols);
67 Base::resize(rows, cols);
68 vcl::deserializeN(is, Base::data(), Base::rows() * Base::cols());
69 }
70};
71
72/* Specialization Aliases */
73
74template<typename Scalar>
76
80
81template<typename Scalar>
83
87
88/* Concepts */
89
101template<typename T>
102concept EigenMatrixConcept = std::derived_from< // same type or derived type
103 std::remove_cvref_t<T>,
104 Eigen::Matrix<
105 typename RemoveRef<T>::Scalar,
106 RemoveRef<T>::RowsAtCompileTime,
107 RemoveRef<T>::ColsAtCompileTime,
108 RemoveRef<T>::Options>>;
109
110} // namespace vcl
111
112#endif // VCL_SPACE_CORE_MATRIX_MATRIX_H
Definition matrix.h:34
A class representing a line segment in n-dimensional space. The class is parameterized by a PointConc...
Definition segment.h:41
A concept representing an Eigen Matrix.
Definition matrix.h:102