// Copyright (C) 2022 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either // version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #pragma once #include "InterpKernelDenseMatrix.hxx" namespace INTERP_KERNEL { template DenseMatrixT::DenseMatrixT() : nn(0), mm(0), v(nullptr) {} template DenseMatrixT::DenseMatrixT(mcIdType n, mcIdType m) : nn(n), mm(m), v(n>0 ? new T*[n] : nullptr) { mcIdType i,nel=m*n; if (v) v[0] = nel>0 ? new T[nel] : nullptr; for (i=1;i DenseMatrixT::DenseMatrixT(mcIdType n, mcIdType m, const T &a) : nn(n), mm(m), v(n>0 ? new T*[n] : nullptr) { mcIdType i,j,nel=m*n; if (v) v[0] = nel>0 ? new T[nel] : nullptr; for (i=1; i< n; i++) v[i] = v[i-1] + m; for (i=0; i< n; i++) for (j=0; j DenseMatrixT::DenseMatrixT(mcIdType n, mcIdType m, const T *a) : nn(n), mm(m), v(n>0 ? new T*[n] : nullptr) { mcIdType i,j,nel=m*n; if (v) v[0] = nel>0 ? new T[nel] : nullptr; for (i=1; i< n; i++) v[i] = v[i-1] + m; for (i=0; i< n; i++) for (j=0; j DenseMatrixT::DenseMatrixT(const DenseMatrixT &rhs) : nn(rhs.nn), mm(rhs.mm), v(nn>0 ? new T*[nn] : nullptr) { mcIdType i,j,nel=mm*nn; if (v) v[0] = nel>0 ? new T[nel] : nullptr; for (i=1; i< nn; i++) v[i] = v[i-1] + mm; for (i=0; i< nn; i++) for (j=0; j DenseMatrixT & DenseMatrixT::operator=(const DenseMatrixT &rhs) { if (this != &rhs) { mcIdType i,j,nel; if (nn != rhs.nn || mm != rhs.mm) { if ( v ) { delete[] (v[0]); delete[] (v); } nn=rhs.nn; mm=rhs.mm; v = nn>0 ? new T*[nn] : nullptr; nel = mm*nn; if (v) v[0] = nel>0 ? new T[nel] : nullptr; for (i=1; i< nn; i++) v[i] = v[i-1] + mm; } for (i=0; i< nn; i++) for (j=0; j void DenseMatrixT::resize(mcIdType newn, mcIdType newm) { mcIdType i,nel; if (newn != nn || newm != mm) { if ( v ) { delete[] (v[0]); delete[] (v); } nn = newn; mm = newm; v = nn>0 ? new T*[nn] : nullptr; nel = mm*nn; if (v) v[0] = nel>0 ? new T[nel] : nullptr; for (i=1; i< nn; i++) v[i] = v[i-1] + mm; } } template void DenseMatrixT::assign(mcIdType newn, mcIdType newm, const T& a) { mcIdType i,j,nel; if (newn != nn || newm != mm) { if ( v ) { delete[] (v[0]); delete[] (v); } nn = newn; mm = newm; v = nn>0 ? new T*[nn] : nullptr; nel = mm*nn; if (v) v[0] = nel>0 ? new T[nel] : nullptr; for (i=1; i< nn; i++) v[i] = v[i-1] + mm; } for (i=0; i< nn; i++) for (j=0; j DenseMatrixT::~DenseMatrixT() { if ( v ) { delete[] (v[0]); delete[] (v); } } }