MCPcopy Create free account
hub / github.com/Meshcapade/difflocks / BinaryOp

Class BinaryOp

extensions/include/cuMat/src/BinaryOps.h:70–167  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

68*/
69template<typename _Left, typename _Right, typename _BinaryFunctor>
70class BinaryOp : public CwiseOp<BinaryOp<_Left, _Right, _BinaryFunctor> >
71{
72public:
73 typedef CwiseOp<BinaryOp<_Left, _Right, _BinaryFunctor> > Base;
74 typedef BinaryOp<_Left, _Right, _BinaryFunctor> Type;
75 CUMAT_PUBLIC_API
76
77 using LeftScalar = typename internal::traits<_Left>::Scalar;
78 using RightScalar = typename internal::traits<_Right>::Scalar;
79 enum
80 {
81 BroadcastRowsLeft = (internal::traits<_Left>::RowsAtCompileTime == 1),
82 BroadcastColsLeft = (internal::traits<_Left>::ColsAtCompileTime == 1),
83 BroadcastBatchesLeft = (internal::traits<_Left>::BatchesAtCompileTime == 1),
84
85 BroadcastRowsRight = (internal::traits<_Right>::RowsAtCompileTime == 1),
86 BroadcastColsRight = (internal::traits<_Right>::ColsAtCompileTime == 1),
87 BroadcastBatchesRight = (internal::traits<_Right>::BatchesAtCompileTime == 1),
88
89 FlagsLeft = internal::traits<_Left>::Flags,
90 RowsLeft = internal::traits<_Left>::RowsAtCompileTime,
91 ColumnsLeft = internal::traits<_Left>::ColsAtCompileTime,
92 BatchesLeft = internal::traits<_Left>::BatchesAtCompileTime,
93
94 FlagsRight = internal::traits<_Right>::Flags,
95 RowsRight = internal::traits<_Right>::RowsAtCompileTime,
96 ColumnsRight = internal::traits<_Right>::ColsAtCompileTime,
97 BatchesRight = internal::traits<_Right>::BatchesAtCompileTime,
98
99 //Flags, Rows, Columns, Batches defined in CUMAT_PUBLIC_API
100 };
101
102protected:
103 typedef typename MatrixReadWrapper<_Left, AccessFlags::ReadCwise>::type left_wrapped_t;
104 typedef typename MatrixReadWrapper<_Right, AccessFlags::ReadCwise>::type right_wrapped_t;
105 const left_wrapped_t left_;
106 const right_wrapped_t right_;
107 const _BinaryFunctor functor_;
108
109public:
110 BinaryOp(const MatrixBase<_Left>& left, const MatrixBase<_Right>& right,
111 const _BinaryFunctor& functor = _BinaryFunctor())
112 : left_(left.derived()), right_(right.derived()), functor_(functor)
113 {
114 CUMAT_STATIC_ASSERT((std::is_same<typename internal::traits<_Left>::Scalar, typename internal::traits<_Right>::Scalar>::value),
115 "No implicit casting is allowed in binary operations.");
116
117 if (RowsLeft == Dynamic && RowsRight == Dynamic) {
118 CUMAT_ASSERT_ARGUMENT(left.rows() == right.rows());
119 }
120 CUMAT_STATIC_ASSERT(!(RowsLeft > 1 && RowsRight > 1) || (RowsLeft == RowsRight), "matrix sizes don't match");
121
122 if (ColumnsLeft == Dynamic && ColumnsRight == Dynamic) {
123 CUMAT_ASSERT_ARGUMENT(left.cols() == right.cols());
124 }
125 CUMAT_STATIC_ASSERT(!(ColumnsLeft > 1 && ColumnsRight > 1) || (ColumnsLeft == ColumnsRight), "matrix sizes don't match");
126
127 if (BatchesLeft == Dynamic && BatchesRight == Dynamic) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected