35 #ifndef _BLAZE_MATH_VIEWS_SUBMATRIX_H_
36 #define _BLAZE_MATH_VIEWS_SUBMATRIX_H_
143 template<
typename MT
145 inline typename SubmatrixExprTrait<MT,unaligned>::Type
150 return submatrix<unaligned>( ~matrix,
row,
column, m, n );
214 template<
typename MT
216 inline typename SubmatrixExprTrait<const MT,unaligned>::Type
221 return submatrix<unaligned>( ~matrix,
row,
column, m, n );
303 inline typename DisableIf< Or< IsComputation<MT>, IsTransExpr<MT> >
304 ,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
310 return ReturnType( ~matrix, row, column, m, n );
392 inline typename DisableIf< Or< IsComputation<MT>, IsTransExpr<MT> >
393 ,
typename SubmatrixExprTrait<const MT,AF>::Type >::Type
399 return ReturnType( ~matrix, row, column, m, n );
430 inline typename EnableIf< IsMatMatAddExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
431 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
435 return submatrix<AF>( (~matrix).leftOperand() ,
row,
column, m, n ) +
436 submatrix<AF>( (~matrix).rightOperand(),
row,
column, m, n );
460 inline typename EnableIf< IsMatMatSubExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
461 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
465 return submatrix<AF>( (~matrix).leftOperand() ,
row,
column, m, n ) -
466 submatrix<AF>( (~matrix).rightOperand(),
row,
column, m, n );
490 inline typename EnableIf< IsMatMatMultExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
491 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
495 typedef typename RemoveReference< typename MT::LeftOperand >::Type MT1;
496 typedef typename RemoveReference< typename MT::RightOperand >::Type MT2;
498 typename MT::LeftOperand left ( (~matrix).leftOperand() );
499 typename MT::RightOperand right( (~matrix).rightOperand() );
501 const size_t begin(
max( ( IsUpper<MT1>::value )
502 ?( ( !AF && IsStrictlyUpper<MT1>::value )?( row + 1UL ):( row ) )
504 , ( IsLower<MT2>::value )
505 ?( ( !AF && IsStrictlyLower<MT2>::value )?( column + 1UL ):( column ) )
507 const size_t end(
min( ( IsLower<MT1>::value )
508 ?( ( IsStrictlyLower<MT1>::value && m > 0UL )?( row + m - 1UL ):( row + m ) )
510 , ( IsUpper<MT2>::value )
511 ?( ( IsStrictlyUpper<MT2>::value && n > 0UL )?( column + n - 1UL ):( column + n ) )
512 :( left.columns() ) ) );
516 return submatrix<AF>( left,
row,
begin, m, diff ) *
517 submatrix<AF>( right, begin, column, diff, n );
541 inline typename EnableIf< IsVecTVecMultExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
542 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
546 return subvector<AF>( (~matrix).leftOperand(),
row, m ) *
547 subvector<AF>( (~matrix).rightOperand(),
column, n );
571 inline typename EnableIf< IsMatScalarMultExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
572 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
576 return submatrix<AF>( (~matrix).leftOperand(),
row,
column, m, n ) * (~matrix).rightOperand();
600 inline typename EnableIf< IsMatScalarDivExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
601 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
605 return submatrix<AF>( (~matrix).leftOperand(),
row,
column, m, n ) / (~matrix).rightOperand();
629 inline typename EnableIf< IsMatAbsExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
630 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
634 return abs( submatrix<AF>( (~matrix).operand(), row, column, m, n ) );
658 inline typename EnableIf< IsMatConjExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
659 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
663 return conj( submatrix<AF>( (~matrix).operand(), row, column, m, n ) );
687 inline typename EnableIf< IsMatRealExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
688 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
692 return real( submatrix<AF>( (~matrix).operand(), row, column, m, n ) );
716 inline typename EnableIf< IsMatImagExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
717 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
721 return imag( submatrix<AF>( (~matrix).operand(), row, column, m, n ) );
745 inline typename EnableIf< IsMatEvalExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
746 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
750 return eval( submatrix<AF>( (~matrix).operand(), row, column, m, n ) );
774 inline typename EnableIf< IsMatSerialExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
775 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
779 return serial( submatrix<AF>( (~matrix).operand(), row, column, m, n ) );
803 inline typename EnableIf< IsMatTransExpr<MT>,
typename SubmatrixExprTrait<MT,AF>::Type >::Type
804 submatrix(
const Matrix<MT,SO>& matrix,
size_t row,
size_t column,
size_t m,
size_t n )
808 return trans( submatrix<AF>( (~matrix).operand(), column, row, n, m ) );
const MT::ElementType max(const DenseMatrix< MT, SO > &dm)
Returns the largest element of the dense matrix.
Definition: DenseMatrix.h:1729
Header file for mathematical functions.
Header file for the alignment flag values.
Header file for basic type definitions.
BLAZE_ALWAYS_INLINE MT::Iterator end(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator just past the last element of row/column i.
Definition: Matrix.h:250
DisableIf< Or< IsComputation< MT >, IsTransExpr< MT > >, typename ColumnExprTrait< MT >::Type >::Type column(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific column of the given matrix.
Definition: Column.h:107
const DMatAbsExpr< MT, SO > abs(const DenseMatrix< MT, SO > &dm)
Returns a matrix containing the absolute values of each single element of dm.
Definition: DMatAbsExpr.h:938
Header file for the IsTransExpr type trait class.
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:721
Header file for the IsMatMatAddExpr type trait class.
const ImagExprTrait< MT >::Type imag(const DenseMatrix< MT, SO > &dm)
Returns a matrix containing the imaginary part of each single element of dm.
Definition: DMatImagExpr.h:920
Header file for the IsMatTransExpr type trait class.
ConjExprTrait< typename DiagonalProxy< MT >::RepresentedType >::Type conj(const DiagonalProxy< MT > &proxy)
Computing the complex conjugate of the represented element.
Definition: DiagonalProxy.h:487
Header file for all restructuring subvector functions.
Header file for the IsMatAbsExpr type trait class.
Header file for the DisableIf class template.
Header file for the IsStrictlyUpper type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for the IsVecTVecMultExpr type trait class.
Header file for the Or class template.
Header file for the IsMatMatMultExpr type trait class.
const MT::ElementType min(const DenseMatrix< MT, SO > &dm)
Returns the smallest element of the dense matrix.
Definition: DenseMatrix.h:1682
Header file for the IsMatSerialExpr type trait class.
Header file for the IsMatScalarMultExpr type trait class.
const RealExprTrait< MT >::Type real(const DenseMatrix< MT, SO > &dm)
Returns a matrix containing the real part of each single element of dm.
Definition: DMatRealExpr.h:920
Evaluation of the expression type type of a submatrix operation.Via this type trait it is possible to...
Definition: SubmatrixExprTrait.h:78
Header file for the IsLower type trait.
Header file for the IsMatEvalExpr type trait class.
BLAZE_ALWAYS_INLINE MT::Iterator begin(Matrix< MT, SO > &matrix, size_t i)
Returns an iterator to the first element of row/column i.
Definition: Matrix.h:187
Header file for the EnableIf class template.
Header file for the IsStrictlyLower type trait.
Header file for the serial shim.
DisableIf< Or< IsComputation< MT >, IsTransExpr< MT > >, typename RowExprTrait< MT >::Type >::Type row(Matrix< MT, SO > &matrix, size_t index)
Creating a view on a specific row of the given matrix.
Definition: Row.h:107
Header file for the Matrix base class.
Header file for the SubmatrixExprTrait class template.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2587
Header file for the IsMatScalarDivExpr type trait class.
Base class for matrices.The Matrix class is a base class for all dense and sparse matrix classes with...
Definition: Forward.h:94
const DMatEvalExpr< MT, SO > eval(const DenseMatrix< MT, SO > &dm)
Forces the evaluation of the given dense matrix expression dm.
Definition: DMatEvalExpr.h:703
Header file for the IsMatMatSubExpr type trait class.
Header file for the RemoveReference type trait.
SubmatrixExprTrait< MT, unaligned >::Type submatrix(Matrix< MT, SO > &matrix, size_t row, size_t column, size_t m, size_t n)
Creating a view on a specific submatrix of the given matrix.
Definition: Submatrix.h:146
Header file for the IsMatRealExpr type trait class.
const DMatTransExpr< MT,!SO > trans(const DenseMatrix< MT, SO > &dm)
Calculation of the transpose of the given dense matrix.
Definition: DMatTransExpr.h:944
Header file for the IsComputation type trait class.
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:157
Header file for the IsMatConjExpr type trait class.
Header file for the IsMatImagExpr type trait class.
Header file for the IsUpper type trait.
Header file for the FunctionTrace class.