22 #ifndef _BLAZE_MATH_EXPRESSIONS_SMATTRANSPOSER_H_
23 #define _BLAZE_MATH_EXPRESSIONS_SMATTRANSPOSER_H_
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 );
233 sm_.append( j, i, value );
261 template<
typename Other >
264 return sm_.isAliased( alias );
279 template<
typename MT2 >
288 typedef typename MT2::ConstIterator RhsIterator;
290 const size_t m(
rows() );
292 for(
size_t i=0UL; i<m; ++i ) {
293 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element )
294 sm_.append( element->index(), i, element->value() );
311 template<
typename MT2 >
320 typedef typename MT2::ConstIterator RhsIterator;
322 const size_t m(
rows() );
326 std::vector<size_t> rowLengths( m, 0UL );
327 for(
size_t j=0UL; j<n; ++j ) {
328 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element )
329 ++rowLengths[element->index()];
333 for(
size_t i=0UL; i<m; ++i ) {
334 sm_.reserve( i, rowLengths[i] );
338 for(
size_t j=0UL; j<n; ++j ) {
339 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element ) {
340 sm_.append( j, element->index(), element->value() );
377 template<
typename MT >
383 typedef typename MT::TransposeType
ResultType;
389 typedef typename MT::Reference
Reference;
391 typedef typename MT::Iterator
Iterator;
446 inline size_t rows()
const {
447 return sm_.columns();
456 inline size_t columns()
const {
466 inline void reset() {
485 return sm_.insert( j, i, value );
499 inline void reserve(
size_t nonzeros ) {
500 sm_.reserve( nonzeros );
515 inline void reserve(
size_t i,
size_t nonzeros ) {
516 sm_.reserve( i, nonzeros );
544 sm_.append( j, i, value );
572 template<
typename Other >
573 inline bool isAliased(
const Other* alias )
const
575 return sm_.isAliased( alias );
590 template<
typename MT2 >
599 typedef typename MT2::ConstIterator RhsIterator;
601 const size_t m(
rows() );
605 std::vector<size_t> columnLengths( n, 0UL );
606 for(
size_t i=0UL; i<m; ++i ) {
607 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element )
608 ++columnLengths[element->index()];
612 for(
size_t j=0UL; j<n; ++j ) {
613 sm_.reserve( j, columnLengths[j] );
617 for(
size_t i=0UL; i<m; ++i ) {
618 for( RhsIterator element=(~rhs).
begin(i); element!=(~rhs).
end(i); ++element ) {
619 sm_.append( element->index(), i, element->value() );
636 template<
typename MT2 >
645 typedef typename MT2::ConstIterator RhsIterator;
649 for(
size_t j=0UL; j<n; ++j ) {
650 for( RhsIterator element=(~rhs).
begin(j); element!=(~rhs).
end(j); ++element )
651 sm_.append( j, element->index(), element->value() );