19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// This file is part of Eigen, a lightweight C++ template library 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// for linear algebra. 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// Copyright (C) 2007-2010 Benoit Jacob <jacob.benoit.1@gmail.com> 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr> 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// This Source Code Form is subject to the terms of the Mozilla 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// Public License v. 2.0. If a copy of the MPL was not distributed 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#ifndef EIGEN_FORWARDDECLARATIONS_H 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#define EIGEN_FORWARDDECLARATIONS_H 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonnamespace Eigen { 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonnamespace internal { 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename T> struct traits; 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// here we say once and for all that traits<const T> == traits<T> 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// When constness must affect traits, it has to be constness on template parameters on which T itself depends. 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// For example, traits<Map<const T> > != traits<Map<T> >, but 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// traits<const Map<T> > == traits<Map<T> > 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename T> struct traits<const T> : traits<T> {}; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> struct has_direct_access 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson enum { ret = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0 }; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> struct accessors_level 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson enum { has_direct_access = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0, 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson has_write_access = (traits<Derived>::Flags & LvalueBit) ? 1 : 0, 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson value = has_direct_access ? (has_write_access ? DirectWriteAccessors : DirectAccessors) 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson : (has_write_access ? WriteAccessors : ReadOnlyAccessors) 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }; 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson}; 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} // end namespace internal 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename T> struct NumTraits; 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> struct EigenBase; 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class DenseBase; 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class PlainObjectBase; 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived, 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int Level = internal::accessors_level<Derived>::value > 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonclass DenseCoeffsBase; 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename _Scalar, int _Rows, int _Cols, 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int _Options = AutoAlign | 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==4 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // workaround a bug in at least gcc 3.4.6 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the innermost ?: ternary operator is misparsed. We write it slightly 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // differently and this makes gcc 3.4.6 happy, but it's ugly. 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ( (_Rows==1 && _Cols!=1) ? RowMajor 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson : ColMajor ), 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#else 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ( (_Rows==1 && _Cols!=1) ? RowMajor 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson : (_Cols==1 && _Rows!=1) ? ColMajor 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson#endif 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int _MaxRows = _Rows, 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int _MaxCols = _Cols 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson> class Matrix; 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class MatrixBase; 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class ArrayBase; 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType, unsigned int Added, unsigned int Removed> class Flagged; 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType, template <typename> class StorageBase > class NoAlias; 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType> class NestByValue; 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType> class ForceAlignedAccess; 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType> class SwapWrapper; 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename XprType, int BlockRows=Dynamic, int BlockCols=Dynamic, bool InnerPanel = false, 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson bool HasDirectAccess = internal::has_direct_access<XprType>::ret> class Block; 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType, int Size=Dynamic> class VectorBlock; 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType> class Transpose; 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType> class Conjugate; 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename NullaryOp, typename MatrixType> class CwiseNullaryOp; 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename UnaryOp, typename MatrixType> class CwiseUnaryOp; 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ViewOp, typename MatrixType> class CwiseUnaryView; 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename BinaryOp, typename Lhs, typename Rhs> class CwiseBinaryOp; 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename BinOp, typename Lhs, typename Rhs> class SelfCwiseBinaryOp; 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived, typename Lhs, typename Rhs> class ProductBase; 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Lhs, typename Rhs, int Mode> class GeneralProduct; 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Lhs, typename Rhs, int NestingFlags> class CoeffBasedProduct; 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class DiagonalBase; 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename _DiagonalVectorType> class DiagonalWrapper; 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename _Scalar, int SizeAtCompileTime, int MaxSizeAtCompileTime=SizeAtCompileTime> class DiagonalMatrix; 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType, typename DiagonalType, int ProductOrder> class DiagonalProduct; 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType, int Index = 0> class Diagonal; 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class PermutationMatrix; 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType=int> class Transpositions; 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class PermutationBase; 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class TranspositionsBase; 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename _IndicesType> class PermutationWrapper; 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename _IndicesType> class TranspositionsWrapper; 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived, 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson> class MapBase; 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<int InnerStrideAtCompileTime, int OuterStrideAtCompileTime> class Stride; 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType, int MapOptions=Unaligned, typename StrideType = Stride<0,0> > class Map; 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class TriangularBase; 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType, unsigned int Mode> class TriangularView; 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType, unsigned int Mode> class SelfAdjointView; 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType> class SparseView; 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType> class WithFormat; 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename MatrixType> struct CommaInitializer; 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Derived> class ReturnByValue; 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType> class ArrayWrapper; 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename ExpressionType> class MatrixWrapper; 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonnamespace internal { 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename DecompositionType, typename Rhs> struct solve_retval_base; 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename DecompositionType, typename Rhs> struct solve_retval; 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename DecompositionType> struct kernel_retval_base; 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename DecompositionType> struct kernel_retval; 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename DecompositionType> struct image_retval_base; 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename DecompositionType> struct image_retval; 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} // end namespace internal 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonnamespace internal { 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename _Scalar, int Rows=Dynamic, int Cols=Dynamic, int Supers=Dynamic, int Subs=Dynamic, int Options=0> class BandMatrix; 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonnamespace internal { 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Lhs, typename Rhs> struct product_type; 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Lhs, typename Rhs, 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int ProductType = internal::product_type<Lhs,Rhs>::value> 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonstruct ProductReturnType; 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// this is a workaround for sun CC 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Lhs, typename Rhs> struct LazyProductReturnType; 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonnamespace internal { 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// Provides scalar/packet-wise product and product with accumulation 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// with optional conjugation of the arguments. 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename LhsScalar, typename RhsScalar, bool ConjLhs=false, bool ConjRhs=false> struct conj_helper; 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_sum_op; 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_difference_op; 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename LhsScalar,typename RhsScalar> struct scalar_conj_product_op; 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_quotient_op; 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_opposite_op; 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_conjugate_op; 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_real_op; 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_imag_op; 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_abs_op; 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_abs2_op; 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_sqrt_op; 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_exp_op; 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_log_op; 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_cos_op; 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_sin_op; 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_acos_op; 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_asin_op; 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_tan_op; 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_pow_op; 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_inverse_op; 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_square_op; 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_cube_op; 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar, typename NewType> struct scalar_cast_op; 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_multiple_op; 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_quotient1_op; 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_min_op; 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_max_op; 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_random_op; 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_add_op; 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_constant_op; 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsontemplate<typename Scalar> struct scalar_identity_op; 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 186template<typename LhsScalar,typename RhsScalar=LhsScalar> struct scalar_product_op; 187template<typename LhsScalar,typename RhsScalar> struct scalar_multiple2_op; 188 189} // end namespace internal 190 191struct IOFormat; 192 193// Array module 194template<typename _Scalar, int _Rows, int _Cols, 195 int _Options = AutoAlign | 196#if defined(__GNUC__) && __GNUC__==3 && __GNUC_MINOR__==4 197 // workaround a bug in at least gcc 3.4.6 198 // the innermost ?: ternary operator is misparsed. We write it slightly 199 // differently and this makes gcc 3.4.6 happy, but it's ugly. 200 // The error would only show up with EIGEN_DEFAULT_TO_ROW_MAJOR is defined 201 // (when EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION is RowMajor) 202 ( (_Rows==1 && _Cols!=1) ? RowMajor 203 : !(_Cols==1 && _Rows!=1) ? EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION 204 : ColMajor ), 205#else 206 ( (_Rows==1 && _Cols!=1) ? RowMajor 207 : (_Cols==1 && _Rows!=1) ? ColMajor 208 : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ), 209#endif 210 int _MaxRows = _Rows, int _MaxCols = _Cols> class Array; 211template<typename ConditionMatrixType, typename ThenMatrixType, typename ElseMatrixType> class Select; 212template<typename MatrixType, typename BinaryOp, int Direction> class PartialReduxExpr; 213template<typename ExpressionType, int Direction> class VectorwiseOp; 214template<typename MatrixType,int RowFactor,int ColFactor> class Replicate; 215template<typename MatrixType, int Direction = BothDirections> class Reverse; 216 217template<typename MatrixType> class FullPivLU; 218template<typename MatrixType> class PartialPivLU; 219namespace internal { 220template<typename MatrixType> struct inverse_impl; 221} 222template<typename MatrixType> class HouseholderQR; 223template<typename MatrixType> class ColPivHouseholderQR; 224template<typename MatrixType> class FullPivHouseholderQR; 225template<typename MatrixType, int QRPreconditioner = ColPivHouseholderQRPreconditioner> class JacobiSVD; 226template<typename MatrixType, int UpLo = Lower> class LLT; 227template<typename MatrixType, int UpLo = Lower> class LDLT; 228template<typename VectorsType, typename CoeffsType, int Side=OnTheLeft> class HouseholderSequence; 229template<typename Scalar> class JacobiRotation; 230 231// Geometry module: 232template<typename Derived, int _Dim> class RotationBase; 233template<typename Lhs, typename Rhs> class Cross; 234template<typename Derived> class QuaternionBase; 235template<typename Scalar> class Rotation2D; 236template<typename Scalar> class AngleAxis; 237template<typename Scalar,int Dim> class Translation; 238 239#ifdef EIGEN2_SUPPORT 240template<typename Derived, int _Dim> class eigen2_RotationBase; 241template<typename Lhs, typename Rhs> class eigen2_Cross; 242template<typename Scalar> class eigen2_Quaternion; 243template<typename Scalar> class eigen2_Rotation2D; 244template<typename Scalar> class eigen2_AngleAxis; 245template<typename Scalar,int Dim> class eigen2_Transform; 246template <typename _Scalar, int _AmbientDim> class eigen2_ParametrizedLine; 247template <typename _Scalar, int _AmbientDim> class eigen2_Hyperplane; 248template<typename Scalar,int Dim> class eigen2_Translation; 249template<typename Scalar,int Dim> class eigen2_Scaling; 250#endif 251 252#if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS 253template<typename Scalar> class Quaternion; 254template<typename Scalar,int Dim> class Transform; 255template <typename _Scalar, int _AmbientDim> class ParametrizedLine; 256template <typename _Scalar, int _AmbientDim> class Hyperplane; 257template<typename Scalar,int Dim> class Scaling; 258#endif 259 260#if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS 261template<typename Scalar, int Options = AutoAlign> class Quaternion; 262template<typename Scalar,int Dim,int Mode,int _Options=AutoAlign> class Transform; 263template <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class ParametrizedLine; 264template <typename _Scalar, int _AmbientDim, int Options=AutoAlign> class Hyperplane; 265template<typename Scalar> class UniformScaling; 266template<typename MatrixType,int Direction> class Homogeneous; 267#endif 268 269// MatrixFunctions module 270template<typename Derived> struct MatrixExponentialReturnValue; 271template<typename Derived> class MatrixFunctionReturnValue; 272template<typename Derived> class MatrixSquareRootReturnValue; 273template<typename Derived> class MatrixLogarithmReturnValue; 274 275namespace internal { 276template <typename Scalar> 277struct stem_function 278{ 279 typedef std::complex<typename NumTraits<Scalar>::Real> ComplexScalar; 280 typedef ComplexScalar type(ComplexScalar, int); 281}; 282} 283 284 285#ifdef EIGEN2_SUPPORT 286template<typename ExpressionType> class Cwise; 287template<typename MatrixType> class Minor; 288template<typename MatrixType> class LU; 289template<typename MatrixType> class QR; 290template<typename MatrixType> class SVD; 291namespace internal { 292template<typename MatrixType, unsigned int Mode> struct eigen2_part_return_type; 293} 294#endif 295 296} // end namespace Eigen 297 298#endif // EIGEN_FORWARDDECLARATIONS_H 299