Visual Computing Library
Loading...
Searching...
No Matches
matrix.h
1/*****************************************************************************
2 * VCLib *
3 * Visual Computing Library *
4 * *
5 * Copyright(C) 2021-2025 *
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/concepts/space/matrix.h>
27#include <vclib/concepts/space/point.h>
28#include <vclib/io/serialization.h>
29
30#include <Eigen/Core>
31
32namespace vcl {
33
34template<typename Scalar, int R, int C>
35class Matrix : public Eigen::Matrix<Scalar, R, C>
36{
37 using Base = Eigen::Matrix<Scalar, R, C>;
38
39public:
40 Matrix() = default;
41
42 // inherit constructors
43 using Base::Base;
44
45 template<typename OtherDerived>
46 Matrix(const Eigen::MatrixBase<OtherDerived>& other) : Base(other)
47 {
48 }
49
50 template<typename OtherDerived>
51 Matrix& operator=(const Eigen::MatrixBase<OtherDerived>& other)
52 {
53 this->Base::operator=(other);
54 return *this;
55 }
56
57 void serialize(std::ostream& os) const
58 {
59 uint rows = Base::rows();
60 uint cols = Base::cols();
61 vcl::serialize(os, rows, cols);
62 vcl::serializeN(os, Base::data(), Base::rows() * Base::cols());
63 }
64
65 void deserialize(std::istream& is)
66 {
67 uint rows, cols;
68 vcl::deserialize(is, rows, cols);
69 Base::resize(rows, cols);
70 vcl::deserializeN(is, Base::data(), Base::rows() * Base::cols());
71 }
72};
73
74template<typename Scalar>
76
80
81template<typename Scalar>
83
87
88} // namespace vcl
89
90#endif // VCL_SPACE_CORE_MATRIX_MATRIX_H
Definition matrix.h:36
A class representing a line segment in n-dimensional space. The class is parameterized by a PointConc...
Definition segment.h:43