|
|
|
@ -117,8 +117,17 @@ public: |
|
|
|
|
|
|
|
|
|
void transpose(const MatExpr& expr, MatExpr& res) const CV_OVERRIDE; |
|
|
|
|
|
|
|
|
|
Size size(const MatExpr& expr) const CV_OVERRIDE |
|
|
|
|
{ |
|
|
|
|
return Size( |
|
|
|
|
(expr.flags & GEMM_2_T) ? expr.b.rows : expr.b.cols, |
|
|
|
|
(expr.flags & GEMM_1_T) ? expr.a.cols : expr.a.rows |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void makeExpr(MatExpr& res, int flags, const Mat& a, const Mat& b, |
|
|
|
|
double alpha=1, const Mat& c=Mat(), double beta=1); |
|
|
|
|
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
static MatOp_GEMM g_MatOp_GEMM; |
|
|
|
@ -199,7 +208,7 @@ static inline bool isReciprocal(const MatExpr& e) { return isBin(e,'/') && (!e.b |
|
|
|
|
static inline bool isT(const MatExpr& e) { return e.op == &g_MatOp_T; } |
|
|
|
|
static inline bool isInv(const MatExpr& e) { return e.op == &g_MatOp_Invert; } |
|
|
|
|
static inline bool isSolve(const MatExpr& e) { return e.op == &g_MatOp_Solve; } |
|
|
|
|
static inline bool isGEMM(const MatExpr& e) { return e.op == &g_MatOp_GEMM; } |
|
|
|
|
//static inline bool isGEMM(const MatExpr& e) { return e.op == &g_MatOp_GEMM; }
|
|
|
|
|
static inline bool isMatProd(const MatExpr& e) { return e.op == &g_MatOp_GEMM && (!e.c.data || e.beta == 0); } |
|
|
|
|
static inline bool isInitializer(const MatExpr& e) { return e.op == getGlobalMatOpInitializer(); } |
|
|
|
|
|
|
|
|
@ -1240,8 +1249,6 @@ Size MatExpr::size() const |
|
|
|
|
{ |
|
|
|
|
if( isT(*this) || isInv(*this) ) |
|
|
|
|
return Size(a.rows, a.cols); |
|
|
|
|
if( isGEMM(*this) ) |
|
|
|
|
return Size(b.cols, a.rows); |
|
|
|
|
if( isSolve(*this) ) |
|
|
|
|
return Size(b.cols, a.cols); |
|
|
|
|
if( isInitializer(*this) ) |
|
|
|
|