// 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 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< typename T, typename Kind = typename evaluator_traits::Kind, typename Scalar = typename T::Scalar> struct evaluator; } // end namespace internal template struct NumTraits; template struct EigenBase; template class DenseBase; template class PlainObjectBase; template::value > 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 VectorBlock; template class Transpose; template class Conjugate; template class CwiseNullaryOp; template class CwiseUnaryOp; template class CwiseUnaryView; template class CwiseBinaryOp; template class SelfCwiseBinaryOp; // TODO deprecated template class ProductBase; namespace internal { template struct product_tag; } template class Product; template class GeneralProduct; // TODO deprecated template class CoeffBasedProduct; // TODO deprecated template class DiagonalBase; template class DiagonalWrapper; template class DiagonalMatrix; template class DiagonalProduct; template class Diagonal; 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<> >::type > class Ref; 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; namespace internal { template struct solve_retval_base; template struct solve_retval; 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::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_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_sqrt_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_pow_op; template struct scalar_inverse_op; template struct scalar_square_op; template struct scalar_cube_op; template struct scalar_cast_op; template struct scalar_multiple_op; template struct scalar_quotient1_op; template struct scalar_min_op; template struct scalar_max_op; template struct scalar_random_op; template struct scalar_add_op; template struct scalar_constant_op; template struct scalar_identity_op; template struct scalar_product_op; template struct scalar_multiple2_op; template struct scalar_quotient_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; template class FullPivLU; template class PartialPivLU; namespace internal { template struct inverse_impl; } template class HouseholderQR; template class ColPivHouseholderQR; template class FullPivHouseholderQR; template class JacobiSVD; template class LLT; template class LDLT; template class HouseholderSequence; template class JacobiRotation; // Geometry module: template class RotationBase; template class Cross; template class QuaternionBase; template class Rotation2D; template class AngleAxis; template class Translation; #ifdef EIGEN2_SUPPORT template class eigen2_RotationBase; template class eigen2_Cross; template class eigen2_Quaternion; template class eigen2_Rotation2D; template class eigen2_AngleAxis; template class eigen2_Transform; template class eigen2_ParametrizedLine; template class eigen2_Hyperplane; template class eigen2_Translation; template class eigen2_Scaling; #endif #if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS template class Quaternion; template class Transform; template class ParametrizedLine; template class Hyperplane; template class Scaling; #endif #if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS template class Quaternion; template class Transform; template class ParametrizedLine; template class Hyperplane; template class UniformScaling; template class Homogeneous; #endif // 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 std::complex::Real> ComplexScalar; typedef ComplexScalar type(ComplexScalar, int); }; } #ifdef EIGEN2_SUPPORT template class Cwise; template class Minor; template class LU; template class QR; template class SVD; namespace internal { template struct eigen2_part_return_type; } #endif } // end namespace Eigen #endif // EIGEN_FORWARDDECLARATIONS_H