// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2014-2019 Gael Guennebaud <[email protected]> // // This Source Code Form is subject to the terms of the Mozilla // Public License v. 2.0. If a copy of the MPL was not distributed // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. #ifndef EIGEN_INVERSE_H #define EIGEN_INVERSE_H // IWYU pragma: private #include "./InternalHeaderCheck.h" namespace Eigen { template <typename XprType, typename StorageKind> class InverseImpl; namespace internal { traits<Inverse<XprType>>; } // end namespace internal /** \class Inverse * * \brief Expression of the inverse of another expression * * \tparam XprType the type of the expression we are taking the inverse * * This class represents an abstract expression of A.inverse() * and most of the time this is the only way it is used. * */ template <typename XprType> class Inverse : public InverseImpl<XprType, typename internal::traits<XprType>::StorageKind> { … }; // Generic API dispatcher template <typename XprType, typename StorageKind> class InverseImpl : public internal::generic_xpr_base<Inverse<XprType> >::type { … }; namespace internal { /** \internal * \brief Default evaluator for Inverse expression. * * This default evaluator for Inverse expression simply evaluate the inverse into a temporary * by a call to internal::call_assignment_no_alias. * Therefore, inverse implementers only have to specialize Assignment<Dst,Inverse<...>, ...> for * there own nested expression. * * \sa class Inverse */ unary_evaluator<Inverse<ArgType>>; } // end namespace internal } // end namespace Eigen #endif // EIGEN_INVERSE_H