22 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATTRANSPOSER_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SMATTRANSPOSER_H_
54 class SMatTransposer :
public SparseMatrix< SMatTransposer<MT,SO>, SO >
133 return sm_.columns();
171 return sm_.insert( j, i, value );
186 sm_.reserve( nonzeros );
204 inline void reserve(
size_t i,
size_t nonzeros ) {
205 sm_.reserve( i, nonzeros );
237 sm_.append( j, i, value, check );
265 template<
typename Other >
268 return sm_.canAlias( alias );
278 template<
typename Other >
281 return sm_.isAliased( alias );
296 template<
typename MT2 >
305 typedef typename MT2::ConstIterator RhsIterator;
307 const size_t m(
rows() );
309 for(
size_t i=0UL; i<m; ++i ) {
310 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element )
311 sm_.append( element->index(), i, element->value() );
328 template<
typename MT2 >
337 typedef typename MT2::ConstIterator RhsIterator;
339 const size_t m(
rows() );
343 std::vector<size_t> rowLengths( m, 0UL );
344 for(
size_t j=0UL; j<n; ++j ) {
345 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element )
346 ++rowLengths[element->index()];
350 for(
size_t i=0UL; i<m; ++i ) {
351 sm_.reserve( i, rowLengths[i] );
355 for(
size_t j=0UL; j<n; ++j ) {
356 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element ) {
357 sm_.append( j, element->index(), element->value() );
394 template<
typename MT >
400 typedef typename MT::TransposeType
ResultType;
406 typedef typename MT::Reference
Reference;
408 typedef typename MT::Iterator
Iterator;
463 inline size_t rows()
const {
464 return sm_.columns();
473 inline size_t columns()
const {
483 inline void reset() {
502 return sm_.insert( j, i, value );
516 inline void reserve(
size_t nonzeros ) {
517 sm_.reserve( nonzeros );
532 inline void reserve(
size_t i,
size_t nonzeros ) {
533 sm_.reserve( i, nonzeros );
565 sm_.append( j, i, value, check );
593 template<
typename Other >
594 inline bool isAliased(
const Other* alias )
const
596 return sm_.isAliased( alias );
611 template<
typename MT2 >
612 inline void assign(
const SparseMatrix<MT2,false>& rhs )
620 typedef typename MT2::ConstIterator RhsIterator;
622 const size_t m(
rows() );
626 std::vector<size_t> columnLengths( n, 0UL );
627 for(
size_t i=0UL; i<m; ++i ) {
628 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element )
629 ++columnLengths[element->index()];
633 for(
size_t j=0UL; j<n; ++j ) {
634 sm_.reserve( j, columnLengths[j] );
638 for(
size_t i=0UL; i<m; ++i ) {
639 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element ) {
640 sm_.append( element->index(), i, element->value() );
657 template<
typename MT2 >
658 inline void assign(
const SparseMatrix<MT2,true>& rhs )
666 typedef typename MT2::ConstIterator RhsIterator;
670 for(
size_t j=0UL; j<n; ++j ) {
671 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element )
672 sm_.append( j, element->index(), element->value() );