yat/utility/MatrixConstView.cc

Code
Comments
Other
Rev Date Author Line
4129 19 Jan 22 peter 1 // $Id$
4129 19 Jan 22 peter 2
4129 19 Jan 22 peter 3 /*
4129 19 Jan 22 peter 4   Copyright (C) 2022 Peter Johansson
4129 19 Jan 22 peter 5
4129 19 Jan 22 peter 6   This file is part of the yat library, https://dev.thep.lu.se/yat
4129 19 Jan 22 peter 7
4129 19 Jan 22 peter 8   The yat library is free software; you can redistribute it and/or
4129 19 Jan 22 peter 9   modify it under the terms of the GNU General Public License as
4129 19 Jan 22 peter 10   published by the Free Software Foundation; either version 3 of the
4129 19 Jan 22 peter 11   License, or (at your option) any later version.
4129 19 Jan 22 peter 12
4129 19 Jan 22 peter 13   The yat library is distributed in the hope that it will be useful,
4129 19 Jan 22 peter 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
4129 19 Jan 22 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4129 19 Jan 22 peter 16   General Public License for more details.
4129 19 Jan 22 peter 17
4129 19 Jan 22 peter 18   You should have received a copy of the GNU General Public License
4129 19 Jan 22 peter 19   along with yat. If not, see <https://www.gnu.org/licenses/>.
4129 19 Jan 22 peter 20 */
4129 19 Jan 22 peter 21
4129 19 Jan 22 peter 22 #include <config.h>
4129 19 Jan 22 peter 23
4129 19 Jan 22 peter 24 #include "MatrixConstView.h"
4129 19 Jan 22 peter 25
4129 19 Jan 22 peter 26 #include <cassert>
4129 19 Jan 22 peter 27
4129 19 Jan 22 peter 28 namespace theplu {
4129 19 Jan 22 peter 29 namespace yat {
4129 19 Jan 22 peter 30 namespace utility {
4129 19 Jan 22 peter 31
4129 19 Jan 22 peter 32   MatrixConstView::MatrixConstView(void)
4129 19 Jan 22 peter 33     : view_(nullptr)
4129 19 Jan 22 peter 34   {
4129 19 Jan 22 peter 35   }
4129 19 Jan 22 peter 36
4129 19 Jan 22 peter 37
4129 19 Jan 22 peter 38   MatrixConstView::MatrixConstView(const MatrixConstView& other)
4129 19 Jan 22 peter 39     : view_(nullptr)
4129 19 Jan 22 peter 40   {
4129 19 Jan 22 peter 41     copy(other.gsl_matrix_p());
4129 19 Jan 22 peter 42   }
4129 19 Jan 22 peter 43
4129 19 Jan 22 peter 44
4129 19 Jan 22 peter 45   MatrixConstView::MatrixConstView(const MatrixBase& other)
4129 19 Jan 22 peter 46     : view_(nullptr)
4129 19 Jan 22 peter 47   {
4129 19 Jan 22 peter 48     copy(other.gsl_matrix_p());
4129 19 Jan 22 peter 49   }
4129 19 Jan 22 peter 50
4129 19 Jan 22 peter 51
4129 19 Jan 22 peter 52   MatrixConstView::MatrixConstView(const MatrixBase& other,
4129 19 Jan 22 peter 53                                    size_t row_offset, size_t col_offset,
4129 19 Jan 22 peter 54                                    size_t rows, size_t columns)
4129 19 Jan 22 peter 55     : view_(nullptr)
4129 19 Jan 22 peter 56   {
4129 19 Jan 22 peter 57     copy(other.gsl_matrix_p(), row_offset, col_offset, rows, columns);
4129 19 Jan 22 peter 58   }
4129 19 Jan 22 peter 59
4129 19 Jan 22 peter 60
4141 01 Feb 22 peter 61   MatrixConstView::MatrixConstView(const gsl_matrix* m)
4141 01 Feb 22 peter 62     : view_(nullptr)
4141 01 Feb 22 peter 63   {
4141 01 Feb 22 peter 64     copy(m);
4141 01 Feb 22 peter 65   }
4141 01 Feb 22 peter 66
4141 01 Feb 22 peter 67
4141 01 Feb 22 peter 68   MatrixConstView::MatrixConstView(const double* p, size_t rows, size_t cols)
4141 01 Feb 22 peter 69     : view_(nullptr)
4141 01 Feb 22 peter 70   {
4141 01 Feb 22 peter 71     assert(p);
4141 01 Feb 22 peter 72     assert(rows);
4141 01 Feb 22 peter 73     assert(cols);
4141 01 Feb 22 peter 74     view_ =
4141 01 Feb 22 peter 75       new gsl_matrix_const_view(gsl_matrix_const_view_array(p, rows, cols));
4141 01 Feb 22 peter 76   }
4141 01 Feb 22 peter 77
4141 01 Feb 22 peter 78
4141 01 Feb 22 peter 79   MatrixConstView::MatrixConstView(const double* p, size_t rows,
4141 01 Feb 22 peter 80                                    size_t cols, size_t tda)
4141 01 Feb 22 peter 81     : view_(nullptr)
4141 01 Feb 22 peter 82   {
4141 01 Feb 22 peter 83     assert(p);
4141 01 Feb 22 peter 84     assert(rows);
4141 01 Feb 22 peter 85     assert(cols);
4141 01 Feb 22 peter 86     assert(tda >= cols);
4141 01 Feb 22 peter 87     view_ =
4141 01 Feb 22 peter 88       new gsl_matrix_const_view(gsl_matrix_const_view_array_with_tda(p, rows,
4141 01 Feb 22 peter 89                                                                      cols,
4141 01 Feb 22 peter 90                                                                      tda));
4141 01 Feb 22 peter 91   }
4141 01 Feb 22 peter 92
4141 01 Feb 22 peter 93
4129 19 Jan 22 peter 94   MatrixConstView::~MatrixConstView(void)
4129 19 Jan 22 peter 95   {
4129 19 Jan 22 peter 96     delete view_;
4129 19 Jan 22 peter 97   }
4129 19 Jan 22 peter 98
4129 19 Jan 22 peter 99
4129 19 Jan 22 peter 100   void MatrixConstView::copy(const gsl_matrix* other)
4129 19 Jan 22 peter 101   {
4129 19 Jan 22 peter 102     copy(other, 0, 0, detail::rows(other), detail::columns(other));
4129 19 Jan 22 peter 103   }
4129 19 Jan 22 peter 104
4129 19 Jan 22 peter 105
4129 19 Jan 22 peter 106   void MatrixConstView::copy(const gsl_matrix* other, size_t k1, size_t k2,
4129 19 Jan 22 peter 107                              size_t n1, size_t n2)
4129 19 Jan 22 peter 108   {
4129 19 Jan 22 peter 109     assert(!view_ && "should only be called in constructors");
4129 19 Jan 22 peter 110     if (other) {
4129 19 Jan 22 peter 111       view_ =
4129 19 Jan 22 peter 112         new gsl_matrix_const_view(gsl_matrix_const_submatrix(other, k1, k2,
4129 19 Jan 22 peter 113                                                              n1, n2));
4129 19 Jan 22 peter 114       assert(view_);
4129 19 Jan 22 peter 115     }
4129 19 Jan 22 peter 116   }
4129 19 Jan 22 peter 117
4129 19 Jan 22 peter 118
4129 19 Jan 22 peter 119   const gsl_matrix* MatrixConstView::gsl_matrix_p(void) const
4129 19 Jan 22 peter 120   {
4129 19 Jan 22 peter 121     if (view_)
4129 19 Jan 22 peter 122       return &view_->matrix;
4129 19 Jan 22 peter 123     return nullptr;
4129 19 Jan 22 peter 124   }
4129 19 Jan 22 peter 125
4129 19 Jan 22 peter 126
4129 19 Jan 22 peter 127 }}} // of namespace utility, yat and thep