// Copyright (c) 2005-2008 Inria Loria (France). /* * author: Bruno Levy, INRIA, project ALICE * website: http://www.loria.fr/~levy/software * * 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 3 * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Scientific work that use this software can reference the website and * the following publication: * * @INPROCEEDINGS {levy:NMDGP:05, * AUTHOR = Bruno Levy, * TITLE = Numerical Methods for Digital Geometry Processing, * BOOKTITLE =Israel Korea Bi-National Conference, * YEAR=November 2005, * URL=http://www.loria.fr/~levy/php/article.php?pub=../publications/papers/2005/Numerics * } * * Laurent Saboret 01/2005: Change for CGAL: * - Added OpenNL namespace * - FullVector is now a model of the SparseLinearAlgebraTraits_d::Vector concept * - Coefficients are initialized with zeros * * $URL$ * $Id$ * SPDX-License-Identifier: LGPL-3.0+ */ #ifndef __OPENNL_FULL_VECTOR__ #define __OPENNL_FULL_VECTOR__ #include #include #include namespace OpenNL { // Class FullVector // Model of the SparseLinearAlgebraTraits_d::Vector concept template class FullVector { // Public types public: typedef T CoeffType ; // for SparseLinearAlgebraTraits_d::Vector concept typedef T NT; // Create a vector initialized with zeros FullVector(unsigned int dim) { dimension_ = dim ; coeff_ = new T[dim] ; // init with zeros (for SparseLinearAlgebraTraits_d::Vector concept) for (unsigned int i=0; i < dimension_; i++) coeff_[i] = 0; } // Copy constructor FullVector(const FullVector& toCopy) { dimension_ = toCopy.dimension_ ; coeff_ = new T[dimension_] ; for (unsigned int i=0; i < dimension_; i++) coeff_[i] = toCopy.coeff_[i]; } // operator =() FullVector& operator =(const FullVector& toCopy) { delete[] coeff_ ; dimension_ = toCopy.dimension_ ; coeff_ = new T[dimension_] ; for (unsigned int i=0; i < dimension_; i++) coeff_[i] = toCopy.coeff_[i]; return *this; } ~FullVector() { delete[] coeff_ ; coeff_ = NULL ; } // Return the vector's number of coefficients unsigned int dimension() const { return dimension_ ; } // Read/write access to 1 vector coefficient. // // Preconditions: // * 0 <= i < dimension() const T& operator[](unsigned int i) const { CGAL_assertion(i < dimension_) ; return coeff_[i] ; } T& operator[](unsigned int i) { CGAL_assertion(i < dimension_) ; return coeff_[i] ; } private: unsigned int dimension_ ; T* coeff_ ; } ; template class BLAS< FullVector > { public: typedef FullVector VectorType ; typedef T CoeffType ; /** y <- y + a*x */ static void axpy(CoeffType a, const VectorType& x, VectorType& y) { CGAL_assertion(x.dimension() == y.dimension()) ; for(unsigned int i=0; i