1c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This file is part of Eigen, a lightweight C++ template library 2c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// for linear algebra. 3c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 4c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2007-2010 Benoit Jacob <jacob.benoit.1@gmail.com> 5c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr> 6c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// 7c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// This Source Code Form is subject to the terms of the Mozilla 8c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Public License v. 2.0. If a copy of the MPL was not distributed 9c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 10c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 11c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifndef EIGEN_FORWARDDECLARATIONS_H 12c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#define EIGEN_FORWARDDECLARATIONS_H 13c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 14c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace Eigen { 15c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 16c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 17c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> struct traits; 18c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 19c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// here we say once and for all that traits<const T> == traits<T> 20c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// When constness must affect traits, it has to be constness on template parameters on which T itself depends. 21c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// For example, traits<Map<const T> > != traits<Map<T> >, but 22c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// traits<const Map<T> > == traits<Map<T> > 23c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> struct traits<const T> : traits<T> {}; 24c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 25c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> struct has_direct_access 26c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 27c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath enum { ret = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0 }; 28c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 29c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 30c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> struct accessors_level 31c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 32c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath enum { has_direct_access = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0, 33c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath has_write_access = (traits<Derived>::Flags & LvalueBit) ? 1 : 0, 34c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath value = has_direct_access ? (has_write_access ? DirectWriteAccessors : DirectAccessors) 35c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : (has_write_access ? WriteAccessors : ReadOnlyAccessors) 36c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath }; 37c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 38c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 39c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal 40c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 41c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> struct NumTraits; 42c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> struct EigenBase; 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class DenseBase; 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class PlainObjectBase; 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int Level = internal::accessors_level<Derived>::value > 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass DenseCoeffsBase; 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int _Rows, int _Cols, 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _Options = AutoAlign | 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==4 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // workaround a bug in at least gcc 3.4.6 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // the innermost ?: ternary operator is misparsed. We write it slightly 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // differently and this makes gcc 3.4.6 happy, but it's ugly. 58c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ( (_Rows==1 && _Cols!=1) ? RowMajor 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : ColMajor ), 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 64c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ( (_Rows==1 && _Cols!=1) ? RowMajor 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : (_Cols==1 && _Rows!=1) ? ColMajor 66c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 68c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _MaxRows = _Rows, 69c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _MaxCols = _Cols 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath> class Matrix; 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixBase; 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class ArrayBase; 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType, unsigned int Added, unsigned int Removed> class Flagged; 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType, template <typename> class StorageBase > class NoAlias; 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class NestByValue; 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class ForceAlignedAccess; 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class SwapWrapper; 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 817faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false> class Block; 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int Size=Dynamic> class VectorBlock; 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class Transpose; 85c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class Conjugate; 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename NullaryOp, typename MatrixType> class CwiseNullaryOp; 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename UnaryOp, typename MatrixType> class CwiseUnaryOp; 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ViewOp, typename MatrixType> class CwiseUnaryView; 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename BinaryOp, typename Lhs, typename Rhs> class CwiseBinaryOp; 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename BinOp, typename Lhs, typename Rhs> class SelfCwiseBinaryOp; 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, typename Lhs, typename Rhs> class ProductBase; 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs, int Mode> class GeneralProduct; 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs, int NestingFlags> class CoeffBasedProduct; 94c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 95c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class DiagonalBase; 96c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _DiagonalVectorType> class DiagonalWrapper; 97c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int SizeAtCompileTime, int MaxSizeAtCompileTime=SizeAtCompileTime> class DiagonalMatrix; 98c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, typename DiagonalType, int ProductOrder> class DiagonalProduct; 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int Index = 0> class Diagonal; 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class PermutationMatrix; 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class Transpositions; 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class PermutationBase; 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class TranspositionsBase; 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _IndicesType> class PermutationWrapper; 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _IndicesType> class TranspositionsWrapper; 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath> class MapBase; 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int InnerStrideAtCompileTime, int OuterStrideAtCompileTime> class Stride; 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int MapOptions=Unaligned, typename StrideType = Stride<0,0> > class Map; 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class TriangularBase; 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, unsigned int Mode> class TriangularView; 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, unsigned int Mode> class SelfAdjointView; 116c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class SparseView; 117c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class WithFormat; 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> struct CommaInitializer; 119c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class ReturnByValue; 120c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class ArrayWrapper; 121c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class MatrixWrapper; 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType, typename Rhs> struct solve_retval_base; 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType, typename Rhs> struct solve_retval; 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct kernel_retval_base; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct kernel_retval; 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct image_retval_base; 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct image_retval; 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 132c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 133c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int Rows=Dynamic, int Cols=Dynamic, int Supers=Dynamic, int Subs=Dynamic, int Options=0> class BandMatrix; 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs> struct product_type; 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs, 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int ProductType = internal::product_type<Lhs,Rhs>::value> 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct ProductReturnType; 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// this is a workaround for sun CC 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs> struct LazyProductReturnType; 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 148c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 149c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Provides scalar/packet-wise product and product with accumulation 150c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with optional conjugation of the arguments. 151c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename LhsScalar, typename RhsScalar, bool ConjLhs=false, bool ConjRhs=false> struct conj_helper; 152c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 153c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_sum_op; 154c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_difference_op; 155c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename LhsScalar,typename RhsScalar> struct scalar_conj_product_op; 156c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_opposite_op; 157c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_conjugate_op; 158c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_real_op; 159c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_imag_op; 160c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_abs_op; 161c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_abs2_op; 162c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_sqrt_op; 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_exp_op; 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_log_op; 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_cos_op; 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_sin_op; 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_acos_op; 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_asin_op; 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_tan_op; 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_pow_op; 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_inverse_op; 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_square_op; 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_cube_op; 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, typename NewType> struct scalar_cast_op; 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_multiple_op; 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_quotient1_op; 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_min_op; 178c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_max_op; 179c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_random_op; 180c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_add_op; 181c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_constant_op; 182c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_identity_op; 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_product_op; 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename LhsScalar,typename RhsScalar> struct scalar_multiple2_op; 1867faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_quotient_op; 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 190c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct IOFormat; 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Array module 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int _Rows, int _Cols, 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _Options = AutoAlign | 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==4 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // workaround a bug in at least gcc 3.4.6 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // the innermost ?: ternary operator is misparsed. We write it slightly 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // differently and this makes gcc 3.4.6 happy, but it's ugly. 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ( (_Rows==1 && _Cols!=1) ? RowMajor 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : ColMajor ), 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 205c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath ( (_Rows==1 && _Cols!=1) ? RowMajor 206c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : (_Cols==1 && _Rows!=1) ? ColMajor 207c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 209c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _MaxRows = _Rows, int _MaxCols = _Cols> class Array; 210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType> class Select; 211c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, typename BinaryOp, int Direction> class PartialReduxExpr; 212c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType, int Direction> class VectorwiseOp; 213c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType,int RowFactor,int ColFactor> class Replicate; 214c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int Direction = BothDirections> class Reverse; 215c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 216c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class FullPivLU; 217c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class PartialPivLU; 218c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 219c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> struct inverse_impl; 220c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class HouseholderQR; 222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class ColPivHouseholderQR; 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class FullPivHouseholderQR; 224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int QRPreconditioner = ColPivHouseholderQRPreconditioner> class JacobiSVD; 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int UpLo = Lower> class LLT; 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int UpLo = Lower> class LDLT; 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename VectorsType, typename CoeffsType, int Side=OnTheLeft> class HouseholderSequence; 228c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class JacobiRotation; 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Geometry module: 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, int _Dim> class RotationBase; 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs> class Cross; 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class QuaternionBase; 234c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class Rotation2D; 235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class AngleAxis; 236c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim> class Translation; 237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 238c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifdef EIGEN2_SUPPORT 239c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, int _Dim> class eigen2_RotationBase; 240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs> class eigen2_Cross; 241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class eigen2_Quaternion; 242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class eigen2_Rotation2D; 243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class eigen2_AngleAxis; 244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim> class eigen2_Transform; 245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim> class eigen2_ParametrizedLine; 246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim> class eigen2_Hyperplane; 247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim> class eigen2_Translation; 248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim> class eigen2_Scaling; 249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS 252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class Quaternion; 253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim> class Transform; 254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim> class ParametrizedLine; 255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim> class Hyperplane; 256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim> class Scaling; 257c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 259c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS 260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, int Options = AutoAlign> class Quaternion; 261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim,int Mode,int _Options=AutoAlign> class Transform; 262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class ParametrizedLine; 263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class Hyperplane; 264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class UniformScaling; 265c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType,int Direction> class Homogeneous; 266c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 267c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 268c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MatrixFunctions module 269c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> struct MatrixExponentialReturnValue; 270c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixFunctionReturnValue; 271c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixSquareRootReturnValue; 272c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixLogarithmReturnValue; 2737faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename Derived> class MatrixPowerReturnValue; 2747faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename Derived, typename Lhs, typename Rhs> class MatrixPowerProduct; 275c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 276c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 277c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Scalar> 278c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct stem_function 279c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 280c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef std::complex<typename NumTraits<Scalar>::Real> ComplexScalar; 281c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef ComplexScalar type(ComplexScalar, int); 282c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 283c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 284c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 285c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 286c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#ifdef EIGEN2_SUPPORT 287c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class Cwise; 288c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class Minor; 289c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class LU; 290c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class QR; 291c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class SVD; 292c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 293c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, unsigned int Mode> struct eigen2_part_return_type; 294c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 295c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 296c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 297c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace Eigen 298c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 299c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_FORWARDDECLARATIONS_H 300