| // This file is part of Eigen, a lightweight C++ template library |
| // for linear algebra. |
| // |
| // Copyright (C) 2007-2010 Benoit Jacob <jacob.benoit.1@gmail.com> |
| // Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr> |
| // |
| // 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_FORWARDDECLARATIONS_H |
| #define EIGEN_FORWARDDECLARATIONS_H |
| |
| // IWYU pragma: private |
| #include "../InternalHeaderCheck.h" |
| |
| namespace Eigen { |
| namespace internal { |
| |
| template <typename T> |
| struct traits; |
| |
| // here we say once and for all that traits<const T> == traits<T> |
| // When constness must affect traits, it has to be constness on template parameters on which T itself depends. |
| // For example, traits<Map<const T> > != traits<Map<T> >, but |
| // traits<const Map<T> > == traits<Map<T> > |
| template <typename T> |
| struct traits<const T> : traits<T> {}; |
| |
| template <typename Derived> |
| struct has_direct_access { |
| enum { ret = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0 }; |
| }; |
| |
| template <typename Derived> |
| struct accessors_level { |
| enum { |
| has_direct_access = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0, |
| has_write_access = (traits<Derived>::Flags & LvalueBit) ? 1 : 0, |
| value = has_direct_access ? (has_write_access ? DirectWriteAccessors : DirectAccessors) |
| : (has_write_access ? WriteAccessors : ReadOnlyAccessors) |
| }; |
| }; |
| |
| template <typename T> |
| struct evaluator_traits; |
| |
| template <typename T> |
| struct evaluator; |
| |
| } // end namespace internal |
| |
| template <typename T> |
| struct NumTraits; |
| |
| template <typename Derived> |
| struct EigenBase; |
| template <typename Derived> |
| class DenseBase; |
| template <typename Derived> |
| class PlainObjectBase; |
| template <typename Derived, int Level> |
| class DenseCoeffsBase; |
| |
| template <typename Scalar_, int Rows_, int Cols_, |
| int Options_ = AutoAlign | ((Rows_ == 1 && Cols_ != 1) ? Eigen::RowMajor |
| : (Cols_ == 1 && Rows_ != 1) ? Eigen::ColMajor |
| : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION), |
| int MaxRows_ = Rows_, int MaxCols_ = Cols_> |
| class Matrix; |
| |
| template <typename Derived> |
| class MatrixBase; |
| template <typename Derived> |
| class ArrayBase; |
| |
| template <typename ExpressionType, unsigned int Added, unsigned int Removed> |
| class Flagged; |
| template <typename ExpressionType, template <typename> class StorageBase> |
| class NoAlias; |
| template <typename ExpressionType> |
| class NestByValue; |
| template <typename ExpressionType> |
| class ForceAlignedAccess; |
| template <typename ExpressionType> |
| class SwapWrapper; |
| |
| template <typename XprType, int BlockRows = Dynamic, int BlockCols = Dynamic, bool InnerPanel = false> |
| class Block; |
| template <typename XprType, typename RowIndices, typename ColIndices> |
| class IndexedView; |
| template <typename XprType, int Rows = Dynamic, int Cols = Dynamic, int Order = 0> |
| class Reshaped; |
| template <typename FirstType, typename SizeType, typename IncrType> |
| class ArithmeticSequence; |
| |
| template <typename MatrixType, int Size = Dynamic> |
| class VectorBlock; |
| template <typename MatrixType> |
| class Transpose; |
| template <typename MatrixType> |
| class Conjugate; |
| template <typename NullaryOp, typename MatrixType> |
| class CwiseNullaryOp; |
| template <typename UnaryOp, typename MatrixType> |
| class CwiseUnaryOp; |
| template <typename BinaryOp, typename Lhs, typename Rhs> |
| class CwiseBinaryOp; |
| template <typename TernaryOp, typename Arg1, typename Arg2, typename Arg3> |
| class CwiseTernaryOp; |
| template <typename Decomposition, typename Rhstype> |
| class Solve; |
| template <typename XprType> |
| class Inverse; |
| |
| template <typename Lhs, typename Rhs, int Option = DefaultProduct> |
| class Product; |
| |
| template <typename Derived> |
| class DiagonalBase; |
| template <typename DiagonalVectorType_> |
| class DiagonalWrapper; |
| template <typename Scalar_, int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime> |
| class DiagonalMatrix; |
| template <typename MatrixType, typename DiagonalType, int ProductOrder> |
| class DiagonalProduct; |
| template <typename MatrixType, int Index = 0> |
| class Diagonal; |
| template <typename Derived> |
| class SkewSymmetricBase; |
| template <typename VectorType_> |
| class SkewSymmetricWrapper; |
| template <typename Scalar_> |
| class SkewSymmetricMatrix3; |
| template <int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType = int> |
| class PermutationMatrix; |
| template <int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType = int> |
| class Transpositions; |
| template <typename Derived> |
| class PermutationBase; |
| template <typename Derived> |
| class TranspositionsBase; |
| template <typename IndicesType_> |
| class PermutationWrapper; |
| template <typename IndicesType_> |
| class TranspositionsWrapper; |
| |
| template <typename Derived, |
| int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors> |
| class MapBase; |
| template <int OuterStrideAtCompileTime, int InnerStrideAtCompileTime> |
| class Stride; |
| template <int Value = Dynamic> |
| class InnerStride; |
| template <int Value = Dynamic> |
| class OuterStride; |
| template <typename MatrixType, int MapOptions = Unaligned, typename StrideType = Stride<0, 0>> |
| class Map; |
| template <typename Derived> |
| class RefBase; |
| template <typename PlainObjectType, int Options = 0, |
| typename StrideType = |
| typename std::conditional_t<PlainObjectType::IsVectorAtCompileTime, InnerStride<1>, OuterStride<>>> |
| class Ref; |
| template <typename ViewOp, typename MatrixType, typename StrideType = Stride<0, 0>> |
| class CwiseUnaryView; |
| |
| template <typename Derived> |
| class TriangularBase; |
| template <typename MatrixType, unsigned int Mode> |
| class TriangularView; |
| template <typename MatrixType, unsigned int Mode> |
| class SelfAdjointView; |
| template <typename MatrixType> |
| class SparseView; |
| template <typename ExpressionType> |
| class WithFormat; |
| template <typename MatrixType> |
| struct CommaInitializer; |
| template <typename Derived> |
| class ReturnByValue; |
| template <typename ExpressionType> |
| class ArrayWrapper; |
| template <typename ExpressionType> |
| class MatrixWrapper; |
| template <typename Derived> |
| class SolverBase; |
| template <typename XprType> |
| class InnerIterator; |
| |
| namespace internal { |
| template <typename XprType> |
| class generic_randaccess_stl_iterator; |
| template <typename XprType> |
| class pointer_based_stl_iterator; |
| template <typename XprType, DirectionType Direction> |
| class subvector_stl_iterator; |
| template <typename XprType, DirectionType Direction> |
| class subvector_stl_reverse_iterator; |
| template <typename DecompositionType> |
| struct kernel_retval_base; |
| template <typename DecompositionType> |
| struct kernel_retval; |
| template <typename DecompositionType> |
| struct image_retval_base; |
| template <typename DecompositionType> |
| struct image_retval; |
| } // end namespace internal |
| |
| namespace internal { |
| template <typename Scalar_, int Rows = Dynamic, int Cols = Dynamic, int Supers = Dynamic, int Subs = Dynamic, |
| int Options = 0> |
| class BandMatrix; |
| } |
| |
| namespace internal { |
| template <typename Lhs, typename Rhs> |
| struct product_type; |
| |
| template <bool> |
| struct EnableIf; |
| |
| /** \internal |
| * \class product_evaluator |
| * Products need their own evaluator with more template arguments allowing for |
| * easier partial template specializations. |
| */ |
| template <typename T, int ProductTag = internal::product_type<typename T::Lhs, typename T::Rhs>::ret, |
| typename LhsShape = typename evaluator_traits<typename T::Lhs>::Shape, |
| typename RhsShape = typename evaluator_traits<typename T::Rhs>::Shape, |
| typename LhsScalar = typename traits<typename T::Lhs>::Scalar, |
| typename RhsScalar = typename traits<typename T::Rhs>::Scalar> |
| struct product_evaluator; |
| } // namespace internal |
| |
| template <typename Lhs, typename Rhs, int ProductType = internal::product_type<Lhs, Rhs>::value> |
| struct ProductReturnType; |
| |
| // this is a workaround for sun CC |
| template <typename Lhs, typename Rhs> |
| struct LazyProductReturnType; |
| |
| namespace internal { |
| |
| // Provides scalar/packet-wise product and product with accumulation |
| // with optional conjugation of the arguments. |
| template <typename LhsScalar, typename RhsScalar, bool ConjLhs = false, bool ConjRhs = false> |
| struct conj_helper; |
| |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_sum_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_difference_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_conj_product_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar, int NaNPropagation = PropagateFast> |
| struct scalar_min_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar, int NaNPropagation = PropagateFast> |
| struct scalar_max_op; |
| template <typename Scalar> |
| struct scalar_opposite_op; |
| template <typename Scalar> |
| struct scalar_conjugate_op; |
| template <typename Scalar> |
| struct scalar_real_op; |
| template <typename Scalar> |
| struct scalar_imag_op; |
| template <typename Scalar> |
| struct scalar_abs_op; |
| template <typename Scalar> |
| struct scalar_abs2_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_absolute_difference_op; |
| template <typename Scalar> |
| struct scalar_sqrt_op; |
| template <typename Scalar> |
| struct scalar_cbrt_op; |
| template <typename Scalar> |
| struct scalar_rsqrt_op; |
| template <typename Scalar> |
| struct scalar_exp_op; |
| template <typename Scalar> |
| struct scalar_log_op; |
| template <typename Scalar> |
| struct scalar_cos_op; |
| template <typename Scalar> |
| struct scalar_sin_op; |
| template <typename Scalar> |
| struct scalar_acos_op; |
| template <typename Scalar> |
| struct scalar_asin_op; |
| template <typename Scalar> |
| struct scalar_tan_op; |
| template <typename Scalar> |
| struct scalar_atan_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_atan2_op; |
| template <typename Scalar> |
| struct scalar_inverse_op; |
| template <typename Scalar> |
| struct scalar_square_op; |
| template <typename Scalar> |
| struct scalar_cube_op; |
| template <typename Scalar, typename NewType> |
| struct scalar_cast_op; |
| template <typename Scalar> |
| struct scalar_random_op; |
| template <typename Scalar> |
| struct scalar_constant_op; |
| template <typename Scalar> |
| struct scalar_identity_op; |
| template <typename Scalar> |
| struct scalar_sign_op; |
| template <typename Scalar, typename ScalarExponent> |
| struct scalar_pow_op; |
| template <typename Scalar, typename ScalarExponent, bool BaseIsInteger, bool ExponentIsInteger, bool BaseIsComplex, |
| bool ExponentIsComplex> |
| struct scalar_unary_pow_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_hypot_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_product_op; |
| template <typename LhsScalar, typename RhsScalar = LhsScalar> |
| struct scalar_quotient_op; |
| // logical and bitwise operations |
| template <typename Scalar> |
| struct scalar_boolean_and_op; |
| template <typename Scalar> |
| struct scalar_boolean_or_op; |
| template <typename Scalar> |
| struct scalar_boolean_xor_op; |
| template <typename Scalar> |
| struct scalar_boolean_not_op; |
| template <typename Scalar> |
| struct scalar_bitwise_and_op; |
| template <typename Scalar> |
| struct scalar_bitwise_or_op; |
| template <typename Scalar> |
| struct scalar_bitwise_xor_op; |
| template <typename Scalar> |
| struct scalar_bitwise_not_op; |
| |
| // SpecialFunctions module |
| template <typename Scalar> |
| struct scalar_lgamma_op; |
| template <typename Scalar> |
| struct scalar_digamma_op; |
| template <typename Scalar> |
| struct scalar_erf_op; |
| template <typename Scalar> |
| struct scalar_erfc_op; |
| template <typename Scalar> |
| struct scalar_ndtri_op; |
| template <typename Scalar> |
| struct scalar_igamma_op; |
| template <typename Scalar> |
| struct scalar_igammac_op; |
| template <typename Scalar> |
| struct scalar_zeta_op; |
| template <typename Scalar> |
| struct scalar_betainc_op; |
| |
| // Bessel functions in SpecialFunctions module |
| template <typename Scalar> |
| struct scalar_bessel_i0_op; |
| template <typename Scalar> |
| struct scalar_bessel_i0e_op; |
| template <typename Scalar> |
| struct scalar_bessel_i1_op; |
| template <typename Scalar> |
| struct scalar_bessel_i1e_op; |
| template <typename Scalar> |
| struct scalar_bessel_j0_op; |
| template <typename Scalar> |
| struct scalar_bessel_y0_op; |
| template <typename Scalar> |
| struct scalar_bessel_j1_op; |
| template <typename Scalar> |
| struct scalar_bessel_y1_op; |
| template <typename Scalar> |
| struct scalar_bessel_k0_op; |
| template <typename Scalar> |
| struct scalar_bessel_k0e_op; |
| template <typename Scalar> |
| struct scalar_bessel_k1_op; |
| template <typename Scalar> |
| struct scalar_bessel_k1e_op; |
| |
| } // end namespace internal |
| |
| struct IOFormat; |
| |
| // Array module |
| template <typename Scalar_, int Rows_, int Cols_, |
| int Options_ = AutoAlign | ((Rows_ == 1 && Cols_ != 1) ? Eigen::RowMajor |
| : (Cols_ == 1 && Rows_ != 1) ? Eigen::ColMajor |
| : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION), |
| int MaxRows_ = Rows_, int MaxCols_ = Cols_> |
| class Array; |
| template <typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType> |
| class Select; |
| template <typename MatrixType, typename BinaryOp, int Direction> |
| class PartialReduxExpr; |
| template <typename ExpressionType, int Direction> |
| class VectorwiseOp; |
| template <typename MatrixType, int RowFactor, int ColFactor> |
| class Replicate; |
| template <typename MatrixType, int Direction = BothDirections> |
| class Reverse; |
| |
| #if defined(EIGEN_USE_LAPACKE) && defined(lapack_int) |
| // Lapacke interface requires StorageIndex to be lapack_int |
| typedef lapack_int DefaultPermutationIndex; |
| #else |
| typedef int DefaultPermutationIndex; |
| #endif |
| |
| template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex> |
| class FullPivLU; |
| template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex> |
| class PartialPivLU; |
| namespace internal { |
| template <typename MatrixType> |
| struct inverse_impl; |
| } |
| template <typename MatrixType> |
| class HouseholderQR; |
| template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex> |
| class ColPivHouseholderQR; |
| template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex> |
| class FullPivHouseholderQR; |
| template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex> |
| class CompleteOrthogonalDecomposition; |
| template <typename MatrixType> |
| class SVDBase; |
| template <typename MatrixType, int Options = 0> |
| class JacobiSVD; |
| template <typename MatrixType, int Options = 0> |
| class BDCSVD; |
| template <typename MatrixType, int UpLo = Lower> |
| class LLT; |
| template <typename MatrixType, int UpLo = Lower> |
| class LDLT; |
| template <typename VectorsType, typename CoeffsType, int Side = OnTheLeft> |
| class HouseholderSequence; |
| template <typename Scalar> |
| class JacobiRotation; |
| |
| // Geometry module: |
| namespace internal { |
| template <typename Derived, typename OtherDerived, int Size = MatrixBase<Derived>::SizeAtCompileTime> |
| struct cross_impl; |
| } |
| template <typename Derived, int Dim_> |
| class RotationBase; |
| template <typename Derived> |
| class QuaternionBase; |
| template <typename Scalar> |
| class Rotation2D; |
| template <typename Scalar> |
| class AngleAxis; |
| template <typename Scalar, int Dim> |
| class Translation; |
| template <typename Scalar, int Dim> |
| class AlignedBox; |
| template <typename Scalar, int Options = AutoAlign> |
| class Quaternion; |
| template <typename Scalar, int Dim, int Mode, int Options_ = AutoAlign> |
| class Transform; |
| template <typename Scalar_, int AmbientDim_, int Options = AutoAlign> |
| class ParametrizedLine; |
| template <typename Scalar_, int AmbientDim_, int Options = AutoAlign> |
| class Hyperplane; |
| template <typename Scalar> |
| class UniformScaling; |
| template <typename MatrixType, int Direction> |
| class Homogeneous; |
| |
| // Sparse module: |
| template <typename Derived> |
| class SparseMatrixBase; |
| |
| // MatrixFunctions module |
| template <typename Derived> |
| struct MatrixExponentialReturnValue; |
| template <typename Derived> |
| class MatrixFunctionReturnValue; |
| template <typename Derived> |
| class MatrixSquareRootReturnValue; |
| template <typename Derived> |
| class MatrixLogarithmReturnValue; |
| template <typename Derived> |
| class MatrixPowerReturnValue; |
| template <typename Derived> |
| class MatrixComplexPowerReturnValue; |
| |
| namespace internal { |
| template <typename Scalar> |
| struct stem_function { |
| typedef std::complex<typename NumTraits<Scalar>::Real> ComplexScalar; |
| typedef ComplexScalar type(ComplexScalar, int); |
| }; |
| } // namespace internal |
| |
| } // end namespace Eigen |
| |
| #endif // EIGEN_FORWARDDECLARATIONS_H |