Homogeneous.h
Go to the documentation of this file.
1 // This file is part of Eigen, a lightweight C++ template library
2 // for linear algebra.
3 //
4 // Copyright (C) 2009-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5 //
6 // This Source Code Form is subject to the terms of the Mozilla
7 // Public License v. 2.0. If a copy of the MPL was not distributed
8 // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 
10 #ifndef EIGEN_HOMOGENEOUS_H
11 #define EIGEN_HOMOGENEOUS_H
12 
13 // IWYU pragma: private
14 #include "./InternalHeaderCheck.h"
15 
16 namespace Eigen {
17 
33 namespace internal {
34 
35 template <typename MatrixType, int Direction>
36 struct traits<Homogeneous<MatrixType, Direction> > : traits<MatrixType> {
39  typedef std::remove_reference_t<MatrixTypeNested> MatrixTypeNested_;
40  enum {
41  RowsPlusOne = (MatrixType::RowsAtCompileTime != Dynamic) ? int(MatrixType::RowsAtCompileTime) + 1 : Dynamic,
42  ColsPlusOne = (MatrixType::ColsAtCompileTime != Dynamic) ? int(MatrixType::ColsAtCompileTime) + 1 : Dynamic,
43  RowsAtCompileTime = Direction == Vertical ? RowsPlusOne : MatrixType::RowsAtCompileTime,
44  ColsAtCompileTime = Direction == Horizontal ? ColsPlusOne : MatrixType::ColsAtCompileTime,
45  MaxRowsAtCompileTime = RowsAtCompileTime,
46  MaxColsAtCompileTime = ColsAtCompileTime,
47  TmpFlags = MatrixTypeNested_::Flags & HereditaryBits,
48  Flags = ColsAtCompileTime == 1 ? (TmpFlags & ~RowMajorBit)
49  : RowsAtCompileTime == 1 ? (TmpFlags | RowMajorBit)
50  : TmpFlags
51  };
52 };
53 
54 template <typename MatrixType, typename Lhs>
56 template <typename MatrixType, typename Rhs>
58 
59 } // end namespace internal
60 
61 template <typename MatrixType, int Direction_>
62 class Homogeneous : public MatrixBase<Homogeneous<MatrixType, Direction_> >, internal::no_assignment_operator {
63  public:
65  enum { Direction = Direction_ };
66 
69 
71 
73  return m_matrix.rows() + (int(Direction) == Vertical ? 1 : 0);
74  }
76  return m_matrix.cols() + (int(Direction) == Horizontal ? 1 : 0);
77  }
78 
80 
81  template <typename Rhs>
84  return Product<Homogeneous, Rhs>(*this, rhs.derived());
85  }
86 
87  template <typename Lhs>
89  const Homogeneous& rhs) {
91  return Product<Lhs, Homogeneous>(lhs.derived(), rhs);
92  }
93 
94  template <typename Scalar, int Dim, int Mode, int Options>
96  const Transform<Scalar, Dim, Mode, Options>& lhs, const Homogeneous& rhs) {
99  }
100 
101  template <typename Func>
103  const Func& func) const {
104  return func(m_matrix.redux(func), Scalar(1));
105  }
106 
107  protected:
108  typename MatrixType::Nested m_matrix;
109 };
110 
125 template <typename Derived>
128  return HomogeneousReturnType(derived());
129 }
130 
142 template <typename ExpressionType, int Direction>
144  const {
145  return HomogeneousReturnType(_expression());
146 }
147 
165 template <typename Derived>
167  const {
169  return ConstStartMinusOne(derived(), 0, 0, ColsAtCompileTime == 1 ? size() - 1 : 1,
170  ColsAtCompileTime == 1 ? 1 : size() - 1) /
171  coeff(size() - 1);
172 }
173 
189 template <typename ExpressionType, int Direction>
192  return HNormalized_Block(_expression(), 0, 0, Direction == Vertical ? _expression().rows() - 1 : _expression().rows(),
193  Direction == Horizontal ? _expression().cols() - 1 : _expression().cols())
194  .cwiseQuotient(Replicate < HNormalized_Factors, Direction == Vertical ? HNormalized_SizeMinusOne : 1,
196  ? HNormalized_SizeMinusOne
197  : 1 > (HNormalized_Factors(_expression(), Direction == Vertical ? _expression().rows() - 1 : 0,
198  Direction == Horizontal ? _expression().cols() - 1 : 0,
199  Direction == Vertical ? 1 : _expression().rows(),
200  Direction == Horizontal ? 1 : _expression().cols()),
201  Direction == Vertical ? _expression().rows() - 1 : 1,
202  Direction == Horizontal ? _expression().cols() - 1 : 1));
203 }
204 
205 namespace internal {
206 
207 template <typename MatrixOrTransformType>
209  typedef MatrixOrTransformType type;
210  EIGEN_DEVICE_FUNC static const type& run(const type& x) { return x; }
211 };
212 
213 template <typename Scalar, int Dim, int Mode, int Options>
214 struct take_matrix_for_product<Transform<Scalar, Dim, Mode, Options> > {
216  typedef std::add_const_t<typename TransformType::ConstAffinePart> type;
217  EIGEN_DEVICE_FUNC static type run(const TransformType& x) { return x.affine(); }
218 };
219 
220 template <typename Scalar, int Dim, int Options>
223  typedef typename TransformType::MatrixType type;
224  EIGEN_DEVICE_FUNC static const type& run(const TransformType& x) { return x.matrix(); }
225 };
226 
227 template <typename MatrixType, typename Lhs>
232  typedef typename make_proper_matrix_type<
233  typename traits<MatrixTypeCleaned>::Scalar, LhsMatrixTypeCleaned::RowsAtCompileTime,
234  MatrixTypeCleaned::ColsAtCompileTime, MatrixTypeCleaned::PlainObject::Options,
235  LhsMatrixTypeCleaned::MaxRowsAtCompileTime, MatrixTypeCleaned::MaxColsAtCompileTime>::type ReturnType;
236 };
237 
238 template <typename MatrixType, typename Lhs>
240  : public ReturnByValue<homogeneous_left_product_impl<Homogeneous<MatrixType, Vertical>, Lhs> > {
245  : m_lhs(take_matrix_for_product<Lhs>::run(lhs)), m_rhs(rhs) {}
246 
247  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index rows() const EIGEN_NOEXCEPT { return m_lhs.rows(); }
248  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index cols() const EIGEN_NOEXCEPT { return m_rhs.cols(); }
249 
250  template <typename Dest>
251  EIGEN_DEVICE_FUNC void evalTo(Dest& dst) const {
252  // FIXME investigate how to allow lazy evaluation of this product when possible
253  dst = Block < const LhsMatrixTypeNested, LhsMatrixTypeNested::RowsAtCompileTime,
254  LhsMatrixTypeNested::ColsAtCompileTime == Dynamic
255  ? Dynamic
256  : LhsMatrixTypeNested::ColsAtCompileTime - 1 > (m_lhs, 0, 0, m_lhs.rows(), m_lhs.cols() - 1) * m_rhs;
257  dst += m_lhs.col(m_lhs.cols() - 1).rowwise().template replicate<MatrixType::ColsAtCompileTime>(m_rhs.cols());
258  }
259 
260  typename LhsMatrixTypeCleaned::Nested m_lhs;
261  typename MatrixType::Nested m_rhs;
262 };
263 
264 template <typename MatrixType, typename Rhs>
266  typedef
267  typename make_proper_matrix_type<typename traits<MatrixType>::Scalar, MatrixType::RowsAtCompileTime,
268  Rhs::ColsAtCompileTime, MatrixType::PlainObject::Options,
269  MatrixType::MaxRowsAtCompileTime, Rhs::MaxColsAtCompileTime>::type ReturnType;
270 };
271 
272 template <typename MatrixType, typename Rhs>
274  : public ReturnByValue<homogeneous_right_product_impl<Homogeneous<MatrixType, Horizontal>, Rhs> > {
276  EIGEN_DEVICE_FUNC homogeneous_right_product_impl(const MatrixType& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs) {}
277 
278  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index rows() const EIGEN_NOEXCEPT { return m_lhs.rows(); }
279  EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR inline Index cols() const EIGEN_NOEXCEPT { return m_rhs.cols(); }
280 
281  template <typename Dest>
282  EIGEN_DEVICE_FUNC void evalTo(Dest& dst) const {
283  // FIXME investigate how to allow lazy evaluation of this product when possible
284  dst = m_lhs * Block < const RhsNested,
285  RhsNested::RowsAtCompileTime == Dynamic ? Dynamic : RhsNested::RowsAtCompileTime - 1,
286  RhsNested::ColsAtCompileTime > (m_rhs, 0, 0, m_rhs.rows() - 1, m_rhs.cols());
287  dst += m_rhs.row(m_rhs.rows() - 1).colwise().template replicate<MatrixType::RowsAtCompileTime>(m_lhs.rows());
288  }
289 
290  typename MatrixType::Nested m_lhs;
291  typename Rhs::Nested m_rhs;
292 };
293 
294 template <typename ArgType, int Direction>
298 };
299 
300 template <>
302  typedef Dense2Dense Kind;
303 };
304 
305 template <typename ArgType, int Direction>
307  : evaluator<typename Homogeneous<ArgType, Direction>::PlainObject> {
311 
312  EIGEN_DEVICE_FUNC explicit unary_evaluator(const XprType& op) : Base(), m_temp(op) {
313  internal::construct_at<Base>(this, m_temp);
314  }
315 
316  protected:
318 };
319 
320 // dense = homogeneous
321 template <typename DstXprType, typename ArgType, typename Scalar>
322 struct Assignment<DstXprType, Homogeneous<ArgType, Vertical>, internal::assign_op<Scalar, typename ArgType::Scalar>,
323  Dense2Dense> {
325  EIGEN_DEVICE_FUNC static void run(DstXprType& dst, const SrcXprType& src,
327  Index dstRows = src.rows();
328  Index dstCols = src.cols();
329  if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
330 
331  dst.template topRows<ArgType::RowsAtCompileTime>(src.nestedExpression().rows()) = src.nestedExpression();
332  dst.row(dst.rows() - 1).setOnes();
333  }
334 };
335 
336 // dense = homogeneous
337 template <typename DstXprType, typename ArgType, typename Scalar>
338 struct Assignment<DstXprType, Homogeneous<ArgType, Horizontal>, internal::assign_op<Scalar, typename ArgType::Scalar>,
339  Dense2Dense> {
341  EIGEN_DEVICE_FUNC static void run(DstXprType& dst, const SrcXprType& src,
343  Index dstRows = src.rows();
344  Index dstCols = src.cols();
345  if ((dst.rows() != dstRows) || (dst.cols() != dstCols)) dst.resize(dstRows, dstCols);
346 
347  dst.template leftCols<ArgType::ColsAtCompileTime>(src.nestedExpression().cols()) = src.nestedExpression();
348  dst.col(dst.cols() - 1).setOnes();
349  }
350 };
351 
352 template <typename LhsArg, typename Rhs, int ProductTag>
354  template <typename Dest>
355  EIGEN_DEVICE_FUNC static void evalTo(Dest& dst, const Homogeneous<LhsArg, Horizontal>& lhs, const Rhs& rhs) {
357  }
358 };
359 
360 template <typename Lhs, typename Rhs>
362  enum { Dim = Lhs::ColsAtCompileTime, Rows = Lhs::RowsAtCompileTime };
363  typedef typename Rhs::template ConstNRowsBlockXpr<Dim>::Type LinearBlockConst;
364  typedef std::remove_const_t<LinearBlockConst> LinearBlock;
365  typedef typename Rhs::ConstRowXpr ConstantColumn;
369  const ConstantBlock>
371 };
372 
373 template <typename Lhs, typename Rhs, int ProductTag>
375  : public evaluator<
376  typename homogeneous_right_product_refactoring_helper<typename Lhs::NestedExpression, Rhs>::Xpr> {
380  typedef typename helper::Xpr RefactoredXpr;
382 
384  : Base(xpr.lhs().nestedExpression().lazyProduct(
385  xpr.rhs().template topRows<helper::Dim>(xpr.lhs().nestedExpression().cols())) +
386  ConstantBlock(xpr.rhs().row(xpr.rhs().rows() - 1), xpr.lhs().rows(), 1)) {}
387 };
388 
389 template <typename Lhs, typename RhsArg, int ProductTag>
391  template <typename Dest>
392  EIGEN_DEVICE_FUNC static void evalTo(Dest& dst, const Lhs& lhs, const Homogeneous<RhsArg, Vertical>& rhs) {
394  }
395 };
396 
397 // TODO: the following specialization is to address a regression from 3.2 to 3.3
398 // In the future, this path should be optimized.
399 template <typename Lhs, typename RhsArg, int ProductTag>
401  template <typename Dest>
402  static void evalTo(Dest& dst, const Lhs& lhs, const Homogeneous<RhsArg, Vertical>& rhs) {
403  dst.noalias() = lhs * rhs.eval();
404  }
405 };
406 
407 template <typename Lhs, typename Rhs>
409  enum { Dim = Rhs::RowsAtCompileTime, Cols = Rhs::ColsAtCompileTime };
410  typedef typename Lhs::template ConstNColsBlockXpr<Dim>::Type LinearBlockConst;
411  typedef std::remove_const_t<LinearBlockConst> LinearBlock;
412  typedef typename Lhs::ConstColXpr ConstantColumn;
416  const ConstantBlock>
418 };
419 
420 template <typename Lhs, typename Rhs, int ProductTag>
422  : public evaluator<typename homogeneous_left_product_refactoring_helper<Lhs, typename Rhs::NestedExpression>::Xpr> {
426  typedef typename helper::Xpr RefactoredXpr;
428 
430  : Base(xpr.lhs()
431  .template leftCols<helper::Dim>(xpr.rhs().nestedExpression().rows())
432  .lazyProduct(xpr.rhs().nestedExpression()) +
433  ConstantBlock(xpr.lhs().col(xpr.lhs().cols() - 1), 1, xpr.rhs().cols())) {}
434 };
435 
436 template <typename Scalar, int Dim, int Mode, int Options, typename RhsArg, int ProductTag>
438  HomogeneousShape, ProductTag> {
440  template <typename Dest>
441  EIGEN_DEVICE_FUNC static void evalTo(Dest& dst, const TransformType& lhs, const Homogeneous<RhsArg, Vertical>& rhs) {
443  .evalTo(dst);
444  }
445 };
446 
447 template <typename ExpressionType, int Side, bool Transposed>
448 struct permutation_matrix_product<ExpressionType, Side, Transposed, HomogeneousShape>
449  : public permutation_matrix_product<ExpressionType, Side, Transposed, DenseShape> {};
450 
451 } // end namespace internal
452 
453 } // end namespace Eigen
454 
455 #endif // EIGEN_HOMOGENEOUS_H
Direction
An enum that indicates the direction in Cartesian coordinates.
Definition: GeneralDefine.h:56
#define EIGEN_NOEXCEPT
Definition: Macros.h:1267
#define EIGEN_CONSTEXPR
Definition: Macros.h:758
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
Definition: Macros.h:1171
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
m col(1)
m row(1)
Side
Definition: Side.h:9
#define EIGEN_STATIC_ASSERT_VECTOR_ONLY(TYPE)
Definition: StaticAssert.h:36
int rows
Definition: Tutorial_commainit_02.cpp:1
int cols
Definition: Tutorial_commainit_02.cpp:1
Scalar Scalar int size
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
Expression of a fixed-size or dynamic-size block.
Definition: Block.h:110
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:79
std::conditional_t< internal::is_same< typename internal::traits< Homogeneous< MatrixType, Direction_ > >::XprKind, MatrixXpr >::value, PlainMatrix, PlainArray > PlainObject
The plain matrix or array type corresponding to this expression.
Definition: DenseBase.h:204
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EvalReturnType eval() const
Definition: DenseBase.h:381
internal::traits< Homogeneous< MatrixType, Direction_ > >::Scalar Scalar
Definition: DenseBase.h:62
Expression of one (or a set of) homogeneous vector(s)
Definition: Homogeneous.h:62
friend EIGEN_DEVICE_FUNC const Product< Transform< Scalar, Dim, Mode, Options >, Homogeneous > operator*(const Transform< Scalar, Dim, Mode, Options > &lhs, const Homogeneous &rhs)
Definition: Homogeneous.h:95
EIGEN_DEVICE_FUNC const NestedExpression & nestedExpression() const
Definition: Homogeneous.h:79
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::result_of< Func(Scalar, Scalar)>::type redux(const Func &func) const
Definition: Homogeneous.h:102
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: Homogeneous.h:72
MatrixBase< Homogeneous > Base
Definition: Homogeneous.h:67
MatrixType NestedExpression
Definition: Homogeneous.h:64
EIGEN_DEVICE_FUNC const Product< Homogeneous, Rhs > operator*(const MatrixBase< Rhs > &rhs) const
Definition: Homogeneous.h:82
friend EIGEN_DEVICE_FUNC const Product< Lhs, Homogeneous > operator*(const MatrixBase< Lhs > &lhs, const Homogeneous &rhs)
Definition: Homogeneous.h:88
MatrixType::Nested m_matrix
Definition: Homogeneous.h:108
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: Homogeneous.h:75
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:52
EIGEN_DEVICE_FUNC MatrixBase< Homogeneous< MatrixType, Direction_ > > & matrix()
Definition: MatrixBase.h:315
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:202
Expression of the multiple replication of a matrix or vector.
Definition: Replicate.h:64
Definition: ReturnByValue.h:50
Represents an homogeneous transformation in a N dimensional space.
Definition: Transform.h:192
Definition: XprHelper.h:352
Definition: XprHelper.h:134
EIGEN_DEVICE_FUNC HomogeneousReturnType homogeneous() const
Definition: Homogeneous.h:143
EIGEN_DEVICE_FUNC HomogeneousReturnType homogeneous() const
Definition: Homogeneous.h:126
EIGEN_DEVICE_FUNC const HNormalizedReturnType hnormalized() const
column or row-wise homogeneous normalization
Definition: Homogeneous.h:191
EIGEN_DEVICE_FUNC const HNormalizedReturnType hnormalized() const
homogeneous normalization
Definition: Homogeneous.h:166
@ LazyProduct
Definition: Constants.h:504
@ Horizontal
Definition: Constants.h:269
@ Vertical
Definition: Constants.h:266
@ Projective
Definition: Constants.h:462
const unsigned int RowMajorBit
Definition: Constants.h:70
return int(ret)+1
func(actual_m, actual_n, a, *lda, actual_b, 1, actual_c, 1, alpha)
char char * op
Definition: level2_impl.h:374
@ Lhs
Definition: TensorContractionMapper.h:20
@ Rhs
Definition: TensorContractionMapper.h:20
typename remove_all< T >::type remove_all_t
Definition: Meta.h:142
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
const unsigned int HereditaryBits
Definition: Constants.h:198
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
const int Dynamic
Definition: Constants.h:25
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
static const unsigned Dim
Problem dimension.
Definition: two_d_tilted_square.cc:62
type
Definition: compute_granudrum_aor.py:141
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
Type
Type of JSON value.
Definition: rapidjson.h:513
Definition: Constants.h:540
Definition: Constants.h:546
Definition: Constants.h:558
Definition: AssignEvaluator.h:760
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename ArgType::Scalar > &)
Definition: Homogeneous.h:341
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename ArgType::Scalar > &)
Definition: Homogeneous.h:325
Definition: AssignEvaluator.h:773
Definition: AssignEvaluator.h:756
Definition: Constants.h:577
Template functor for scalar/packet assignment.
Definition: AssignmentFunctors.h:25
storage_kind_to_evaluator_kind< typename ArgType::StorageKind >::Kind Kind
Definition: Homogeneous.h:296
Definition: CoreEvaluators.h:95
Definition: CoreEvaluators.h:104
static EIGEN_DEVICE_FUNC void evalTo(Dest &dst, const Homogeneous< LhsArg, Horizontal > &lhs, const Rhs &rhs)
Definition: Homogeneous.h:355
static void evalTo(Dest &dst, const Lhs &lhs, const Homogeneous< RhsArg, Vertical > &rhs)
Definition: Homogeneous.h:402
static EIGEN_DEVICE_FUNC void evalTo(Dest &dst, const Lhs &lhs, const Homogeneous< RhsArg, Vertical > &rhs)
Definition: Homogeneous.h:392
static EIGEN_DEVICE_FUNC void evalTo(Dest &dst, const TransformType &lhs, const Homogeneous< RhsArg, Vertical > &rhs)
Definition: Homogeneous.h:441
Definition: ProductEvaluators.h:78
remove_all_t< LhsMatrixType > LhsMatrixTypeCleaned
Definition: Homogeneous.h:242
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: Homogeneous.h:248
remove_all_t< typename LhsMatrixTypeCleaned::Nested > LhsMatrixTypeNested
Definition: Homogeneous.h:243
EIGEN_DEVICE_FUNC homogeneous_left_product_impl(const Lhs &lhs, const MatrixType &rhs)
Definition: Homogeneous.h:244
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: Homogeneous.h:247
traits< homogeneous_left_product_impl >::LhsMatrixType LhsMatrixType
Definition: Homogeneous.h:241
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
Definition: Homogeneous.h:251
Product< LinearBlock, Rhs, LazyProduct > LinearProduct
Definition: Homogeneous.h:414
Replicate< const ConstantColumn, 1, Cols > ConstantBlock
Definition: Homogeneous.h:413
Lhs::ConstColXpr ConstantColumn
Definition: Homogeneous.h:412
CwiseBinaryOp< internal::scalar_sum_op< typename Lhs::Scalar, typename Rhs::Scalar >, const LinearProduct, const ConstantBlock > Xpr
Definition: Homogeneous.h:417
std::remove_const_t< LinearBlockConst > LinearBlock
Definition: Homogeneous.h:411
Lhs::template ConstNColsBlockXpr< Dim >::Type LinearBlockConst
Definition: Homogeneous.h:410
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: Homogeneous.h:278
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: Homogeneous.h:279
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
Definition: Homogeneous.h:282
remove_all_t< typename Rhs::Nested > RhsNested
Definition: Homogeneous.h:275
EIGEN_DEVICE_FUNC homogeneous_right_product_impl(const MatrixType &lhs, const Rhs &rhs)
Definition: Homogeneous.h:276
Product< Lhs, LinearBlock, LazyProduct > LinearProduct
Definition: Homogeneous.h:367
Rhs::ConstRowXpr ConstantColumn
Definition: Homogeneous.h:365
CwiseBinaryOp< internal::scalar_sum_op< typename Lhs::Scalar, typename Rhs::Scalar >, const LinearProduct, const ConstantBlock > Xpr
Definition: Homogeneous.h:370
Rhs::template ConstNRowsBlockXpr< Dim >::Type LinearBlockConst
Definition: Homogeneous.h:363
std::remove_const_t< LinearBlockConst > LinearBlock
Definition: Homogeneous.h:364
Replicate< const ConstantColumn, Rows, 1 > ConstantBlock
Definition: Homogeneous.h:366
Definition: ProductEvaluators.h:965
homogeneous_left_product_refactoring_helper< Lhs, typename Rhs::NestedExpression > helper
Definition: Homogeneous.h:424
homogeneous_right_product_refactoring_helper< typename Lhs::NestedExpression, Rhs > helper
Definition: Homogeneous.h:378
Definition: ForwardDeclarations.h:221
Definition: XprHelper.h:506
Definition: Meta.h:388
static EIGEN_DEVICE_FUNC type run(const TransformType &x)
Definition: Homogeneous.h:217
Transform< Scalar, Dim, Mode, Options > TransformType
Definition: Homogeneous.h:215
std::add_const_t< typename TransformType::ConstAffinePart > type
Definition: Homogeneous.h:216
Transform< Scalar, Dim, Projective, Options > TransformType
Definition: Homogeneous.h:222
static EIGEN_DEVICE_FUNC const type & run(const TransformType &x)
Definition: Homogeneous.h:224
Definition: Homogeneous.h:208
static EIGEN_DEVICE_FUNC const type & run(const type &x)
Definition: Homogeneous.h:210
MatrixOrTransformType type
Definition: Homogeneous.h:209
std::remove_reference_t< MatrixTypeNested > MatrixTypeNested_
Definition: Homogeneous.h:39
ref_selector< MatrixType >::type MatrixTypeNested
Definition: Homogeneous.h:38
traits< MatrixType >::StorageKind StorageKind
Definition: Homogeneous.h:37
take_matrix_for_product< Lhs >::type LhsMatrixType
Definition: Homogeneous.h:229
make_proper_matrix_type< typename traits< MatrixTypeCleaned >::Scalar, LhsMatrixTypeCleaned::RowsAtCompileTime, MatrixTypeCleaned::ColsAtCompileTime, MatrixTypeCleaned::PlainObject::Options, LhsMatrixTypeCleaned::MaxRowsAtCompileTime, MatrixTypeCleaned::MaxColsAtCompileTime >::type ReturnType
Definition: Homogeneous.h:235
make_proper_matrix_type< typename traits< MatrixType >::Scalar, MatrixType::RowsAtCompileTime, Rhs::ColsAtCompileTime, MatrixType::PlainObject::Options, MatrixType::MaxRowsAtCompileTime, Rhs::MaxColsAtCompileTime >::type ReturnType
Definition: Homogeneous.h:269
Definition: ForwardDeclarations.h:21
evaluator< PlainObject > Base
Definition: Homogeneous.h:310
EIGEN_DEVICE_FUNC unary_evaluator(const XprType &op)
Definition: Homogeneous.h:312
Homogeneous< ArgType, Direction > XprType
Definition: Homogeneous.h:308
Definition: CoreEvaluators.h:82
Definition: benchGeometry.cpp:21