Another set of UI messages fixes and tweaks! No functional changes.
[blender.git] / extern / Eigen3 / Eigen / src / Sparse / SparseTranspose.h
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr>
5 //
6 // Eigen is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 3 of the License, or (at your option) any later version.
10 //
11 // Alternatively, you can redistribute it and/or
12 // modify it under the terms of the GNU General Public License as
13 // published by the Free Software Foundation; either version 2 of
14 // the License, or (at your option) any later version.
15 //
16 // Eigen is distributed in the hope that it will be useful, but WITHOUT ANY
17 // WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18 // FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License or the
19 // GNU General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public
22 // License and a copy of the GNU General Public License along with
23 // Eigen. If not, see <http://www.gnu.org/licenses/>.
24
25 #ifndef EIGEN_SPARSETRANSPOSE_H
26 #define EIGEN_SPARSETRANSPOSE_H
27
28 template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>
29   : public SparseMatrixBase<Transpose<MatrixType> >
30 {
31     typedef typename internal::remove_all<typename MatrixType::Nested>::type _MatrixTypeNested;
32   public:
33
34     EIGEN_SPARSE_PUBLIC_INTERFACE(Transpose<MatrixType>)
35
36     class InnerIterator;
37     class ReverseInnerIterator;
38
39     inline Index nonZeros() const { return derived().nestedExpression().nonZeros(); }
40 };
41
42 template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>::InnerIterator
43   : public _MatrixTypeNested::InnerIterator
44 {
45     typedef typename _MatrixTypeNested::InnerIterator Base;
46   public:
47
48     EIGEN_STRONG_INLINE InnerIterator(const TransposeImpl& trans, Index outer)
49       : Base(trans.derived().nestedExpression(), outer)
50     {}
51     inline Index row() const { return Base::col(); }
52     inline Index col() const { return Base::row(); }
53 };
54
55 template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>::ReverseInnerIterator
56   : public _MatrixTypeNested::ReverseInnerIterator
57 {
58     typedef typename _MatrixTypeNested::ReverseInnerIterator Base;
59   public:
60
61     EIGEN_STRONG_INLINE ReverseInnerIterator(const TransposeImpl& xpr, Index outer)
62       : Base(xpr.derived().nestedExpression(), outer)
63     {}
64     inline Index row() const { return Base::col(); }
65     inline Index col() const { return Base::row(); }
66 };
67
68 #endif // EIGEN_SPARSETRANSPOSE_H