SourceForge Logo Tiny Vector Matrix library using Expression Templates Sourceforge Project Page

tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 > Class Template Reference

#include <tvmet/xpr/MtMProduct.h>

Inheritance diagram for tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >:

Inheritance graph
[legend]
Collaboration diagram for tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >:

Collaboration graph
[legend]
List of all members.

Detailed Description

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
class tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >

Expression for product of transposed(matrix)-matrix product.

using formula

\[ M_1^{T}\,M_2 \]

Note:
The number of rows of rhs matrix have to be equal rows of rhs matrix, since lhs matrix 1 is transposed. The result is a (Cols1 x Cols2) matrix.


Public Types

enum  {
  ops_lhs = E1::ops, ops_rhs = E2::ops, M = Rows1 * Cols1 * Cols2, N = (Rows1-1) * Cols1 * Cols2,
  ops_plus = M * NumericTraits<value_type>::ops_plus, ops_muls = N * NumericTraits<value_type>::ops_muls, ops = ops_plus + ops_muls, use_meta = Cols1*Cols2 < TVMET_COMPLEXITY_MM_TRIGGER ? true : false
}
 Complexity counter. More...
typedef PromoteTraits< typename
E1::value_type, typename E2::value_type
>::value_type 
value_type

Public Member Functions

 XprMtMProduct (const E1 &lhs, const E2 &rhs)
 Constructor.
value_type operator() (std::size_t i, std::size_t j) const
 index operator for arrays/matrices
void print_xpr (std::ostream &os, std::size_t l=0) const

Private Member Functions

 XprMtMProduct ()
XprMtMProductoperator= (const XprMtMProduct &)

Static Private Member Functions

static value_type do_gemtm (dispatch< true >, const E1 &lhs, const E2 &rhs, std::size_t i, std::size_t j)
 Wrapper for meta gemm.
static value_type do_gemtm (dispatch< false >, const E1 &lhs, const E2 &rhs, std::size_t i, std::size_t j)
 Wrapper for loop gemm.

Private Attributes

const E1 m_lhs
const E2 m_rhs


Member Typedef Documentation

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
typedef PromoteTraits< typename E1::value_type, typename E2::value_type >::value_type tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::value_type


Member Enumeration Documentation

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
anonymous enum

Complexity counter.

Enumerator:
ops_lhs 
ops_rhs 
M 
N 
ops_plus 
ops_muls 
ops 
use_meta 


Constructor & Destructor Documentation

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::XprMtMProduct (  )  [private]

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::XprMtMProduct ( const E1 &  lhs,
const E2 &  rhs 
) [inline, explicit]

Constructor.


Member Function Documentation

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
XprMtMProduct& tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::operator= ( const XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 > &   )  [private]

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
static value_type tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::do_gemtm ( dispatch< true >  ,
const E1 &  lhs,
const E2 &  rhs,
std::size_t  i,
std::size_t  j 
) [inline, static, private]

Wrapper for meta gemm.

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
static value_type tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::do_gemtm ( dispatch< false >  ,
const E1 &  lhs,
const E2 &  rhs,
std::size_t  i,
std::size_t  j 
) [inline, static, private]

Wrapper for loop gemm.

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
value_type tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::operator() ( std::size_t  i,
std::size_t  j 
) const [inline]

index operator for arrays/matrices

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
void tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::print_xpr ( std::ostream &  os,
std::size_t  l = 0 
) const [inline]


Member Data Documentation

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
const E1 tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::m_lhs [private]

template<class E1, std::size_t Rows1, std::size_t Cols1, class E2, std::size_t Cols2>
const E2 tvmet::XprMtMProduct< E1, Rows1, Cols1, E2, Cols2 >::m_rhs [private]


Author: