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 392b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename T> struct evaluator_traits; 402b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 412b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate< typename T> struct evaluator; 422b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 43c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal 44c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 45c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename T> struct NumTraits; 46c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 47c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> struct EigenBase; 48c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class DenseBase; 49c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class PlainObjectBase; 50c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 51c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 52c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, 53c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int Level = internal::accessors_level<Derived>::value > 54c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathclass DenseCoeffsBase; 55c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 56c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int _Rows, int _Cols, 57c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _Options = AutoAlign | 582b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#if EIGEN_GNUC_AT(3,4) 59c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // workaround a bug in at least gcc 3.4.6 60c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // the innermost ?: ternary operator is misparsed. We write it slightly 61c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // differently and this makes gcc 3.4.6 happy, but it's ugly. 62c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 63c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 642b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang ( (_Rows==1 && _Cols!=1) ? Eigen::RowMajor 65c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 662b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang : Eigen::ColMajor ), 67c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 682b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang ( (_Rows==1 && _Cols!=1) ? Eigen::RowMajor 692b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang : (_Cols==1 && _Rows!=1) ? Eigen::ColMajor 70c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 71c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 72c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _MaxRows = _Rows, 73c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _MaxCols = _Cols 74c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath> class Matrix; 75c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 76c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixBase; 77c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class ArrayBase; 78c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 79c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType, unsigned int Added, unsigned int Removed> class Flagged; 80c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType, template <typename> class StorageBase > class NoAlias; 81c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class NestByValue; 82c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class ForceAlignedAccess; 83c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class SwapWrapper; 84c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 857faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false> class Block; 86c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 87c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int Size=Dynamic> class VectorBlock; 88c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class Transpose; 89c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class Conjugate; 90c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename NullaryOp, typename MatrixType> class CwiseNullaryOp; 91c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename UnaryOp, typename MatrixType> class CwiseUnaryOp; 92c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ViewOp, typename MatrixType> class CwiseUnaryView; 93c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename BinaryOp, typename Lhs, typename Rhs> class CwiseBinaryOp; 942b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename TernaryOp, typename Arg1, typename Arg2, typename Arg3> class CwiseTernaryOp; 952b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Decomposition, typename Rhstype> class Solve; 962b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename XprType> class Inverse; 972b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 982b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Lhs, typename Rhs, int Option = DefaultProduct> class Product; 99c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 100c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class DiagonalBase; 101c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _DiagonalVectorType> class DiagonalWrapper; 102c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int SizeAtCompileTime, int MaxSizeAtCompileTime=SizeAtCompileTime> class DiagonalMatrix; 103c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, typename DiagonalType, int ProductOrder> class DiagonalProduct; 104c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int Index = 0> class Diagonal; 105c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class PermutationMatrix; 106c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class Transpositions; 107c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class PermutationBase; 108c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class TranspositionsBase; 109c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _IndicesType> class PermutationWrapper; 110c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _IndicesType> class TranspositionsWrapper; 111c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 112c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, 113c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors 114c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath> class MapBase; 115c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<int InnerStrideAtCompileTime, int OuterStrideAtCompileTime> class Stride; 1162b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<int Value = Dynamic> class InnerStride; 1172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<int Value = Dynamic> class OuterStride; 118c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int MapOptions=Unaligned, typename StrideType = Stride<0,0> > class Map; 1192b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Derived> class RefBase; 1202b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename PlainObjectType, int Options = 0, 1212b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang typename StrideType = typename internal::conditional<PlainObjectType::IsVectorAtCompileTime,InnerStride<1>,OuterStride<> >::type > class Ref; 122c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 123c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class TriangularBase; 124c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, unsigned int Mode> class TriangularView; 125c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, unsigned int Mode> class SelfAdjointView; 126c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class SparseView; 127c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class WithFormat; 128c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> struct CommaInitializer; 129c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class ReturnByValue; 130c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class ArrayWrapper; 131c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType> class MatrixWrapper; 1322b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Derived> class SolverBase; 1332b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename XprType> class InnerIterator; 134c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 135c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 136c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct kernel_retval_base; 137c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct kernel_retval; 138c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct image_retval_base; 139c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename DecompositionType> struct image_retval; 140c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal 141c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 142c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 143c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int Rows=Dynamic, int Cols=Dynamic, int Supers=Dynamic, int Subs=Dynamic, int Options=0> class BandMatrix; 144c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 145c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 146c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 147c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs> struct product_type; 1482b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 1492b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<bool> struct EnableIf; 1502b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 1512b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang/** \internal 1522b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang * \class product_evaluator 1532b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang * Products need their own evaluator with more template arguments allowing for 1542b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang * easier partial template specializations. 1552b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang */ 1562b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate< typename T, 1572b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang int ProductTag = internal::product_type<typename T::Lhs,typename T::Rhs>::ret, 1582b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang typename LhsShape = typename evaluator_traits<typename T::Lhs>::Shape, 1592b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang typename RhsShape = typename evaluator_traits<typename T::Rhs>::Shape, 1602b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang typename LhsScalar = typename traits<typename T::Lhs>::Scalar, 1612b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang typename RhsScalar = typename traits<typename T::Rhs>::Scalar 1622b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang > struct product_evaluator; 163c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 164c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 165c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs, 166c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int ProductType = internal::product_type<Lhs,Rhs>::value> 167c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct ProductReturnType; 168c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 169c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// this is a workaround for sun CC 170c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs> struct LazyProductReturnType; 171c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 172c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 173c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 174c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Provides scalar/packet-wise product and product with accumulation 175c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// with optional conjugation of the arguments. 176c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename LhsScalar, typename RhsScalar, bool ConjLhs=false, bool ConjRhs=false> struct conj_helper; 177c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 1782b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_sum_op; 1792b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_difference_op; 1802b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_conj_product_op; 1812b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_min_op; 1822b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_max_op; 183c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_opposite_op; 184c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_conjugate_op; 185c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_real_op; 186c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_imag_op; 187c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_abs_op; 188c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_abs2_op; 189c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_sqrt_op; 1902b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_rsqrt_op; 191c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_exp_op; 192c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_log_op; 193c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_cos_op; 194c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_sin_op; 195c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_acos_op; 196c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_asin_op; 197c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_tan_op; 198c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_inverse_op; 199c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_square_op; 200c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_cube_op; 201c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, typename NewType> struct scalar_cast_op; 202c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_random_op; 203c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_constant_op; 204c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> struct scalar_identity_op; 2052b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar,bool iscpx> struct scalar_sign_op; 2062b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar,typename ScalarExponent> struct scalar_pow_op; 2072b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_hypot_op; 208c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_product_op; 2097faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_quotient_op; 210c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 2112b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// SpecialFunctions module 2122b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_lgamma_op; 2132b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_digamma_op; 2142b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_erf_op; 2152b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_erfc_op; 2162b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_igamma_op; 2172b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_igammac_op; 2182b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_zeta_op; 2192b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar> struct scalar_betainc_op; 2202b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 221c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace internal 222c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 223c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct IOFormat; 224c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 225c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Array module 226c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename _Scalar, int _Rows, int _Cols, 227c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _Options = AutoAlign | 2282b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang#if EIGEN_GNUC_AT(3,4) 229c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // workaround a bug in at least gcc 3.4.6 230c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // the innermost ?: ternary operator is misparsed. We write it slightly 231c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // differently and this makes gcc 3.4.6 happy, but it's ugly. 232c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 233c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 2342b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang ( (_Rows==1 && _Cols!=1) ? Eigen::RowMajor 235c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 2362b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang : Eigen::ColMajor ), 237c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#else 2382b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang ( (_Rows==1 && _Cols!=1) ? Eigen::RowMajor 2392b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang : (_Cols==1 && _Rows!=1) ? Eigen::ColMajor 240c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 241c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif 242c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath int _MaxRows = _Rows, int _MaxCols = _Cols> class Array; 243c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType> class Select; 244c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, typename BinaryOp, int Direction> class PartialReduxExpr; 245c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename ExpressionType, int Direction> class VectorwiseOp; 246c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType,int RowFactor,int ColFactor> class Replicate; 247c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int Direction = BothDirections> class Reverse; 248c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 249c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class FullPivLU; 250c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class PartialPivLU; 251c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 252c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> struct inverse_impl; 253c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 254c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class HouseholderQR; 255c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class ColPivHouseholderQR; 256c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType> class FullPivHouseholderQR; 2572b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename MatrixType> class CompleteOrthogonalDecomposition; 258c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int QRPreconditioner = ColPivHouseholderQRPreconditioner> class JacobiSVD; 2592b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename MatrixType> class BDCSVD; 260c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int UpLo = Lower> class LLT; 261c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType, int UpLo = Lower> class LDLT; 262c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename VectorsType, typename CoeffsType, int Side=OnTheLeft> class HouseholderSequence; 263c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class JacobiRotation; 264c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 265c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// Geometry module: 266c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived, int _Dim> class RotationBase; 267c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Lhs, typename Rhs> class Cross; 268c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class QuaternionBase; 269c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class Rotation2D; 270c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class AngleAxis; 271c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim> class Translation; 2722b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Scalar,int Dim> class AlignedBox; 273c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar, int Options = AutoAlign> class Quaternion; 274c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar,int Dim,int Mode,int _Options=AutoAlign> class Transform; 275c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class ParametrizedLine; 276c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class Hyperplane; 277c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Scalar> class UniformScaling; 278c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename MatrixType,int Direction> class Homogeneous; 2792b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang 2802b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wang// Sparse module: 2812b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Derived> class SparseMatrixBase; 282c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 283c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath// MatrixFunctions module 284c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> struct MatrixExponentialReturnValue; 285c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixFunctionReturnValue; 286c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixSquareRootReturnValue; 287c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate<typename Derived> class MatrixLogarithmReturnValue; 2887faaa9f3f0df9d23790277834d426c3d992ac3baCarlos Hernandeztemplate<typename Derived> class MatrixPowerReturnValue; 2892b8756b6f1de65d3f8bffab45be6c44ceb7411fcMiao Wangtemplate<typename Derived> class MatrixComplexPowerReturnValue; 290c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 291c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathnamespace internal { 292c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathtemplate <typename Scalar> 293c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamathstruct stem_function 294c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath{ 295c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef std::complex<typename NumTraits<Scalar>::Real> ComplexScalar; 296c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath typedef ComplexScalar type(ComplexScalar, int); 297c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath}; 298c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} 299c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 300c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath} // end namespace Eigen 301c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath 302c981c48f5bc9aefeffc0bcb0cc3934c2fae179ddNarayan Kamath#endif // EIGEN_FORWARDDECLARATIONS_H 303