mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-08-12 11:49:02 +08:00
document LvalueBit better
This commit is contained in:
parent
1d4e80f09d
commit
868f753d10
@ -44,6 +44,11 @@ class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived>
|
|||||||
typedef typename internal::traits<Derived>::Index Index;
|
typedef typename internal::traits<Derived>::Index Index;
|
||||||
typedef typename internal::traits<Derived>::Scalar Scalar;
|
typedef typename internal::traits<Derived>::Scalar Scalar;
|
||||||
typedef typename internal::packet_traits<Scalar>::type PacketScalar;
|
typedef typename internal::packet_traits<Scalar>::type PacketScalar;
|
||||||
|
|
||||||
|
// explanation for this CoeffReturnType typedef.
|
||||||
|
// this is the return type of the coeff() method.
|
||||||
|
// The LvalueBit means exactly that we can offer a coeffRef() method, which means exactly that we can get references
|
||||||
|
// to coeffs, which means exactly that we can have coeff() return a const reference (as opposed to returning a value).
|
||||||
typedef typename internal::conditional<bool(internal::traits<Derived>::Flags&LvalueBit),
|
typedef typename internal::conditional<bool(internal::traits<Derived>::Flags&LvalueBit),
|
||||||
const Scalar&,
|
const Scalar&,
|
||||||
typename internal::conditional<internal::is_arithmetic<Scalar>::value, Scalar, const Scalar>::type
|
typename internal::conditional<internal::is_arithmetic<Scalar>::value, Scalar, const Scalar>::type
|
||||||
@ -230,7 +235,7 @@ class DenseCoeffsBase<Derived,ReadOnlyAccessors> : public EigenBase<Derived>
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
// explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase.
|
// explanation: DenseBase is doing "using ..." on the methods from DenseCoeffsBase.
|
||||||
// But some methods are only available in the EnableDirectAccessAPI case.
|
// But some methods are only available in the DirectAccess case.
|
||||||
// So we add dummy methods here with these names, so that "using... " doesn't fail.
|
// So we add dummy methods here with these names, so that "using... " doesn't fail.
|
||||||
// It's not private so that the child class DenseBase can access them, and it's not public
|
// It's not private so that the child class DenseBase can access them, and it's not public
|
||||||
// either since it's an implementation detail, so has to be protected.
|
// either since it's an implementation detail, so has to be protected.
|
||||||
|
@ -125,27 +125,33 @@ const unsigned int LinearAccessBit = 0x10;
|
|||||||
|
|
||||||
/** \ingroup flags
|
/** \ingroup flags
|
||||||
*
|
*
|
||||||
* Means that the underlying array of coefficients can be directly accessed. This means two things.
|
* Means the expression has a coeffRef() method, i.e. is writable as its individual coefficients are directly addressable.
|
||||||
* First, references to the coefficients must be available through coeffRef(int, int). This rules out read-only
|
* This rules out read-only expressions.
|
||||||
* expressions whose coefficients are computed on demand by coeff(int, int). Second, the memory layout of the
|
*
|
||||||
* array of coefficients must be exactly the natural one suggested by rows(), cols(), outerStride(), innerStride(), and the RowMajorBit.
|
* Note that DirectAccessBit implies LvalueBit, but the converse is false: LvalueBit doesn't imply DirectAccessBit because
|
||||||
* This rules out expressions such as Diagonal, whose coefficients, though referencable, do not have
|
* DirectAccessBit means that the whole memory layout is a plain strided array.
|
||||||
* such a regular memory layout.
|
*
|
||||||
|
* Expressions having LvalueBit also have their coeff() method returning a const reference instead of returning a new value.
|
||||||
*/
|
*/
|
||||||
const unsigned int DirectAccessBit = 0x20;
|
const unsigned int LvalueBit = 0x20;
|
||||||
|
|
||||||
|
/** \ingroup flags
|
||||||
|
*
|
||||||
|
* Means that the underlying array of coefficients can be directly accessed. This means two things.
|
||||||
|
*
|
||||||
|
* First, this means LvalueBit, i.e. this means that the expression has a coeffRef() method, i.e. is writable as its
|
||||||
|
* individual coefficients are directly addressable. This rules out read-only expressions.
|
||||||
|
*
|
||||||
|
* Second, the memory layout of the array of coefficients must be exactly the natural one suggested by rows(), cols(),
|
||||||
|
* outerStride(), innerStride(), and the RowMajorBit. This rules out expressions such as Diagonal, whose coefficients,
|
||||||
|
* though referencable, do not have such a regular memory layout.
|
||||||
|
*/
|
||||||
|
const unsigned int DirectAccessBit = 0x40;
|
||||||
|
|
||||||
/** \ingroup flags
|
/** \ingroup flags
|
||||||
*
|
*
|
||||||
* means the first coefficient packet is guaranteed to be aligned */
|
* means the first coefficient packet is guaranteed to be aligned */
|
||||||
const unsigned int AlignedBit = 0x40;
|
const unsigned int AlignedBit = 0x80;
|
||||||
|
|
||||||
/** \ingroup flags
|
|
||||||
*
|
|
||||||
* Means the expression is writable. Note that DirectAccessBit implies LvalueBit.
|
|
||||||
* Internaly, it is mainly used to enable the writable coeff accessors, and makes
|
|
||||||
* the read-only coeff accessors to return by const reference.
|
|
||||||
*/
|
|
||||||
const unsigned int LvalueBit = 0x80;
|
|
||||||
|
|
||||||
const unsigned int NestByRefBit = 0x100;
|
const unsigned int NestByRefBit = 0x100;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user