// This file is part of Eigen, a lightweight C++ template library // for linear algebra. // // Copyright (C) 2007-2010 Benoit Jacob // Copyright (C) 2008-2009 Gael Guennebaud // // 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 struct traits; // here we say once and for all that traits == traits // When constness must affect traits, it has to be constness on template parameters on which T itself depends. // For example, traits > != traits >, but // traits > == traits > template struct traits : traits {}; template struct has_direct_access { enum { ret = (traits::Flags & DirectAccessBit) ? 1 : 0 }; }; template struct accessors_level { enum { has_direct_access = (traits::Flags & DirectAccessBit) ? 1 : 0, has_write_access = (traits::Flags & LvalueBit) ? 1 : 0, value = has_direct_access ? (has_write_access ? DirectWriteAccessors : DirectAccessors) : (has_write_access ? WriteAccessors : ReadOnlyAccessors) }; }; template struct evaluator_traits; template struct evaluator; } // end namespace internal template struct NumTraits; template struct EigenBase; template class DenseBase; template class PlainObjectBase; template class DenseCoeffsBase; template class Matrix; template class MatrixBase; template class ArrayBase; template class Flagged; template class StorageBase> class NoAlias; template class NestByValue; template class ForceAlignedAccess; template class SwapWrapper; template class Block; template class IndexedView; template class Reshaped; template class ArithmeticSequence; template class VectorBlock; template class Transpose; template class Conjugate; template class CwiseNullaryOp; template class CwiseUnaryOp; template class CwiseBinaryOp; template class CwiseTernaryOp; template class Solve; template class Inverse; template class Product; template class DiagonalBase; template class DiagonalWrapper; template class DiagonalMatrix; template class DiagonalProduct; template class Diagonal; template class SkewSymmetricBase; template class SkewSymmetricWrapper; template class SkewSymmetricMatrix3; template class PermutationMatrix; template class Transpositions; template class PermutationBase; template class TranspositionsBase; template class PermutationWrapper; template class TranspositionsWrapper; template ::has_write_access ? WriteAccessors : ReadOnlyAccessors> class MapBase; template class Stride; template class InnerStride; template class OuterStride; template > class Map; template class RefBase; template , OuterStride<>>> class Ref; template > class CwiseUnaryView; template class TriangularBase; template class TriangularView; template class SelfAdjointView; template class SparseView; template class WithFormat; template struct CommaInitializer; template class ReturnByValue; template class ArrayWrapper; template class MatrixWrapper; template class SolverBase; template class InnerIterator; namespace internal { template class generic_randaccess_stl_iterator; template class pointer_based_stl_iterator; template class subvector_stl_iterator; template class subvector_stl_reverse_iterator; template struct kernel_retval_base; template struct kernel_retval; template struct image_retval_base; template struct image_retval; } // end namespace internal namespace internal { template class BandMatrix; } namespace internal { template struct product_type; template struct EnableIf; /** \internal * \class product_evaluator * Products need their own evaluator with more template arguments allowing for * easier partial template specializations. */ template ::ret, typename LhsShape = typename evaluator_traits::Shape, typename RhsShape = typename evaluator_traits::Shape, typename LhsScalar = typename traits::Scalar, typename RhsScalar = typename traits::Scalar> struct product_evaluator; } // namespace internal template ::value> struct ProductReturnType; // this is a workaround for sun CC template struct LazyProductReturnType; namespace internal { // Provides scalar/packet-wise product and product with accumulation // with optional conjugation of the arguments. template struct conj_helper; template struct scalar_sum_op; template struct scalar_difference_op; template struct scalar_conj_product_op; template struct scalar_min_op; template struct scalar_max_op; template struct scalar_opposite_op; template struct scalar_conjugate_op; template struct scalar_real_op; template struct scalar_imag_op; template struct scalar_abs_op; template struct scalar_abs2_op; template struct scalar_absolute_difference_op; template struct scalar_sqrt_op; template struct scalar_cbrt_op; template struct scalar_rsqrt_op; template struct scalar_exp_op; template struct scalar_log_op; template struct scalar_cos_op; template struct scalar_sin_op; template struct scalar_acos_op; template struct scalar_asin_op; template struct scalar_tan_op; template struct scalar_atan_op; template struct scalar_atan2_op; template struct scalar_inverse_op; template struct scalar_square_op; template struct scalar_cube_op; template struct scalar_cast_op; template struct scalar_random_op; template struct scalar_constant_op; template struct scalar_identity_op; template struct scalar_sign_op; template struct scalar_pow_op; template struct scalar_unary_pow_op; template struct scalar_hypot_op; template struct scalar_product_op; template struct scalar_quotient_op; // logical and bitwise operations template struct scalar_boolean_and_op; template struct scalar_boolean_or_op; template struct scalar_boolean_xor_op; template struct scalar_boolean_not_op; template struct scalar_bitwise_and_op; template struct scalar_bitwise_or_op; template struct scalar_bitwise_xor_op; template struct scalar_bitwise_not_op; // SpecialFunctions module template struct scalar_lgamma_op; template struct scalar_digamma_op; template struct scalar_erf_op; template struct scalar_erfc_op; template struct scalar_ndtri_op; template struct scalar_igamma_op; template struct scalar_igammac_op; template struct scalar_zeta_op; template struct scalar_betainc_op; // Bessel functions in SpecialFunctions module template struct scalar_bessel_i0_op; template struct scalar_bessel_i0e_op; template struct scalar_bessel_i1_op; template struct scalar_bessel_i1e_op; template struct scalar_bessel_j0_op; template struct scalar_bessel_y0_op; template struct scalar_bessel_j1_op; template struct scalar_bessel_y1_op; template struct scalar_bessel_k0_op; template struct scalar_bessel_k0e_op; template struct scalar_bessel_k1_op; template struct scalar_bessel_k1e_op; } // end namespace internal struct IOFormat; // Array module template class Array; template class Select; template class PartialReduxExpr; template class VectorwiseOp; template class Replicate; template 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 class FullPivLU; template class PartialPivLU; namespace internal { template struct inverse_impl; } template class HouseholderQR; template class ColPivHouseholderQR; template class FullPivHouseholderQR; template class CompleteOrthogonalDecomposition; template class SVDBase; template class JacobiSVD; template class BDCSVD; template class LLT; template class LDLT; template class HouseholderSequence; template class JacobiRotation; // Geometry module: namespace internal { template ::SizeAtCompileTime> struct cross_impl; } template class RotationBase; template class QuaternionBase; template class Rotation2D; template class AngleAxis; template class Translation; template class AlignedBox; template class Quaternion; template class Transform; template class ParametrizedLine; template class Hyperplane; template class UniformScaling; template class Homogeneous; // Sparse module: template class SparseMatrixBase; // MatrixFunctions module template struct MatrixExponentialReturnValue; template class MatrixFunctionReturnValue; template class MatrixSquareRootReturnValue; template class MatrixLogarithmReturnValue; template class MatrixPowerReturnValue; template class MatrixComplexPowerReturnValue; namespace internal { template struct stem_function { typedef internal::make_complex_t ComplexScalar; typedef ComplexScalar type(ComplexScalar, int); }; } // namespace internal template struct DeviceWrapper; namespace internal { template struct eigen_fill_helper; template ::value> struct eigen_fill_impl; template struct eigen_memset_helper; template ::value> struct eigen_zero_impl; template struct has_packet_segment : std::false_type {}; template struct enable_packet_segment : std::true_type {}; } // namespace internal } // end namespace Eigen #endif // EIGEN_FORWARDDECLARATIONS_H