yat/utility/expression/TransposedMatrix.h

Code
Comments
Other
Rev Date Author Line
3908 13 May 20 peter 1 #ifndef _theplu_yat_utility_expression_transposed_matrix
3908 13 May 20 peter 2 #define _theplu_yat_utility_expression_transposed_matrix
3908 13 May 20 peter 3
3908 13 May 20 peter 4 // $Id$
3908 13 May 20 peter 5
3908 13 May 20 peter 6 /*
3908 13 May 20 peter 7   Copyright (C) 2020 Peter Johansson
3908 13 May 20 peter 8
3908 13 May 20 peter 9   This file is part of the yat library, http://dev.thep.lu.se/yat
3908 13 May 20 peter 10
3908 13 May 20 peter 11   The yat library is free software; you can redistribute it and/or
3908 13 May 20 peter 12   modify it under the terms of the GNU General Public License as
3908 13 May 20 peter 13   published by the Free Software Foundation; either version 3 of the
3908 13 May 20 peter 14   License, or (at your option) any later version.
3908 13 May 20 peter 15
3908 13 May 20 peter 16   The yat library is distributed in the hope that it will be useful,
3908 13 May 20 peter 17   but WITHOUT ANY WARRANTY; without even the implied warranty of
3908 13 May 20 peter 18   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3908 13 May 20 peter 19   General Public License for more details.
3908 13 May 20 peter 20
3908 13 May 20 peter 21   You should have received a copy of the GNU General Public License
3908 13 May 20 peter 22   along with yat. If not, see <http://www.gnu.org/licenses/>.
3908 13 May 20 peter 23 */
3908 13 May 20 peter 24
3908 13 May 20 peter 25
3908 13 May 20 peter 26 namespace theplu {
3908 13 May 20 peter 27 namespace yat {
3908 13 May 20 peter 28 namespace utility {
3908 13 May 20 peter 29 namespace expression {
3908 13 May 20 peter 30
3908 13 May 20 peter 31   /// \cond IGNORE_DOXYGEN
3908 13 May 20 peter 32
3908 13 May 20 peter 33   template<class T>
3908 13 May 20 peter 34   class TransposedMatrix : public MatrixExpression<TransposedMatrix<T> >
3908 13 May 20 peter 35   {
3908 13 May 20 peter 36   public:
3908 13 May 20 peter 37     TransposedMatrix(const BasicMatrix<T>& A)
3908 13 May 20 peter 38       : A_(A) {}
3908 13 May 20 peter 39
3908 13 May 20 peter 40     size_t rows(void) const { return A_.columns(); }
3908 13 May 20 peter 41     size_t columns(void) const { return A_.rows(); }
3908 13 May 20 peter 42
3908 13 May 20 peter 43     double operator()(size_t i, size_t j) const
3908 13 May 20 peter 44     {
3908 13 May 20 peter 45       return A_(j, i);
3908 13 May 20 peter 46     }
3908 13 May 20 peter 47
3908 13 May 20 peter 48     void calculate_matrix(gsl_matrix*& result) const
3908 13 May 20 peter 49     {
3908 13 May 20 peter 50       detail::reallocate(result, rows(), columns());
3908 13 May 20 peter 51       gsl_matrix_transpose_memcpy(result, A_.gsl_matrix_p());
3908 13 May 20 peter 52     }
3908 13 May 20 peter 53
3908 13 May 20 peter 54     const T& base(void) const
3908 13 May 20 peter 55     {
3908 13 May 20 peter 56       return static_cast<const T&>(A_);
3908 13 May 20 peter 57     }
3908 13 May 20 peter 58
3908 13 May 20 peter 59   private:
3908 13 May 20 peter 60     const BasicMatrix<T>& A_;
3908 13 May 20 peter 61   };
3908 13 May 20 peter 62
3908 13 May 20 peter 63   /// \endcond
3908 13 May 20 peter 64
3908 13 May 20 peter 65 }}}} // of namespace expression, utility, yat, and theplu
3908 13 May 20 peter 66
3908 13 May 20 peter 67 #endif