// Copyright (c) 2012 INRIA Bordeaux Sud-Ouest (France), All rights reserved. // // This file is part of CGAL (www.cgal.org); 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. // // Licensees holding a valid commercial license may use this file in // accordance with the commercial license agreement provided with the software. // // This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE // WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. // // $URL$ // $Id$ // SPDX-License-Identifier: LGPL-3.0+ // // Author(s) : Gael Guennebaud #ifndef CGAL_EIGEN_VECTOR_H #define CGAL_EIGEN_VECTOR_H #include // include basic.h before testing #defines #include namespace CGAL { /*! \ingroup PkgSolver The class `Eigen_vector` is a wrapper around \ref thirdpartyEigen "Eigen" vector type , which is a simple array of numbers. \cgalModels `SvdTraits::Vector` \cgalModels `SparseLinearAlgebraTraits_d::Vector`. \tparam T Number type. \sa `CGAL::Eigen_solver_traits` \sa `CGAL::Eigen_sparse_matrix` \sa `CGAL::Eigen_sparse_symmetric_matrix` */ template class Eigen_vector : public Eigen::Matrix { // Public types public: /// \name Types /// @{ typedef T NT; /// The internal vector type from \ref thirdpartyEigen "Eigen". typedef Eigen::Matrix EigenType; /// @} // Public operations public: Eigen_vector& operator=(const Eigen_vector& other) { return static_cast(*this) = other.eigen_object(); } Eigen_vector& operator=(const EigenType& other) { return static_cast&>(static_cast(*this) = other); } /// Create a vector initialized with zeros. Eigen_vector(std::size_t dimension) : EigenType(static_cast(dimension)) { this->setZero(); } /// Copy constructor. Eigen_vector(const Eigen_vector& toCopy) : EigenType(toCopy) { } ~Eigen_vector() { } /// Return the vector's number of coefficients. int dimension() const { return static_cast(this->size()); } /// Return the internal vector wrapped by this object. const EigenType& eigen_object() const { return *this; } /// Return the internal vector wrapped by this object. EigenType& eigen_object() { return *this; } /// Write access to a vector coefficient: `a_i` <- `value`. void set(std::size_t i, NT value) { this->operator[](static_cast(i)) = value; } /// Return a pointer to the data array of this vector. NT* vector() { return this->data(); } }; } // namespace CGAL #endif // CGAL_EIGEN_VECTOR_H