|
||||
Warning, file /include/eigen3/Eigen/src/Core/util/Constants.h was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 // This file is part of Eigen, a lightweight C++ template library 0002 // for linear algebra. 0003 // 0004 // Copyright (C) 2008-2015 Gael Guennebaud <gael.guennebaud@inria.fr> 0005 // Copyright (C) 2007-2009 Benoit Jacob <jacob.benoit.1@gmail.com> 0006 // Copyright (C) 2020, Arm Limited and Contributors 0007 // 0008 // This Source Code Form is subject to the terms of the Mozilla 0009 // Public License v. 2.0. If a copy of the MPL was not distributed 0010 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. 0011 0012 #ifndef EIGEN_CONSTANTS_H 0013 #define EIGEN_CONSTANTS_H 0014 0015 namespace Eigen { 0016 0017 /** This value means that a positive quantity (e.g., a size) is not known at compile-time, and that instead the value is 0018 * stored in some runtime variable. 0019 * 0020 * Changing the value of Dynamic breaks the ABI, as Dynamic is often used as a template parameter for Matrix. 0021 */ 0022 const int Dynamic = -1; 0023 0024 /** This value means that a signed quantity (e.g., a signed index) is not known at compile-time, and that instead its value 0025 * has to be specified at runtime. 0026 */ 0027 const int DynamicIndex = 0xffffff; 0028 0029 /** This value means that the increment to go from one value to another in a sequence is not constant for each step. 0030 */ 0031 const int UndefinedIncr = 0xfffffe; 0032 0033 /** This value means +Infinity; it is currently used only as the p parameter to MatrixBase::lpNorm<int>(). 0034 * The value Infinity there means the L-infinity norm. 0035 */ 0036 const int Infinity = -1; 0037 0038 /** This value means that the cost to evaluate an expression coefficient is either very expensive or 0039 * cannot be known at compile time. 0040 * 0041 * This value has to be positive to (1) simplify cost computation, and (2) allow to distinguish between a very expensive and very very expensive expressions. 0042 * It thus must also be large enough to make sure unrolling won't happen and that sub expressions will be evaluated, but not too large to avoid overflow. 0043 */ 0044 const int HugeCost = 10000; 0045 0046 /** \defgroup flags Flags 0047 * \ingroup Core_Module 0048 * 0049 * These are the possible bits which can be OR'ed to constitute the flags of a matrix or 0050 * expression. 0051 * 0052 * It is important to note that these flags are a purely compile-time notion. They are a compile-time property of 0053 * an expression type, implemented as enum's. They are not stored in memory at runtime, and they do not incur any 0054 * runtime overhead. 0055 * 0056 * \sa MatrixBase::Flags 0057 */ 0058 0059 /** \ingroup flags 0060 * 0061 * for a matrix, this means that the storage order is row-major. 0062 * If this bit is not set, the storage order is column-major. 0063 * For an expression, this determines the storage order of 0064 * the matrix created by evaluation of that expression. 0065 * \sa \blank \ref TopicStorageOrders */ 0066 const unsigned int RowMajorBit = 0x1; 0067 0068 /** \ingroup flags 0069 * means the expression should be evaluated by the calling expression */ 0070 const unsigned int EvalBeforeNestingBit = 0x2; 0071 0072 /** \ingroup flags 0073 * \deprecated 0074 * means the expression should be evaluated before any assignment */ 0075 EIGEN_DEPRECATED 0076 const unsigned int EvalBeforeAssigningBit = 0x4; // FIXME deprecated 0077 0078 /** \ingroup flags 0079 * 0080 * Short version: means the expression might be vectorized 0081 * 0082 * Long version: means that the coefficients can be handled by packets 0083 * and start at a memory location whose alignment meets the requirements 0084 * of the present CPU architecture for optimized packet access. In the fixed-size 0085 * case, there is the additional condition that it be possible to access all the 0086 * coefficients by packets (this implies the requirement that the size be a multiple of 16 bytes, 0087 * and that any nontrivial strides don't break the alignment). In the dynamic-size case, 0088 * there is no such condition on the total size and strides, so it might not be possible to access 0089 * all coeffs by packets. 0090 * 0091 * \note This bit can be set regardless of whether vectorization is actually enabled. 0092 * To check for actual vectorizability, see \a ActualPacketAccessBit. 0093 */ 0094 const unsigned int PacketAccessBit = 0x8; 0095 0096 #ifdef EIGEN_VECTORIZE 0097 /** \ingroup flags 0098 * 0099 * If vectorization is enabled (EIGEN_VECTORIZE is defined) this constant 0100 * is set to the value \a PacketAccessBit. 0101 * 0102 * If vectorization is not enabled (EIGEN_VECTORIZE is not defined) this constant 0103 * is set to the value 0. 0104 */ 0105 const unsigned int ActualPacketAccessBit = PacketAccessBit; 0106 #else 0107 const unsigned int ActualPacketAccessBit = 0x0; 0108 #endif 0109 0110 /** \ingroup flags 0111 * 0112 * Short version: means the expression can be seen as 1D vector. 0113 * 0114 * Long version: means that one can access the coefficients 0115 * of this expression by coeff(int), and coeffRef(int) in the case of a lvalue expression. These 0116 * index-based access methods are guaranteed 0117 * to not have to do any runtime computation of a (row, col)-pair from the index, so that it 0118 * is guaranteed that whenever it is available, index-based access is at least as fast as 0119 * (row,col)-based access. Expressions for which that isn't possible don't have the LinearAccessBit. 0120 * 0121 * If both PacketAccessBit and LinearAccessBit are set, then the 0122 * packets of this expression can be accessed by packet(int), and writePacket(int) in the case of a 0123 * lvalue expression. 0124 * 0125 * Typically, all vector expressions have the LinearAccessBit, but there is one exception: 0126 * Product expressions don't have it, because it would be troublesome for vectorization, even when the 0127 * Product is a vector expression. Thus, vector Product expressions allow index-based coefficient access but 0128 * not index-based packet access, so they don't have the LinearAccessBit. 0129 */ 0130 const unsigned int LinearAccessBit = 0x10; 0131 0132 /** \ingroup flags 0133 * 0134 * Means the expression has a coeffRef() method, i.e. is writable as its individual coefficients are directly addressable. 0135 * This rules out read-only expressions. 0136 * 0137 * Note that DirectAccessBit and LvalueBit are mutually orthogonal, as there are examples of expression having one but note 0138 * the other: 0139 * \li writable expressions that don't have a very simple memory layout as a strided array, have LvalueBit but not DirectAccessBit 0140 * \li Map-to-const expressions, for example Map<const Matrix>, have DirectAccessBit but not LvalueBit 0141 * 0142 * Expressions having LvalueBit also have their coeff() method returning a const reference instead of returning a new value. 0143 */ 0144 const unsigned int LvalueBit = 0x20; 0145 0146 /** \ingroup flags 0147 * 0148 * Means that the underlying array of coefficients can be directly accessed as a plain strided array. The memory layout 0149 * of the array of coefficients must be exactly the natural one suggested by rows(), cols(), 0150 * outerStride(), innerStride(), and the RowMajorBit. This rules out expressions such as Diagonal, whose coefficients, 0151 * though referencable, do not have such a regular memory layout. 0152 * 0153 * See the comment on LvalueBit for an explanation of how LvalueBit and DirectAccessBit are mutually orthogonal. 0154 */ 0155 const unsigned int DirectAccessBit = 0x40; 0156 0157 /** \deprecated \ingroup flags 0158 * 0159 * means the first coefficient packet is guaranteed to be aligned. 0160 * An expression cannot have the AlignedBit without the PacketAccessBit flag. 0161 * In other words, this means we are allow to perform an aligned packet access to the first element regardless 0162 * of the expression kind: 0163 * \code 0164 * expression.packet<Aligned>(0); 0165 * \endcode 0166 */ 0167 EIGEN_DEPRECATED const unsigned int AlignedBit = 0x80; 0168 0169 const unsigned int NestByRefBit = 0x100; 0170 0171 /** \ingroup flags 0172 * 0173 * for an expression, this means that the storage order 0174 * can be either row-major or column-major. 0175 * The precise choice will be decided at evaluation time or when 0176 * combined with other expressions. 0177 * \sa \blank \ref RowMajorBit, \ref TopicStorageOrders */ 0178 const unsigned int NoPreferredStorageOrderBit = 0x200; 0179 0180 /** \ingroup flags 0181 * 0182 * Means that the underlying coefficients can be accessed through pointers to the sparse (un)compressed storage format, 0183 * that is, the expression provides: 0184 * \code 0185 inline const Scalar* valuePtr() const; 0186 inline const Index* innerIndexPtr() const; 0187 inline const Index* outerIndexPtr() const; 0188 inline const Index* innerNonZeroPtr() const; 0189 \endcode 0190 */ 0191 const unsigned int CompressedAccessBit = 0x400; 0192 0193 0194 // list of flags that are inherited by default 0195 const unsigned int HereditaryBits = RowMajorBit 0196 | EvalBeforeNestingBit; 0197 0198 /** \defgroup enums Enumerations 0199 * \ingroup Core_Module 0200 * 0201 * Various enumerations used in %Eigen. Many of these are used as template parameters. 0202 */ 0203 0204 /** \ingroup enums 0205 * Enum containing possible values for the \c Mode or \c UpLo parameter of 0206 * MatrixBase::selfadjointView() and MatrixBase::triangularView(), and selfadjoint solvers. */ 0207 enum UpLoType { 0208 /** View matrix as a lower triangular matrix. */ 0209 Lower=0x1, 0210 /** View matrix as an upper triangular matrix. */ 0211 Upper=0x2, 0212 /** %Matrix has ones on the diagonal; to be used in combination with #Lower or #Upper. */ 0213 UnitDiag=0x4, 0214 /** %Matrix has zeros on the diagonal; to be used in combination with #Lower or #Upper. */ 0215 ZeroDiag=0x8, 0216 /** View matrix as a lower triangular matrix with ones on the diagonal. */ 0217 UnitLower=UnitDiag|Lower, 0218 /** View matrix as an upper triangular matrix with ones on the diagonal. */ 0219 UnitUpper=UnitDiag|Upper, 0220 /** View matrix as a lower triangular matrix with zeros on the diagonal. */ 0221 StrictlyLower=ZeroDiag|Lower, 0222 /** View matrix as an upper triangular matrix with zeros on the diagonal. */ 0223 StrictlyUpper=ZeroDiag|Upper, 0224 /** Used in BandMatrix and SelfAdjointView to indicate that the matrix is self-adjoint. */ 0225 SelfAdjoint=0x10, 0226 /** Used to support symmetric, non-selfadjoint, complex matrices. */ 0227 Symmetric=0x20 0228 }; 0229 0230 /** \ingroup enums 0231 * Enum for indicating whether a buffer is aligned or not. */ 0232 enum AlignmentType { 0233 Unaligned=0, /**< Data pointer has no specific alignment. */ 0234 Aligned8=8, /**< Data pointer is aligned on a 8 bytes boundary. */ 0235 Aligned16=16, /**< Data pointer is aligned on a 16 bytes boundary. */ 0236 Aligned32=32, /**< Data pointer is aligned on a 32 bytes boundary. */ 0237 Aligned64=64, /**< Data pointer is aligned on a 64 bytes boundary. */ 0238 Aligned128=128, /**< Data pointer is aligned on a 128 bytes boundary. */ 0239 AlignedMask=255, 0240 Aligned=16, /**< \deprecated Synonym for Aligned16. */ 0241 #if EIGEN_MAX_ALIGN_BYTES==128 0242 AlignedMax = Aligned128 0243 #elif EIGEN_MAX_ALIGN_BYTES==64 0244 AlignedMax = Aligned64 0245 #elif EIGEN_MAX_ALIGN_BYTES==32 0246 AlignedMax = Aligned32 0247 #elif EIGEN_MAX_ALIGN_BYTES==16 0248 AlignedMax = Aligned16 0249 #elif EIGEN_MAX_ALIGN_BYTES==8 0250 AlignedMax = Aligned8 0251 #elif EIGEN_MAX_ALIGN_BYTES==0 0252 AlignedMax = Unaligned 0253 #else 0254 #error Invalid value for EIGEN_MAX_ALIGN_BYTES 0255 #endif 0256 }; 0257 0258 /** \ingroup enums 0259 * Enum containing possible values for the \p Direction parameter of 0260 * Reverse, PartialReduxExpr and VectorwiseOp. */ 0261 enum DirectionType { 0262 /** For Reverse, all columns are reversed; 0263 * for PartialReduxExpr and VectorwiseOp, act on columns. */ 0264 Vertical, 0265 /** For Reverse, all rows are reversed; 0266 * for PartialReduxExpr and VectorwiseOp, act on rows. */ 0267 Horizontal, 0268 /** For Reverse, both rows and columns are reversed; 0269 * not used for PartialReduxExpr and VectorwiseOp. */ 0270 BothDirections 0271 }; 0272 0273 /** \internal \ingroup enums 0274 * Enum to specify how to traverse the entries of a matrix. */ 0275 enum TraversalType { 0276 /** \internal Default traversal, no vectorization, no index-based access */ 0277 DefaultTraversal, 0278 /** \internal No vectorization, use index-based access to have only one for loop instead of 2 nested loops */ 0279 LinearTraversal, 0280 /** \internal Equivalent to a slice vectorization for fixed-size matrices having good alignment 0281 * and good size */ 0282 InnerVectorizedTraversal, 0283 /** \internal Vectorization path using a single loop plus scalar loops for the 0284 * unaligned boundaries */ 0285 LinearVectorizedTraversal, 0286 /** \internal Generic vectorization path using one vectorized loop per row/column with some 0287 * scalar loops to handle the unaligned boundaries */ 0288 SliceVectorizedTraversal, 0289 /** \internal Special case to properly handle incompatible scalar types or other defecting cases*/ 0290 InvalidTraversal, 0291 /** \internal Evaluate all entries at once */ 0292 AllAtOnceTraversal 0293 }; 0294 0295 /** \internal \ingroup enums 0296 * Enum to specify whether to unroll loops when traversing over the entries of a matrix. */ 0297 enum UnrollingType { 0298 /** \internal Do not unroll loops. */ 0299 NoUnrolling, 0300 /** \internal Unroll only the inner loop, but not the outer loop. */ 0301 InnerUnrolling, 0302 /** \internal Unroll both the inner and the outer loop. If there is only one loop, 0303 * because linear traversal is used, then unroll that loop. */ 0304 CompleteUnrolling 0305 }; 0306 0307 /** \internal \ingroup enums 0308 * Enum to specify whether to use the default (built-in) implementation or the specialization. */ 0309 enum SpecializedType { 0310 Specialized, 0311 BuiltIn 0312 }; 0313 0314 /** \ingroup enums 0315 * Enum containing possible values for the \p _Options template parameter of 0316 * Matrix, Array and BandMatrix. */ 0317 enum StorageOptions { 0318 /** Storage order is column major (see \ref TopicStorageOrders). */ 0319 ColMajor = 0, 0320 /** Storage order is row major (see \ref TopicStorageOrders). */ 0321 RowMajor = 0x1, // it is only a coincidence that this is equal to RowMajorBit -- don't rely on that 0322 /** Align the matrix itself if it is vectorizable fixed-size */ 0323 AutoAlign = 0, 0324 /** Don't require alignment for the matrix itself (the array of coefficients, if dynamically allocated, may still be requested to be aligned) */ // FIXME --- clarify the situation 0325 DontAlign = 0x2 0326 }; 0327 0328 /** \ingroup enums 0329 * Enum for specifying whether to apply or solve on the left or right. */ 0330 enum SideType { 0331 /** Apply transformation on the left. */ 0332 OnTheLeft = 1, 0333 /** Apply transformation on the right. */ 0334 OnTheRight = 2 0335 }; 0336 0337 /** \ingroup enums 0338 * Enum for specifying NaN-propagation behavior, e.g. for coeff-wise min/max. */ 0339 enum NaNPropagationOptions { 0340 /** Implementation defined behavior if NaNs are present. */ 0341 PropagateFast = 0, 0342 /** Always propagate NaNs. */ 0343 PropagateNaN, 0344 /** Always propagate not-NaNs. */ 0345 PropagateNumbers 0346 }; 0347 0348 /* the following used to be written as: 0349 * 0350 * struct NoChange_t {}; 0351 * namespace { 0352 * EIGEN_UNUSED NoChange_t NoChange; 0353 * } 0354 * 0355 * on the ground that it feels dangerous to disambiguate overloaded functions on enum/integer types. 0356 * However, this leads to "variable declared but never referenced" warnings on Intel Composer XE, 0357 * and we do not know how to get rid of them (bug 450). 0358 */ 0359 0360 enum NoChange_t { NoChange }; 0361 enum Sequential_t { Sequential }; 0362 enum Default_t { Default }; 0363 0364 /** \internal \ingroup enums 0365 * Used in AmbiVector. */ 0366 enum AmbiVectorMode { 0367 IsDense = 0, 0368 IsSparse 0369 }; 0370 0371 /** \ingroup enums 0372 * Used as template parameter in DenseCoeffBase and MapBase to indicate 0373 * which accessors should be provided. */ 0374 enum AccessorLevels { 0375 /** Read-only access via a member function. */ 0376 ReadOnlyAccessors, 0377 /** Read/write access via member functions. */ 0378 WriteAccessors, 0379 /** Direct read-only access to the coefficients. */ 0380 DirectAccessors, 0381 /** Direct read/write access to the coefficients. */ 0382 DirectWriteAccessors 0383 }; 0384 0385 /** \ingroup enums 0386 * Enum with options to give to various decompositions. */ 0387 enum DecompositionOptions { 0388 /** \internal Not used (meant for LDLT?). */ 0389 Pivoting = 0x01, 0390 /** \internal Not used (meant for LDLT?). */ 0391 NoPivoting = 0x02, 0392 /** Used in JacobiSVD to indicate that the square matrix U is to be computed. */ 0393 ComputeFullU = 0x04, 0394 /** Used in JacobiSVD to indicate that the thin matrix U is to be computed. */ 0395 ComputeThinU = 0x08, 0396 /** Used in JacobiSVD to indicate that the square matrix V is to be computed. */ 0397 ComputeFullV = 0x10, 0398 /** Used in JacobiSVD to indicate that the thin matrix V is to be computed. */ 0399 ComputeThinV = 0x20, 0400 /** Used in SelfAdjointEigenSolver and GeneralizedSelfAdjointEigenSolver to specify 0401 * that only the eigenvalues are to be computed and not the eigenvectors. */ 0402 EigenvaluesOnly = 0x40, 0403 /** Used in SelfAdjointEigenSolver and GeneralizedSelfAdjointEigenSolver to specify 0404 * that both the eigenvalues and the eigenvectors are to be computed. */ 0405 ComputeEigenvectors = 0x80, 0406 /** \internal */ 0407 EigVecMask = EigenvaluesOnly | ComputeEigenvectors, 0408 /** Used in GeneralizedSelfAdjointEigenSolver to indicate that it should 0409 * solve the generalized eigenproblem \f$ Ax = \lambda B x \f$. */ 0410 Ax_lBx = 0x100, 0411 /** Used in GeneralizedSelfAdjointEigenSolver to indicate that it should 0412 * solve the generalized eigenproblem \f$ ABx = \lambda x \f$. */ 0413 ABx_lx = 0x200, 0414 /** Used in GeneralizedSelfAdjointEigenSolver to indicate that it should 0415 * solve the generalized eigenproblem \f$ BAx = \lambda x \f$. */ 0416 BAx_lx = 0x400, 0417 /** \internal */ 0418 GenEigMask = Ax_lBx | ABx_lx | BAx_lx 0419 }; 0420 0421 /** \ingroup enums 0422 * Possible values for the \p QRPreconditioner template parameter of JacobiSVD. */ 0423 enum QRPreconditioners { 0424 /** Do not specify what is to be done if the SVD of a non-square matrix is asked for. */ 0425 NoQRPreconditioner, 0426 /** Use a QR decomposition without pivoting as the first step. */ 0427 HouseholderQRPreconditioner, 0428 /** Use a QR decomposition with column pivoting as the first step. */ 0429 ColPivHouseholderQRPreconditioner, 0430 /** Use a QR decomposition with full pivoting as the first step. */ 0431 FullPivHouseholderQRPreconditioner 0432 }; 0433 0434 #ifdef Success 0435 #error The preprocessor symbol 'Success' is defined, possibly by the X11 header file X.h 0436 #endif 0437 0438 /** \ingroup enums 0439 * Enum for reporting the status of a computation. */ 0440 enum ComputationInfo { 0441 /** Computation was successful. */ 0442 Success = 0, 0443 /** The provided data did not satisfy the prerequisites. */ 0444 NumericalIssue = 1, 0445 /** Iterative procedure did not converge. */ 0446 NoConvergence = 2, 0447 /** The inputs are invalid, or the algorithm has been improperly called. 0448 * When assertions are enabled, such errors trigger an assert. */ 0449 InvalidInput = 3 0450 }; 0451 0452 /** \ingroup enums 0453 * Enum used to specify how a particular transformation is stored in a matrix. 0454 * \sa Transform, Hyperplane::transform(). */ 0455 enum TransformTraits { 0456 /** Transformation is an isometry. */ 0457 Isometry = 0x1, 0458 /** Transformation is an affine transformation stored as a (Dim+1)^2 matrix whose last row is 0459 * assumed to be [0 ... 0 1]. */ 0460 Affine = 0x2, 0461 /** Transformation is an affine transformation stored as a (Dim) x (Dim+1) matrix. */ 0462 AffineCompact = 0x10 | Affine, 0463 /** Transformation is a general projective transformation stored as a (Dim+1)^2 matrix. */ 0464 Projective = 0x20 0465 }; 0466 0467 /** \internal \ingroup enums 0468 * Enum used to choose between implementation depending on the computer architecture. */ 0469 namespace Architecture 0470 { 0471 enum Type { 0472 Generic = 0x0, 0473 SSE = 0x1, 0474 AltiVec = 0x2, 0475 VSX = 0x3, 0476 NEON = 0x4, 0477 MSA = 0x5, 0478 SVE = 0x6, 0479 #if defined EIGEN_VECTORIZE_SSE 0480 Target = SSE 0481 #elif defined EIGEN_VECTORIZE_ALTIVEC 0482 Target = AltiVec 0483 #elif defined EIGEN_VECTORIZE_VSX 0484 Target = VSX 0485 #elif defined EIGEN_VECTORIZE_NEON 0486 Target = NEON 0487 #elif defined EIGEN_VECTORIZE_SVE 0488 Target = SVE 0489 #elif defined EIGEN_VECTORIZE_MSA 0490 Target = MSA 0491 #else 0492 Target = Generic 0493 #endif 0494 }; 0495 } 0496 0497 /** \internal \ingroup enums 0498 * Enum used as template parameter in Product and product evaluators. */ 0499 enum ProductImplType 0500 { DefaultProduct=0, LazyProduct, AliasFreeProduct, CoeffBasedProductMode, LazyCoeffBasedProductMode, OuterProduct, InnerProduct, GemvProduct, GemmProduct }; 0501 0502 /** \internal \ingroup enums 0503 * Enum used in experimental parallel implementation. */ 0504 enum Action {GetAction, SetAction}; 0505 0506 /** The type used to identify a dense storage. */ 0507 struct Dense {}; 0508 0509 /** The type used to identify a general sparse storage. */ 0510 struct Sparse {}; 0511 0512 /** The type used to identify a general solver (factored) storage. */ 0513 struct SolverStorage {}; 0514 0515 /** The type used to identify a permutation storage. */ 0516 struct PermutationStorage {}; 0517 0518 /** The type used to identify a permutation storage. */ 0519 struct TranspositionsStorage {}; 0520 0521 /** The type used to identify a matrix expression */ 0522 struct MatrixXpr {}; 0523 0524 /** The type used to identify an array expression */ 0525 struct ArrayXpr {}; 0526 0527 // An evaluator must define its shape. By default, it can be one of the following: 0528 struct DenseShape { static std::string debugName() { return "DenseShape"; } }; 0529 struct SolverShape { static std::string debugName() { return "SolverShape"; } }; 0530 struct HomogeneousShape { static std::string debugName() { return "HomogeneousShape"; } }; 0531 struct DiagonalShape { static std::string debugName() { return "DiagonalShape"; } }; 0532 struct BandShape { static std::string debugName() { return "BandShape"; } }; 0533 struct TriangularShape { static std::string debugName() { return "TriangularShape"; } }; 0534 struct SelfAdjointShape { static std::string debugName() { return "SelfAdjointShape"; } }; 0535 struct PermutationShape { static std::string debugName() { return "PermutationShape"; } }; 0536 struct TranspositionsShape { static std::string debugName() { return "TranspositionsShape"; } }; 0537 struct SparseShape { static std::string debugName() { return "SparseShape"; } }; 0538 0539 namespace internal { 0540 0541 // random access iterators based on coeff*() accessors. 0542 struct IndexBased {}; 0543 0544 // evaluator based on iterators to access coefficients. 0545 struct IteratorBased {}; 0546 0547 /** \internal 0548 * Constants for comparison functors 0549 */ 0550 enum ComparisonName { 0551 cmp_EQ = 0, 0552 cmp_LT = 1, 0553 cmp_LE = 2, 0554 cmp_UNORD = 3, 0555 cmp_NEQ = 4, 0556 cmp_GT = 5, 0557 cmp_GE = 6 0558 }; 0559 } // end namespace internal 0560 0561 } // end namespace Eigen 0562 0563 #endif // EIGEN_CONSTANTS_H
[ Source navigation ] | [ Diff markup ] | [ Identifier search ] | [ general search ] |
This page was automatically generated by the 2.3.7 LXR engine. The LXR team |