10#ifndef EIGEN_HOMOGENEOUS_H
11#define EIGEN_HOMOGENEOUS_H
32template<
typename MatrixType,
int Direction>
40 RowsPlusOne = (MatrixType::RowsAtCompileTime !=
Dynamic) ?
41 int(MatrixType::RowsAtCompileTime) + 1 :
Dynamic,
42 ColsPlusOne = (MatrixType::ColsAtCompileTime !=
Dynamic) ?
43 int(MatrixType::ColsAtCompileTime) + 1 :
Dynamic,
44 RowsAtCompileTime = Direction==
Vertical ? RowsPlusOne : MatrixType::RowsAtCompileTime,
45 ColsAtCompileTime = Direction==
Horizontal ? ColsPlusOne : MatrixType::ColsAtCompileTime,
46 MaxRowsAtCompileTime = RowsAtCompileTime,
47 MaxColsAtCompileTime = ColsAtCompileTime,
49 Flags = ColsAtCompileTime==1 ? (TmpFlags & ~RowMajorBit)
66 enum { Direction = _Direction };
82 template<
typename Rhs>
90 template<
typename Lhs>
friend
98 template<
typename Scalar,
int Dim,
int Mode,
int Options>
friend
106 template<
typename Func>
130template<
typename Derived>
148template<
typename ExpressionType,
int Direction>
172template<
typename Derived>
178 ColsAtCompileTime==1?
size()-1:1,
179 ColsAtCompileTime==1?1:
size()-1) / coeff(
size()-1);
196template<
typename ExpressionType,
int Direction>
201 Direction==
Vertical ? _expression().
rows()-1 : _expression().rows(),
204 Direction==
Vertical ? HNormalized_SizeMinusOne : 1,
205 Direction==
Horizontal ? HNormalized_SizeMinusOne : 1>
208 Direction==
Horizontal ? _expression().cols()-1:0,
209 Direction==
Vertical ? 1 : _expression().rows(),
210 Direction==
Horizontal ? 1 : _expression().cols()),
211 Direction==
Vertical ? _expression().rows()-1 : 1,
212 Direction==
Horizontal ? _expression().cols()-1 : 1));
217template<
typename MatrixOrTransformType>
224template<
typename Scalar,
int Dim,
int Mode,
int Options>
232template<
typename Scalar,
int Dim,
int Options>
236 typedef typename TransformType::MatrixType
type;
240template<
typename MatrixType,
typename Lhs>
248 LhsMatrixTypeCleaned::RowsAtCompileTime,
249 MatrixTypeCleaned::ColsAtCompileTime,
250 MatrixTypeCleaned::PlainObject::Options,
251 LhsMatrixTypeCleaned::MaxRowsAtCompileTime,
255template<
typename MatrixType,
typename Lhs>
257 :
public ReturnByValue<homogeneous_left_product_impl<Homogeneous<MatrixType,Vertical>,Lhs> >
276 LhsMatrixTypeNested::RowsAtCompileTime,
277 LhsMatrixTypeNested::ColsAtCompileTime==
Dynamic?
Dynamic:LhsMatrixTypeNested::ColsAtCompileTime-1>
278 (m_lhs,0,0,m_lhs.rows(),m_lhs.cols()-1) * m_rhs;
279 dst += m_lhs.col(m_lhs.cols()-1).rowwise()
283 typename LhsMatrixTypeCleaned::Nested
m_lhs;
287template<
typename MatrixType,
typename Rhs>
291 MatrixType::RowsAtCompileTime,
292 Rhs::ColsAtCompileTime,
293 MatrixType::PlainObject::Options,
294 MatrixType::MaxRowsAtCompileTime,
298template<
typename MatrixType,
typename Rhs>
300 :
public ReturnByValue<homogeneous_right_product_impl<Homogeneous<MatrixType,Horizontal>,Rhs> >
304 : m_lhs(lhs), m_rhs(rhs)
314 RhsNested::RowsAtCompileTime==
Dynamic?
Dynamic:RhsNested::RowsAtCompileTime-1,
315 RhsNested::ColsAtCompileTime>
316 (m_rhs,0,0,m_rhs.rows()-1,m_rhs.cols());
317 dst += m_rhs.row(m_rhs.rows()-1).colwise()
325template<
typename ArgType,
int Direction>
335template<
typename ArgType,
int Direction>
337 :
evaluator<typename Homogeneous<ArgType,Direction>::PlainObject >
346 ::new (
static_cast<Base*
>(
this))
Base(m_temp);
354template<
typename DstXprType,
typename ArgType,
typename Scalar>
366 dst.row(
dst.rows()-1).setOnes();
371template<
typename DstXprType,
typename ArgType,
typename Scalar>
383 dst.col(
dst.cols()-1).setOnes();
387template<
typename LhsArg,
typename Rhs,
int ProductTag>
390 template<
typename Dest>
397template<
typename Lhs,
typename Rhs>
401 Dim = Lhs::ColsAtCompileTime,
402 Rows = Lhs::RowsAtCompileTime
412template<
typename Lhs,
typename Rhs,
int ProductTag>
414 :
public evaluator<typename homogeneous_right_product_refactoring_helper<typename Lhs::NestedExpression,Rhs>::Xpr>
428template<
typename Lhs,
typename RhsArg,
int ProductTag>
431 template<
typename Dest>
440template<
typename Lhs,
typename RhsArg,
int ProductTag>
443 template<
typename Dest>
446 dst.noalias() = lhs * rhs.eval();
450template<
typename Lhs,
typename Rhs>
454 Dim = Rhs::RowsAtCompileTime,
455 Cols = Rhs::ColsAtCompileTime
465template<
typename Lhs,
typename Rhs,
int ProductTag>
467 :
public evaluator<typename homogeneous_left_product_refactoring_helper<Lhs,typename Rhs::NestedExpression>::Xpr>
481template<
typename Scalar,
int Dim,
int Mode,
int Options,
typename RhsArg,
int ProductTag>
485 template<
typename Dest>
492template<
typename ExpressionType,
int S
ide,
bool Transposed>
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE NRowsBlockXpr< internal::get_fixed_value< NRowsType >::value >::Type topRows(NRowsType n)
Definition BlockMethods.h:570
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE NColsBlockXpr< internal::get_fixed_value< NColsType >::value >::Type leftCols(NColsType n)
Definition BlockMethods.h:797
#define EIGEN_NOEXCEPT
Definition Macros.h:1418
#define EIGEN_CONSTEXPR
Definition Macros.h:787
#define EIGEN_DEVICE_FUNC
Definition Macros.h:976
#define EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
Definition Macros.h:1283
#define eigen_assert(x)
Definition Macros.h:1037
#define EIGEN_STRONG_INLINE
Definition Macros.h:917
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE const CwiseBinaryOp< internal::scalar_quotient_op< Scalar >, const Derived, const OtherDerived > cwiseQuotient(const EIGEN_CURRENT_STORAGE_BASE_CLASS< OtherDerived > &other) const
Definition MatrixCwiseBinaryOps.h:131
#define EIGEN_STATIC_ASSERT_VECTOR_ONLY(TYPE)
Definition StaticAssert.h:142
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:46
MatrixXf MatrixType
Definition benchmark-blocking-sizes.cpp:52
Expression of a fixed-size or dynamic-size block.
Definition Block.h:105
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition CwiseBinaryOp.h:84
Expression of one (or a set of) homogeneous vector(s)
Definition Homogeneous.h:62
EIGEN_DEVICE_FUNC const NestedExpression & nestedExpression() const
Definition Homogeneous.h:80
MatrixType NestedExpression
Definition Homogeneous.h:65
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition Homogeneous.h:76
MatrixBase< Homogeneous > Base
Definition Homogeneous.h:68
MatrixType::Nested m_matrix
Definition Homogeneous.h:114
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition Homogeneous.h:78
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE internal::result_of< Func(Scalar, Scalar)>::type redux(const Func &func) const
Definition Homogeneous.h:108
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
Expression of the product of two arbitrary matrices or vectors.
Definition Product.h:75
Expression of the multiple replication of a matrix or vector.
Definition Replicate.h:63
Definition ReturnByValue.h:52
Definition TensorRef.h:81
Definition XprHelper.h:258
Definition XprHelper.h:110
Map< Matrix< T, Dynamic, Dynamic, ColMajor >, 0, OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition common.h:110
set noclip points set clip one set noclip two set bar set border lt lw set xdata set ydata set zdata set x2data set y2data set boxwidth set dummy x
Definition gnuplot_common_settings.hh:12
EIGEN_DEVICE_FUNC HomogeneousReturnType homogeneous() const
Definition Homogeneous.h:150
EIGEN_DEVICE_FUNC HomogeneousReturnType homogeneous() const
Definition Homogeneous.h:132
EIGEN_DEVICE_FUNC const HNormalizedReturnType hnormalized() const
column or row-wise homogeneous normalization
Definition Homogeneous.h:198
EIGEN_DEVICE_FUNC const HNormalizedReturnType hnormalized() const
homogeneous normalization
Definition Homogeneous.h:174
@ Horizontal
Definition Constants.h:267
@ Vertical
Definition Constants.h:264
@ Projective
Definition Constants.h:464
const unsigned int RowMajorBit
Definition Constants.h:66
@ Lhs
Definition TensorContractionMapper.h:19
@ Rhs
Definition TensorContractionMapper.h:18
Namespace containing all symbols from the Eigen library.
Definition bench_norm.cpp:85
@ LazyProduct
Definition Constants.h:500
const unsigned int HereditaryBits
Definition Constants.h:195
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition Meta.h:74
const int Dynamic
Definition Constants.h:22
Definition BandTriangularSolver.h:13
const Block< const Derived, internal::traits< Derived >::RowsAtCompileTime, N, !IsRowMajor > Type
Definition BlockMethods.h:27
const Block< const Derived, N, internal::traits< Derived >::ColsAtCompileTime, IsRowMajor > Type
Definition BlockMethods.h:30
Definition Constants.h:528
Definition Constants.h:530
Definition Constants.h:533
Dense2Dense Kind
Definition Homogeneous.h:332
Definition AssignEvaluator.h:817
Homogeneous< ArgType, Horizontal > SrcXprType
Definition Homogeneous.h:374
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename ArgType::Scalar > &)
Definition Homogeneous.h:375
Homogeneous< ArgType, Vertical > SrcXprType
Definition Homogeneous.h:357
static EIGEN_DEVICE_FUNC void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< Scalar, typename ArgType::Scalar > &)
Definition Homogeneous.h:358
Definition AssignEvaluator.h:824
Definition AssignEvaluator.h:814
Definition Constants.h:542
Definition AssignmentFunctors.h:21
storage_kind_to_evaluator_kind< typenameArgType::StorageKind >::Kind Kind
Definition Homogeneous.h:328
HomogeneousShape Shape
Definition Homogeneous.h:329
Definition CoreEvaluators.h:80
Definition CoreEvaluators.h:91
static EIGEN_DEVICE_FUNC void evalTo(Dest &dst, const Homogeneous< LhsArg, Horizontal > &lhs, const Rhs &rhs)
Definition Homogeneous.h:391
static void evalTo(Dest &dst, const Lhs &lhs, const Homogeneous< RhsArg, Vertical > &rhs)
Definition Homogeneous.h:444
static EIGEN_DEVICE_FUNC void evalTo(Dest &dst, const Lhs &lhs, const Homogeneous< RhsArg, Vertical > &rhs)
Definition Homogeneous.h:432
Definition ProductEvaluators.h:86
remove_all< typenameLhsMatrixTypeCleaned::Nested >::type LhsMatrixTypeNested
Definition Homogeneous.h:261
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition Homogeneous.h:270
EIGEN_DEVICE_FUNC homogeneous_left_product_impl(const Lhs &lhs, const MatrixType &rhs)
Definition Homogeneous.h:262
MatrixType::Nested m_rhs
Definition Homogeneous.h:284
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition Homogeneous.h:268
LhsMatrixTypeCleaned::Nested m_lhs
Definition Homogeneous.h:283
traits< homogeneous_left_product_impl >::LhsMatrixType LhsMatrixType
Definition Homogeneous.h:259
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
Definition Homogeneous.h:272
remove_all< LhsMatrixType >::type LhsMatrixTypeCleaned
Definition Homogeneous.h:260
Definition Homogeneous.h:55
Definition Homogeneous.h:452
remove_const< LinearBlockConst >::type LinearBlock
Definition Homogeneous.h:458
CwiseBinaryOp< internal::scalar_sum_op< typename Lhs::Scalar, typename Rhs::Scalar >, const LinearProduct, const ConstantBlock > Xpr
Definition Homogeneous.h:462
Lhs::ConstColXpr ConstantColumn
Definition Homogeneous.h:459
Product< LinearBlock, Rhs, LazyProduct > LinearProduct
Definition Homogeneous.h:461
Replicate< const ConstantColumn, 1, Cols > ConstantBlock
Definition Homogeneous.h:460
Lhs::template ConstNColsBlockXpr< Dim >::Type LinearBlockConst
Definition Homogeneous.h:457
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition Homogeneous.h:307
Rhs::Nested m_rhs
Definition Homogeneous.h:322
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition Homogeneous.h:308
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
Definition Homogeneous.h:310
EIGEN_DEVICE_FUNC homogeneous_right_product_impl(const MatrixType &lhs, const Rhs &rhs)
Definition Homogeneous.h:303
remove_all< typenameRhs::Nested >::type RhsNested
Definition Homogeneous.h:302
MatrixType::Nested m_lhs
Definition Homogeneous.h:321
Definition Homogeneous.h:56
Definition Homogeneous.h:399
Replicate< const ConstantColumn, Rows, 1 > ConstantBlock
Definition Homogeneous.h:407
remove_const< LinearBlockConst >::type LinearBlock
Definition Homogeneous.h:405
Rhs::ConstRowXpr ConstantColumn
Definition Homogeneous.h:406
Rhs::template ConstNRowsBlockXpr< Dim >::Type LinearBlockConst
Definition Homogeneous.h:404
Product< Lhs, LinearBlock, LazyProduct > LinearProduct
Definition Homogeneous.h:408
CwiseBinaryOp< internal::scalar_sum_op< typename Lhs::Scalar, typename Rhs::Scalar >, const LinearProduct, const ConstantBlock > Xpr
Definition Homogeneous.h:409
Definition ProductEvaluators.h:998
helper::Xpr RefactoredXpr
Definition Homogeneous.h:472
helper::ConstantBlock ConstantBlock
Definition Homogeneous.h:471
Product< Lhs, Rhs, LazyProduct > XprType
Definition Homogeneous.h:469
EIGEN_DEVICE_FUNC product_evaluator(const XprType &xpr)
Definition Homogeneous.h:475
homogeneous_left_product_refactoring_helper< Lhs, typename Rhs::NestedExpression > helper
Definition Homogeneous.h:470
evaluator< RefactoredXpr > Base
Definition Homogeneous.h:473
homogeneous_right_product_refactoring_helper< typename Lhs::NestedExpression, Rhs > helper
Definition Homogeneous.h:417
EIGEN_DEVICE_FUNC product_evaluator(const XprType &xpr)
Definition Homogeneous.h:422
Product< Lhs, Rhs, LazyProduct > XprType
Definition Homogeneous.h:416
evaluator< RefactoredXpr > Base
Definition Homogeneous.h:420
helper::ConstantBlock ConstantBlock
Definition Homogeneous.h:418
helper::Xpr RefactoredXpr
Definition Homogeneous.h:419
Definition ForwardDeclarations.h:164
Definition Homogeneous.h:219
static EIGEN_DEVICE_FUNC const type & run(const type &x)
Definition Homogeneous.h:221
MatrixOrTransformType type
Definition Homogeneous.h:220
remove_reference< MatrixTypeNested >::type _MatrixTypeNested
Definition Homogeneous.h:38
ref_selector< MatrixType >::type MatrixTypeNested
Definition Homogeneous.h:37
traits< MatrixType >::StorageKind StorageKind
Definition Homogeneous.h:36
make_proper_matrix_type< typenametraits< MatrixTypeCleaned >::Scalar, LhsMatrixTypeCleaned::RowsAtCompileTime, MatrixTypeCleaned::ColsAtCompileTime, MatrixTypeCleaned::PlainObject::Options, LhsMatrixTypeCleaned::MaxRowsAtCompileTime, MatrixTypeCleaned::MaxColsAtCompileTime >::type ReturnType
Definition Homogeneous.h:252
remove_all< LhsMatrixType >::type LhsMatrixTypeCleaned
Definition Homogeneous.h:245
remove_all< MatrixType >::type MatrixTypeCleaned
Definition Homogeneous.h:244
take_matrix_for_product< Lhs >::type LhsMatrixType
Definition Homogeneous.h:243
make_proper_matrix_type< typenametraits< MatrixType >::Scalar, MatrixType::RowsAtCompileTime, Rhs::ColsAtCompileTime, MatrixType::PlainObject::Options, MatrixType::MaxRowsAtCompileTime, Rhs::MaxColsAtCompileTime >::type ReturnType
Definition Homogeneous.h:295
Definition ForwardDeclarations.h:17
evaluator< PlainObject > Base
Definition Homogeneous.h:341
EIGEN_DEVICE_FUNC unary_evaluator(const XprType &op)
Definition Homogeneous.h:343
XprType::PlainObject PlainObject
Definition Homogeneous.h:340
Homogeneous< ArgType, Direction > XprType
Definition Homogeneous.h:339
PlainObject m_temp
Definition Homogeneous.h:350
Definition CoreEvaluators.h:65
Definition benchGeometry.cpp:23