Eigen  5.0.1-dev+60122df6
 
Loading...
Searching...
No Matches
ForwardDeclarations.h
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2007-2010 Benoit Jacob <jacob.benoit.1@gmail.com>
5// Copyright (C) 2008-2009 Gael Guennebaud <gael.guennebaud@inria.fr>
6//
7// This Source Code Form is subject to the terms of the Mozilla
8// Public License v. 2.0. If a copy of the MPL was not distributed
9// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
11#ifndef EIGEN_FORWARDDECLARATIONS_H
12#define EIGEN_FORWARDDECLARATIONS_H
13
14// IWYU pragma: private
15#include "../InternalHeaderCheck.h"
16
17namespace Eigen {
18namespace internal {
19
20template <typename T>
21struct traits;
22
23// here we say once and for all that traits<const T> == traits<T>
24// When constness must affect traits, it has to be constness on template parameters on which T itself depends.
25// For example, traits<Map<const T> > != traits<Map<T> >, but
26// traits<const Map<T> > == traits<Map<T> >
27template <typename T>
28struct traits<const T> : traits<T> {};
29
30template <typename Derived>
31struct has_direct_access {
32 enum { ret = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0 };
33};
34
35template <typename Derived>
36struct accessors_level {
37 enum {
38 has_direct_access = (traits<Derived>::Flags & DirectAccessBit) ? 1 : 0,
39 has_write_access = (traits<Derived>::Flags & LvalueBit) ? 1 : 0,
40 value = has_direct_access ? (has_write_access ? DirectWriteAccessors : DirectAccessors)
41 : (has_write_access ? WriteAccessors : ReadOnlyAccessors)
42 };
43};
44
45template <typename T>
46struct evaluator_traits;
47
48template <typename T>
49struct evaluator;
50
51} // end namespace internal
52
53template <typename T>
54struct NumTraits;
55
56template <typename Derived>
57struct EigenBase;
58template <typename Derived>
59class DenseBase;
60template <typename Derived>
61class PlainObjectBase;
62template <typename Derived, int Level>
63class DenseCoeffsBase;
64
65template <typename Scalar_, int Rows_, int Cols_,
66 int Options_ = AutoAlign | ((Rows_ == 1 && Cols_ != 1) ? Eigen::RowMajor
67 : (Cols_ == 1 && Rows_ != 1) ? Eigen::ColMajor
68 : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION),
69 int MaxRows_ = Rows_, int MaxCols_ = Cols_>
70class Matrix;
71
72template <typename Derived>
73class MatrixBase;
74template <typename Derived>
75class ArrayBase;
76
77template <typename ExpressionType, unsigned int Added, unsigned int Removed>
78class Flagged;
79template <typename ExpressionType, template <typename> class StorageBase>
80class NoAlias;
81template <typename ExpressionType>
82class NestByValue;
83template <typename ExpressionType>
84class ForceAlignedAccess;
85template <typename ExpressionType>
86class SwapWrapper;
87
88template <typename XprType, int BlockRows = Dynamic, int BlockCols = Dynamic, bool InnerPanel = false>
89class Block;
90template <typename XprType, typename RowIndices, typename ColIndices>
91class IndexedView;
92template <typename XprType, int Rows = Dynamic, int Cols = Dynamic, int Order = 0>
93class Reshaped;
94template <typename FirstType, typename SizeType, typename IncrType>
95class ArithmeticSequence;
96
97template <typename MatrixType, int Size = Dynamic>
98class VectorBlock;
99template <typename MatrixType>
100class Transpose;
101template <typename MatrixType>
102class Conjugate;
103template <typename NullaryOp, typename MatrixType>
104class CwiseNullaryOp;
105template <typename UnaryOp, typename MatrixType>
106class CwiseUnaryOp;
107template <typename BinaryOp, typename Lhs, typename Rhs>
108class CwiseBinaryOp;
109template <typename TernaryOp, typename Arg1, typename Arg2, typename Arg3>
110class CwiseTernaryOp;
111template <typename Decomposition, typename Rhstype>
112class Solve;
113template <typename XprType>
114class Inverse;
115
116template <typename Lhs, typename Rhs, int Option = DefaultProduct>
117class Product;
118
119template <typename Derived>
120class DiagonalBase;
121template <typename DiagonalVectorType_>
122class DiagonalWrapper;
123template <typename Scalar_, int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime>
124class DiagonalMatrix;
125template <typename MatrixType, typename DiagonalType, int ProductOrder>
126class DiagonalProduct;
127template <typename MatrixType, int Index = 0>
128class Diagonal;
129template <typename Derived>
130class SkewSymmetricBase;
131template <typename VectorType_>
132class SkewSymmetricWrapper;
133template <typename Scalar_>
134class SkewSymmetricMatrix3;
135template <int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType = int>
136class PermutationMatrix;
137template <int SizeAtCompileTime, int MaxSizeAtCompileTime = SizeAtCompileTime, typename IndexType = int>
138class Transpositions;
139template <typename Derived>
140class PermutationBase;
141template <typename Derived>
142class TranspositionsBase;
143template <typename IndicesType_>
144class PermutationWrapper;
145template <typename IndicesType_>
146class TranspositionsWrapper;
147
148template <typename Derived,
149 int Level = internal::accessors_level<Derived>::has_write_access ? WriteAccessors : ReadOnlyAccessors>
150class MapBase;
151template <int OuterStrideAtCompileTime, int InnerStrideAtCompileTime>
152class Stride;
153template <int Value = Dynamic>
154class InnerStride;
155template <int Value = Dynamic>
156class OuterStride;
157template <typename MatrixType, int MapOptions = Unaligned, typename StrideType = Stride<0, 0>>
158class Map;
159template <typename Derived>
160class RefBase;
161template <typename PlainObjectType, int Options = 0,
162 typename StrideType =
163 typename std::conditional_t<PlainObjectType::IsVectorAtCompileTime, InnerStride<1>, OuterStride<>>>
164class Ref;
165template <typename ViewOp, typename MatrixType, typename StrideType = Stride<0, 0>>
166class CwiseUnaryView;
167
168template <typename Derived>
169class TriangularBase;
170template <typename MatrixType, unsigned int Mode>
171class TriangularView;
172template <typename MatrixType, unsigned int Mode>
173class SelfAdjointView;
174template <typename Derived>
175class RealView;
176template <typename MatrixType>
177class SparseView;
178template <typename ExpressionType>
179class WithFormat;
180template <typename MatrixType>
181struct CommaInitializer;
182template <typename Derived>
183class ReturnByValue;
184template <typename ExpressionType>
185class ArrayWrapper;
186template <typename ExpressionType>
187class MatrixWrapper;
188template <typename Derived>
189class SolverBase;
190template <typename XprType>
191class InnerIterator;
192
193namespace internal {
194template <typename XprType>
195class generic_randaccess_stl_iterator;
196template <typename XprType>
197class pointer_based_stl_iterator;
198template <typename XprType, DirectionType Direction>
199class subvector_stl_iterator;
200template <typename XprType, DirectionType Direction>
201class subvector_stl_reverse_iterator;
202template <typename DecompositionType>
203struct kernel_retval_base;
204template <typename DecompositionType>
205struct kernel_retval;
206template <typename DecompositionType>
207struct image_retval_base;
208template <typename DecompositionType>
209struct image_retval;
210} // end namespace internal
211
212namespace internal {
213template <typename Scalar_, int Rows = Dynamic, int Cols = Dynamic, int Supers = Dynamic, int Subs = Dynamic,
214 int Options = 0>
215class BandMatrix;
216}
217
218namespace internal {
219template <typename Lhs, typename Rhs>
220struct product_type;
221
222template <bool>
223struct EnableIf;
224
230template <typename T, int ProductTag = internal::product_type<typename T::Lhs, typename T::Rhs>::ret,
231 typename LhsShape = typename evaluator_traits<typename T::Lhs>::Shape,
232 typename RhsShape = typename evaluator_traits<typename T::Rhs>::Shape,
233 typename LhsScalar = typename traits<typename T::Lhs>::Scalar,
234 typename RhsScalar = typename traits<typename T::Rhs>::Scalar>
235struct product_evaluator;
236} // namespace internal
237
238template <typename Lhs, typename Rhs, int ProductType = internal::product_type<Lhs, Rhs>::value>
239struct ProductReturnType;
240
241// this is a workaround for sun CC
242template <typename Lhs, typename Rhs>
243struct LazyProductReturnType;
244
245namespace internal {
246
247// Provides scalar/packet-wise product and product with accumulation
248// with optional conjugation of the arguments.
249template <typename LhsScalar, typename RhsScalar, bool ConjLhs = false, bool ConjRhs = false>
250struct conj_helper;
251
252template <typename LhsScalar, typename RhsScalar = LhsScalar>
253struct scalar_sum_op;
254template <typename LhsScalar, typename RhsScalar = LhsScalar>
255struct scalar_difference_op;
256template <typename LhsScalar, typename RhsScalar = LhsScalar>
257struct scalar_conj_product_op;
258template <typename LhsScalar, typename RhsScalar = LhsScalar, int NaNPropagation = PropagateFast>
259struct scalar_min_op;
260template <typename LhsScalar, typename RhsScalar = LhsScalar, int NaNPropagation = PropagateFast>
261struct scalar_max_op;
262template <typename Scalar>
263struct scalar_opposite_op;
264template <typename Scalar>
265struct scalar_conjugate_op;
266template <typename Scalar>
267struct scalar_real_op;
268template <typename Scalar>
269struct scalar_imag_op;
270template <typename Scalar>
271struct scalar_abs_op;
272template <typename Scalar>
273struct scalar_abs2_op;
274template <typename LhsScalar, typename RhsScalar = LhsScalar>
275struct scalar_absolute_difference_op;
276template <typename Scalar>
277struct scalar_sqrt_op;
278template <typename Scalar>
279struct scalar_cbrt_op;
280template <typename Scalar>
281struct scalar_rsqrt_op;
282template <typename Scalar>
283struct scalar_exp_op;
284template <typename Scalar>
285struct scalar_log_op;
286template <typename Scalar>
287struct scalar_cos_op;
288template <typename Scalar>
289struct scalar_sin_op;
290template <typename Scalar>
291struct scalar_acos_op;
292template <typename Scalar>
293struct scalar_asin_op;
294template <typename Scalar>
295struct scalar_tan_op;
296template <typename Scalar>
297struct scalar_atan_op;
298template <typename LhsScalar, typename RhsScalar = LhsScalar>
299struct scalar_atan2_op;
300template <typename Scalar>
301struct scalar_inverse_op;
302template <typename Scalar>
303struct scalar_square_op;
304template <typename Scalar>
305struct scalar_cube_op;
306template <typename Scalar, typename NewType>
307struct scalar_cast_op;
308template <typename Scalar>
309struct scalar_random_op;
310template <typename Scalar>
311struct scalar_constant_op;
312template <typename Scalar>
313struct scalar_identity_op;
314template <typename Scalar>
315struct scalar_sign_op;
316template <typename Scalar, typename ScalarExponent>
317struct scalar_pow_op;
318template <typename Scalar, typename ScalarExponent, bool BaseIsInteger, bool ExponentIsInteger, bool BaseIsComplex,
319 bool ExponentIsComplex>
320struct scalar_unary_pow_op;
321template <typename LhsScalar, typename RhsScalar = LhsScalar>
322struct scalar_hypot_op;
323template <typename LhsScalar, typename RhsScalar = LhsScalar>
324struct scalar_product_op;
325template <typename LhsScalar, typename RhsScalar = LhsScalar>
326struct scalar_quotient_op;
327// logical and bitwise operations
328template <typename Scalar>
329struct scalar_boolean_and_op;
330template <typename Scalar>
331struct scalar_boolean_or_op;
332template <typename Scalar>
333struct scalar_boolean_xor_op;
334template <typename Scalar>
335struct scalar_boolean_not_op;
336template <typename Scalar>
337struct scalar_bitwise_and_op;
338template <typename Scalar>
339struct scalar_bitwise_or_op;
340template <typename Scalar>
341struct scalar_bitwise_xor_op;
342template <typename Scalar>
343struct scalar_bitwise_not_op;
344
345// SpecialFunctions module
346template <typename Scalar>
347struct scalar_lgamma_op;
348template <typename Scalar>
349struct scalar_digamma_op;
350template <typename Scalar>
351struct scalar_erf_op;
352template <typename Scalar>
353struct scalar_erfc_op;
354template <typename Scalar>
355struct scalar_ndtri_op;
356template <typename Scalar>
357struct scalar_igamma_op;
358template <typename Scalar>
359struct scalar_igammac_op;
360template <typename Scalar>
361struct scalar_zeta_op;
362template <typename Scalar>
363struct scalar_betainc_op;
364
365// Bessel functions in SpecialFunctions module
366template <typename Scalar>
367struct scalar_bessel_i0_op;
368template <typename Scalar>
369struct scalar_bessel_i0e_op;
370template <typename Scalar>
371struct scalar_bessel_i1_op;
372template <typename Scalar>
373struct scalar_bessel_i1e_op;
374template <typename Scalar>
375struct scalar_bessel_j0_op;
376template <typename Scalar>
377struct scalar_bessel_y0_op;
378template <typename Scalar>
379struct scalar_bessel_j1_op;
380template <typename Scalar>
381struct scalar_bessel_y1_op;
382template <typename Scalar>
383struct scalar_bessel_k0_op;
384template <typename Scalar>
385struct scalar_bessel_k0e_op;
386template <typename Scalar>
387struct scalar_bessel_k1_op;
388template <typename Scalar>
389struct scalar_bessel_k1e_op;
390
391} // end namespace internal
392
393struct IOFormat;
394
395// Array module
396template <typename Scalar_, int Rows_, int Cols_,
397 int Options_ = AutoAlign | ((Rows_ == 1 && Cols_ != 1) ? Eigen::RowMajor
398 : (Cols_ == 1 && Rows_ != 1) ? Eigen::ColMajor
399 : EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION),
400 int MaxRows_ = Rows_, int MaxCols_ = Cols_>
401class Array;
402template <typename MatrixType, typename BinaryOp, int Direction>
403class PartialReduxExpr;
404template <typename ExpressionType, int Direction>
405class VectorwiseOp;
406template <typename MatrixType, int RowFactor, int ColFactor>
407class Replicate;
408template <typename MatrixType, int Direction = BothDirections>
409class Reverse;
410
411#if defined(EIGEN_USE_LAPACKE) && defined(lapack_int)
412// Lapacke interface requires StorageIndex to be lapack_int
413typedef lapack_int DefaultPermutationIndex;
414#else
415typedef int DefaultPermutationIndex;
416#endif
417
418template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex>
419class FullPivLU;
420template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex>
421class PartialPivLU;
422namespace internal {
423template <typename MatrixType>
424struct inverse_impl;
425}
426template <typename MatrixType>
427class HouseholderQR;
428template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex>
429class ColPivHouseholderQR;
430template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex>
431class FullPivHouseholderQR;
432template <typename MatrixType, typename PermutationIndex = DefaultPermutationIndex>
433class CompleteOrthogonalDecomposition;
434template <typename MatrixType>
435class SVDBase;
436template <typename MatrixType, int Options = 0>
437class JacobiSVD;
438template <typename MatrixType, int Options = 0>
439class BDCSVD;
440template <typename MatrixType, int UpLo = Lower>
441class LLT;
442template <typename MatrixType, int UpLo = Lower>
443class LDLT;
444template <typename VectorsType, typename CoeffsType, int Side = OnTheLeft>
445class HouseholderSequence;
446template <typename Scalar>
447class JacobiRotation;
448
449// Geometry module:
450namespace internal {
451template <typename Derived, typename OtherDerived, int Size = MatrixBase<Derived>::SizeAtCompileTime>
452struct cross_impl;
453}
454template <typename Derived, int Dim_>
455class RotationBase;
456template <typename Derived>
457class QuaternionBase;
458template <typename Scalar>
459class Rotation2D;
460template <typename Scalar>
461class AngleAxis;
462template <typename Scalar, int Dim>
463class Translation;
464template <typename Scalar, int Dim>
465class AlignedBox;
466template <typename Scalar, int Options = AutoAlign>
467class Quaternion;
468template <typename Scalar, int Dim, int Mode, int Options_ = AutoAlign>
469class Transform;
470template <typename Scalar_, int AmbientDim_, int Options = AutoAlign>
471class ParametrizedLine;
472template <typename Scalar_, int AmbientDim_, int Options = AutoAlign>
473class Hyperplane;
474template <typename Scalar>
475class UniformScaling;
476template <typename MatrixType, int Direction>
477class Homogeneous;
478
479// Sparse module:
480template <typename Derived>
481class SparseMatrixBase;
482
483// MatrixFunctions module
484template <typename Derived>
485struct MatrixExponentialReturnValue;
486template <typename Derived>
487class MatrixFunctionReturnValue;
488template <typename Derived>
489class MatrixSquareRootReturnValue;
490template <typename Derived>
491class MatrixLogarithmReturnValue;
492template <typename Derived>
493class MatrixPowerReturnValue;
494template <typename Derived>
495class MatrixComplexPowerReturnValue;
496
497namespace internal {
498template <typename Scalar>
499struct stem_function {
500 typedef internal::make_complex_t<Scalar> ComplexScalar;
501 typedef ComplexScalar type(ComplexScalar, int);
502};
503} // namespace internal
504
505template <typename XprType, typename Device>
506struct DeviceWrapper;
507
508namespace internal {
509template <typename Xpr>
510struct eigen_fill_helper;
511template <typename Xpr, bool use_fill = eigen_fill_helper<Xpr>::value>
512struct eigen_fill_impl;
513template <typename Xpr>
514struct eigen_memset_helper;
515template <typename Xpr, bool use_memset = eigen_memset_helper<Xpr>::value>
516struct eigen_zero_impl;
517
518template <typename Packet>
519struct has_packet_segment : std::false_type {};
520} // namespace internal
521
522} // end namespace Eigen
523
524#endif // EIGEN_FORWARDDECLARATIONS_H
@ DirectAccessors
Definition Constants.h:376
@ ReadOnlyAccessors
Definition Constants.h:372
@ WriteAccessors
Definition Constants.h:374
@ DirectWriteAccessors
Definition Constants.h:378
@ ColMajor
Definition Constants.h:318
@ RowMajor
Definition Constants.h:320
@ AutoAlign
Definition Constants.h:322
const unsigned int DirectAccessBit
Definition Constants.h:159
const unsigned int LvalueBit
Definition Constants.h:148
Namespace containing all symbols from the Eigen library.
Definition B01_Experimental.dox:1
const int Dynamic
Definition Constants.h:25