Free cookie consent management tool by TermsFeed Policy Generator

source: branches/HeuristicLab.Problems.GaussianProcessTuning/HeuristicLab.Eigen/Eigen/src/Eigen2Support/Minor.h @ 9562

Last change on this file since 9562 was 9562, checked in by gkronber, 11 years ago

#1967 worked on Gaussian process evolution.

File size: 3.5 KB
Line 
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2006-2009 Benoit Jacob <jacob.benoit.1@gmail.com>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_MINOR_H
11#define EIGEN_MINOR_H
12
13namespace Eigen {
14
15/**
16  * \class Minor
17  *
18  * \brief Expression of a minor
19  *
20  * \param MatrixType the type of the object in which we are taking a minor
21  *
22  * This class represents an expression of a minor. It is the return
23  * type of MatrixBase::minor() and most of the time this is the only way it
24  * is used.
25  *
26  * \sa MatrixBase::minor()
27  */
28
29namespace internal {
30template<typename MatrixType>
31struct traits<Minor<MatrixType> >
32 : traits<MatrixType>
33{
34  typedef typename nested<MatrixType>::type MatrixTypeNested;
35  typedef typename remove_reference<MatrixTypeNested>::type _MatrixTypeNested;
36  typedef typename MatrixType::StorageKind StorageKind;
37  enum {
38    RowsAtCompileTime = (MatrixType::RowsAtCompileTime != Dynamic) ?
39                          int(MatrixType::RowsAtCompileTime) - 1 : Dynamic,
40    ColsAtCompileTime = (MatrixType::ColsAtCompileTime != Dynamic) ?
41                          int(MatrixType::ColsAtCompileTime) - 1 : Dynamic,
42    MaxRowsAtCompileTime = (MatrixType::MaxRowsAtCompileTime != Dynamic) ?
43                             int(MatrixType::MaxRowsAtCompileTime) - 1 : Dynamic,
44    MaxColsAtCompileTime = (MatrixType::MaxColsAtCompileTime != Dynamic) ?
45                             int(MatrixType::MaxColsAtCompileTime) - 1 : Dynamic,
46    Flags = _MatrixTypeNested::Flags & (HereditaryBits | LvalueBit),
47    CoeffReadCost = _MatrixTypeNested::CoeffReadCost // minor is used typically on tiny matrices,
48      // where loops are unrolled and the 'if' evaluates at compile time
49  };
50};
51}
52
53template<typename MatrixType> class Minor
54  : public MatrixBase<Minor<MatrixType> >
55{
56  public:
57
58    typedef MatrixBase<Minor> Base;
59    EIGEN_DENSE_PUBLIC_INTERFACE(Minor)
60
61    inline Minor(const MatrixType& matrix,
62                       Index row, Index col)
63      : m_matrix(matrix), m_row(row), m_col(col)
64    {
65      eigen_assert(row >= 0 && row < matrix.rows()
66          && col >= 0 && col < matrix.cols());
67    }
68
69    EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Minor)
70
71    inline Index rows() const { return m_matrix.rows() - 1; }
72    inline Index cols() const { return m_matrix.cols() - 1; }
73
74    inline Scalar& coeffRef(Index row, Index col)
75    {
76      return m_matrix.const_cast_derived().coeffRef(row + (row >= m_row), col + (col >= m_col));
77    }
78
79    inline const Scalar coeff(Index row, Index col) const
80    {
81      return m_matrix.coeff(row + (row >= m_row), col + (col >= m_col));
82    }
83
84  protected:
85    const typename MatrixType::Nested m_matrix;
86    const Index m_row, m_col;
87};
88
89/**
90  * \return an expression of the (\a row, \a col)-minor of *this,
91  * i.e. an expression constructed from *this by removing the specified
92  * row and column.
93  *
94  * Example: \include MatrixBase_minor.cpp
95  * Output: \verbinclude MatrixBase_minor.out
96  *
97  * \sa class Minor
98  */
99template<typename Derived>
100inline Minor<Derived>
101MatrixBase<Derived>::minor(Index row, Index col)
102{
103  return Minor<Derived>(derived(), row, col);
104}
105
106/**
107  * This is the const version of minor(). */
108template<typename Derived>
109inline const Minor<Derived>
110MatrixBase<Derived>::minor(Index row, Index col) const
111{
112  return Minor<Derived>(derived(), row, col);
113}
114
115} // end namespace Eigen
116
117#endif // EIGEN_MINOR_H
Note: See TracBrowser for help on using the repository browser.