ForwardDeclarations.h revision c981c48f5bc9aefeffc0bcb0cc3934c2fae179dd
19e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// This file is part of Eigen, a lightweight C++ template library 23b9fd99cb78383e0ce8cd1a31e3b824a30ef965eLassi Tuura// for linear algebra. 39e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// 49e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// Copyright (C) 2007-2010 Benoit Jacob <jacob.benoit.1@gmail.com> 59e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr> 69e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// 79e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// This Source Code Form is subject to the terms of the Mozilla 89e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// Public License v. 2.0. If a copy of the MPL was not distributed 99e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 109e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 119e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#ifndef EIGEN_FORWARDDECLARATIONS_H 129e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#define EIGEN_FORWARDDECLARATIONS_H 139e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 149e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuranamespace Eigen { 159e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuranamespace internal { 169e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 179e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename T> struct traits; 189e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 199e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// here we say once and for all that traits<const T> == traits<T> 209e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// When constness must affect traits, it has to be constness on template parameters on which T itself depends. 219e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// For example, traits<Map<const T> > != traits<Map<T> >, but 229e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// traits<const Map<T> > == traits<Map<T> > 239e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename T> struct traits<const T> : traits<T> {}; 249e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 259e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived> struct has_direct_access 269e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura{ 279e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura enum { ret = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0 }; 280a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma}; 299e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 3044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> struct accessors_level 3144a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura{ 3244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura enum { has_direct_access = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0, 3344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura has_write_access = (traits<Derived>::Flags & LvalueBit) ? 1 : 0, 3444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura value = has_direct_access ? (has_write_access ? DirectWriteAccessors : DirectAccessors) 35d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura : (has_write_access ? WriteAccessors : ReadOnlyAccessors) 36d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura }; 379e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura}; 3844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 3944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura} // end namespace internal 40d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura 41d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename T> struct NumTraits; 4244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 430a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename Derived> struct EigenBase; 440a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename Derived> class DenseBase; 4544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> class PlainObjectBase; 4644a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 4744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 48aebba1f8a7dee9b9ae3e70128ad48de69ca90b15Tommi Rantalatemplate<typename Derived, 4944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura int Level = internal::accessors_level<Derived>::value > 5008077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmaclass DenseCoeffsBase; 5144a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 5244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename _Scalar, int _Rows, int _Cols, 530a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma int _Options = AutoAlign | 540a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==4 5544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // workaround a bug in at least gcc 3.4.6 5644a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // the innermost ?: ternary operator is misparsed. We write it slightly 5744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // differently and this makes gcc 3.4.6 happy, but it's ugly. 5844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 599e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 6044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura ( (_Rows==1 && _Cols!=1) ? RowMajor 610a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 620a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma : ColMajor ), 630a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma#else 640a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma ( (_Rows==1 && _Cols!=1) ? RowMajor 650a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma : (_Cols==1 && _Rows!=1) ? ColMajor 660a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 670a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma#endif 680a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma int _MaxRows = _Rows, 6952ca68c770e9128940748bab72a5b103057166a8Arun Sharma int _MaxCols = _Cols 7052ca68c770e9128940748bab72a5b103057166a8Arun Sharma> class Matrix; 71d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura 7244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> class MatrixBase; 7344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> class ArrayBase; 7444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 7544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename ExpressionType, unsigned int Added, unsigned int Removed> class Flagged; 7644a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename ExpressionType, template <typename> class StorageBase > class NoAlias; 7744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename ExpressionType> class NestByValue; 7844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename ExpressionType> class ForceAlignedAccess; 7944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename ExpressionType> class SwapWrapper; 8044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 81d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false, 8208077a4962c4e606598f9f0e54b515b3c882be10Arun Sharma bool HasDirectAccess = internal::has_direct_access<XprType>::ret> class Block; 8344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 8444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType, int Size=Dynamic> class VectorBlock; 8544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType> class Transpose; 86d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename MatrixType> class Conjugate; 8744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename NullaryOp, typename MatrixType> class CwiseNullaryOp; 88d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename UnaryOp, typename MatrixType> class CwiseUnaryOp; 8944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename ViewOp, typename MatrixType> class CwiseUnaryView; 9044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename BinaryOp, typename Lhs, typename Rhs> class CwiseBinaryOp; 91d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename BinOp, typename Lhs, typename Rhs> class SelfCwiseBinaryOp; 92890e23eb9d3ffd9be2a025189a21794b5ed0e0ffTommi Rantalatemplate<typename Derived, typename Lhs, typename Rhs> class ProductBase; 93d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename Lhs, typename Rhs, int Mode> class GeneralProduct; 9444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Lhs, typename Rhs, int NestingFlags> class CoeffBasedProduct; 9544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 9644a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> class DiagonalBase; 9744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename _DiagonalVectorType> class DiagonalWrapper; 9844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename _Scalar, int SizeAtCompileTime, int MaxSizeAtCompileTime=SizeAtCompileTime> class DiagonalMatrix; 9944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType, typename DiagonalType, int ProductOrder> class DiagonalProduct; 10044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType, int Index = 0> class Diagonal; 10144a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class PermutationMatrix; 10244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class Transpositions; 10344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> class PermutationBase; 10444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> class TranspositionsBase; 10544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename _IndicesType> class PermutationWrapper; 10644a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename _IndicesType> class TranspositionsWrapper; 1070a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma 1080a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename Derived, 1090a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors 1100a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma> class MapBase; 1110a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<int InnerStrideAtCompileTime, int OuterStrideAtCompileTime> class Stride; 1120a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename MatrixType, int MapOptions=Unaligned, typename StrideType = Stride<0,0> > class Map; 1130a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma 1140a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename Derived> class TriangularBase; 1150a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename MatrixType, unsigned int Mode> class TriangularView; 11644a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType, unsigned int Mode> class SelfAdjointView; 11744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType> class SparseView; 11844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename ExpressionType> class WithFormat; 1190a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename MatrixType> struct CommaInitializer; 12044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Derived> class ReturnByValue; 1219e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename ExpressionType> class ArrayWrapper; 122d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename ExpressionType> class MatrixWrapper; 12344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 12444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuranamespace internal { 12544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename DecompositionType, typename Rhs> struct solve_retval_base; 1260a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharmatemplate<typename DecompositionType, typename Rhs> struct solve_retval; 12744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename DecompositionType> struct kernel_retval_base; 1289e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename DecompositionType> struct kernel_retval; 129d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename DecompositionType> struct image_retval_base; 13044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename DecompositionType> struct image_retval; 1310a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma} // end namespace internal 1320a26727ea2b3b9afd8d019a91777f350d06dd8dcArun Sharma 13344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuranamespace internal { 13444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename _Scalar, int Rows=Dynamic, int Cols=Dynamic, int Supers=Dynamic, int Subs=Dynamic, int Options=0> class BandMatrix; 1359e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura} 1369e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 13744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuranamespace internal { 13844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Lhs, typename Rhs> struct product_type; 13944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura} 14044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 1419e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Lhs, typename Rhs, 142d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura int ProductType = internal::product_type<Lhs,Rhs>::value> 143d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuurastruct ProductReturnType; 144d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura 145d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura// this is a workaround for sun CC 146d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename Lhs, typename Rhs> struct LazyProductReturnType; 14744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 148d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuranamespace internal { 14944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 15044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura// Provides scalar/packet-wise product and product with accumulation 15144a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura// with optional conjugation of the arguments. 152d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename LhsScalar, typename RhsScalar, bool ConjLhs=false, bool ConjRhs=false> struct conj_helper; 153d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura 154d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename Scalar> struct scalar_sum_op; 155d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename Scalar> struct scalar_difference_op; 156f1ea02be58c2127cc655ef3fd6a385a1bd22cdcdLassi Tuuratemplate<typename LhsScalar,typename RhsScalar> struct scalar_conj_product_op; 1579e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> struct scalar_quotient_op; 1589e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> struct scalar_opposite_op; 1599e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> struct scalar_conjugate_op; 16008077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_real_op; 16108077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_imag_op; 16208077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_abs_op; 16308077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_abs2_op; 16408077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_sqrt_op; 165890e23eb9d3ffd9be2a025189a21794b5ed0e0ffTommi Rantalatemplate<typename Scalar> struct scalar_exp_op; 16608077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_log_op; 16708077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_cos_op; 16808077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_sin_op; 16908077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_acos_op; 17008077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_asin_op; 17108077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_tan_op; 17208077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_pow_op; 17308077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_inverse_op; 17408077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_square_op; 17508077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_cube_op; 17608077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar, typename NewType> struct scalar_cast_op; 17708077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename Scalar> struct scalar_multiple_op; 17844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Scalar> struct scalar_quotient1_op; 17944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Scalar> struct scalar_min_op; 18044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Scalar> struct scalar_max_op; 18144a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Scalar> struct scalar_random_op; 18244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Scalar> struct scalar_add_op; 183890e23eb9d3ffd9be2a025189a21794b5ed0e0ffTommi Rantalatemplate<typename Scalar> struct scalar_constant_op; 18444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename Scalar> struct scalar_identity_op; 18544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 18608077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_product_op; 18708077a4962c4e606598f9f0e54b515b3c882be10Arun Sharmatemplate<typename LhsScalar,typename RhsScalar> struct scalar_multiple2_op; 18808077a4962c4e606598f9f0e54b515b3c882be10Arun Sharma 18908077a4962c4e606598f9f0e54b515b3c882be10Arun Sharma} // end namespace internal 19015f182828d88ea51d419d94b3daabb7a69181c78Arun Sharma 19144a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuurastruct IOFormat; 19244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 19344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura// Array module 19415f182828d88ea51d419d94b3daabb7a69181c78Arun Sharmatemplate<typename _Scalar, int _Rows, int _Cols, 19544a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura int _Options = AutoAlign | 19644a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==4 19744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // workaround a bug in at least gcc 3.4.6 19844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // the innermost ?: ternary operator is misparsed. We write it slightly 19944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // differently and this makes gcc 3.4.6 happy, but it's ugly. 20044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 20108077a4962c4e606598f9f0e54b515b3c882be10Arun Sharma // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 20244a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura ( (_Rows==1 && _Cols!=1) ? RowMajor 20344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 20444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura : ColMajor ), 2059e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#else 2069e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura ( (_Rows==1 && _Cols!=1) ? RowMajor 2079e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura : (_Cols==1 && _Rows!=1) ? ColMajor 2089e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 2099e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#endif 2109e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura int _MaxRows = _Rows, int _MaxCols = _Cols> class Array; 2119e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType> class Select; 2129e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType, typename BinaryOp, int Direction> class PartialReduxExpr; 2139e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename ExpressionType, int Direction> class VectorwiseOp; 2149e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType,int RowFactor,int ColFactor> class Replicate; 2159e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType, int Direction = BothDirections> class Reverse; 2169e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2179e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType> class FullPivLU; 2189e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType> class PartialPivLU; 2199e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuranamespace internal { 2209e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType> struct inverse_impl; 2219e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura} 2229e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType> class HouseholderQR; 2239e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType> class ColPivHouseholderQR; 2249e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType> class FullPivHouseholderQR; 2259e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType, int QRPreconditioner = ColPivHouseholderQRPreconditioner> class JacobiSVD; 2269e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType, int UpLo = Lower> class LLT; 2279e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType, int UpLo = Lower> class LDLT; 2289e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename VectorsType, typename CoeffsType, int Side=OnTheLeft> class HouseholderSequence; 2299e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class JacobiRotation; 2309e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2319e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// Geometry module: 2329e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived, int _Dim> class RotationBase; 2339e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Lhs, typename Rhs> class Cross; 2349e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived> class QuaternionBase; 2359e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class Rotation2D; 2369e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class AngleAxis; 2379e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar,int Dim> class Translation; 2389e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2399e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#ifdef EIGEN2_SUPPORT 2409e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived, int _Dim> class eigen2_RotationBase; 2419e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Lhs, typename Rhs> class eigen2_Cross; 2429e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class eigen2_Quaternion; 2439e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class eigen2_Rotation2D; 2449e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class eigen2_AngleAxis; 245ae5c1f2adf4da04235d87d024d4d942c01b2b447Lassi Tuuratemplate<typename Scalar,int Dim> class eigen2_Transform; 246ae5c1f2adf4da04235d87d024d4d942c01b2b447Lassi Tuuratemplate <typename _Scalar, int _AmbientDim> class eigen2_ParametrizedLine; 247ae5c1f2adf4da04235d87d024d4d942c01b2b447Lassi Tuuratemplate <typename _Scalar, int _AmbientDim> class eigen2_Hyperplane; 248ae5c1f2adf4da04235d87d024d4d942c01b2b447Lassi Tuuratemplate<typename Scalar,int Dim> class eigen2_Translation; 2499e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar,int Dim> class eigen2_Scaling; 2509e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#endif 2519e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2529e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS 2539e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class Quaternion; 2549e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar,int Dim> class Transform; 2559e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate <typename _Scalar, int _AmbientDim> class ParametrizedLine; 2569e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate <typename _Scalar, int _AmbientDim> class Hyperplane; 2579e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar,int Dim> class Scaling; 2589e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#endif 2599e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2609e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS 2619e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar, int Options = AutoAlign> class Quaternion; 2629e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar,int Dim,int Mode,int _Options=AutoAlign> class Transform; 2639e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class ParametrizedLine; 2649e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class Hyperplane; 2659e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Scalar> class UniformScaling; 2669e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType,int Direction> class Homogeneous; 2679e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#endif 2689e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2699e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura// MatrixFunctions module 2709e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived> struct MatrixExponentialReturnValue; 2719e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived> class MatrixFunctionReturnValue; 2729e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived> class MatrixSquareRootReturnValue; 2739e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename Derived> class MatrixLogarithmReturnValue; 27444a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura 2759e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuranamespace internal { 2769e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate <typename Scalar> 2779e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuurastruct stem_function 2789e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura{ 2799e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura typedef std::complex<typename NumTraits<Scalar>::Real> ComplexScalar; 2809e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura typedef ComplexScalar type(ComplexScalar, int); 2819e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura}; 2829e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura} 2839e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2849e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 285d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuura#ifdef EIGEN2_SUPPORT 286d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename ExpressionType> class Cwise; 28744a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType> class Minor; 28844a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType> class LU; 2899e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuratemplate<typename MatrixType> class QR; 29044a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuuratemplate<typename MatrixType> class SVD; 2919e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuuranamespace internal { 292d2525ec9369525c4d089eeffc84b417fd9c9aea7Lassi Tuuratemplate<typename MatrixType, unsigned int Mode> struct eigen2_part_return_type; 29344a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura} 2949e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#endif 2959e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 296ae5c1f2adf4da04235d87d024d4d942c01b2b447Lassi Tuura} // end namespace Eigen 2979e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura 2989e98f15e9aee12e67cd5956d06ccb559f6a06213Lassi Tuura#endif // EIGEN_FORWARDDECLARATIONS_H 29944a14d1364abff3dc7ec49f35b7220542c4cf2b1Lassi Tuura