// Copyright (c) 2012 INRIA Bordeaux Sud-Ouest (France), All rights reserved. // // This file is part of CGAL (www.cgal.org) // // $URL: https://github.com/CGAL/cgal/blob/v5.1/Solver_interface/include/CGAL/Eigen_vector.h $ // $Id: Eigen_vector.h d6c1aba 2020-03-27T18:17:06+01:00 Mael Rouxel-Labbé // SPDX-License-Identifier: LGPL-3.0-or-later OR LicenseRef-Commercial // // 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 PkgSolverInterfaceRef The class `Eigen_vector` is a wrapper around `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); } /// Constructs a null vector. Eigen_vector() : EigenType() {} /// 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