StrictlyLowerMatrix.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_STRICTLYLOWERMATRIX_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
48 #include <blaze/math/Forward.h>
68 
69 
70 namespace blaze {
71 
72 //=================================================================================================
73 //
74 // STRICTLYLOWERMATRIX OPERATORS
75 //
76 //=================================================================================================
77 
78 //*************************************************************************************************
81 template< typename MT, bool SO, bool DF >
82 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m );
83 
84 template< typename MT, bool SO, bool DF >
85 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m, size_t i );
86 
87 template< typename MT, bool SO, bool DF >
88 inline void clear( StrictlyLowerMatrix<MT,SO,DF>& m );
89 
90 template< typename MT, bool SO, bool DF >
91 inline bool isDefault( const StrictlyLowerMatrix<MT,SO,DF>& m );
92 
93 template< typename MT, bool SO, bool DF >
94 inline void swap( StrictlyLowerMatrix<MT,SO,DF>& a, StrictlyLowerMatrix<MT,SO,DF>& b ) /* throw() */;
96 //*************************************************************************************************
97 
98 
99 //*************************************************************************************************
106 template< typename MT // Type of the adapted matrix
107  , bool SO // Storage order of the adapted matrix
108  , bool DF > // Density flag
110 {
111  m.reset();
112 }
113 //*************************************************************************************************
114 
115 
116 //*************************************************************************************************
129 template< typename MT // Type of the adapted matrix
130  , bool SO // Storage order of the adapted matrix
131  , bool DF > // Density flag
132 inline void reset( StrictlyLowerMatrix<MT,SO,DF>& m, size_t i )
133 {
134  m.reset( i );
135 }
136 //*************************************************************************************************
137 
138 
139 //*************************************************************************************************
146 template< typename MT // Type of the adapted matrix
147  , bool SO // Storage order of the adapted matrix
148  , bool DF > // Density flag
150 {
151  m.clear();
152 }
153 //*************************************************************************************************
154 
155 
156 //*************************************************************************************************
167 template< typename MT // Type of the adapted matrix
168  , bool SO // Storage order of the adapted matrix
169  , bool DF > // Density flag
170 inline bool isDefault_backend( const StrictlyLowerMatrix<MT,SO,DF>& m, TrueType )
171 {
172  return ( m.rows() == 0UL );
173 }
175 //*************************************************************************************************
176 
177 
178 //*************************************************************************************************
189 template< typename MT // Type of the adapted matrix
190  , bool SO // Storage order of the adapted matrix
191  , bool DF > // Density flag
192 inline bool isDefault_backend( const StrictlyLowerMatrix<MT,SO,DF>& m, FalseType )
193 {
194  return isIdentity( m );
195 }
197 //*************************************************************************************************
198 
199 
200 //*************************************************************************************************
220 template< typename MT // Type of the adapted matrix
221  , bool SO // Storage order of the adapted matrix
222  , bool DF > // Density flag
224 {
225  return isDefault_backend( m, typename IsResizable<MT>::Type() );
226 }
227 //*************************************************************************************************
228 
229 
230 //*************************************************************************************************
239 template< typename MT // Type of the adapted matrix
240  , bool SO // Storage order of the adapted matrix
241  , bool DF > // Density flag
243 {
244  a.swap( b );
245 }
246 //*************************************************************************************************
247 
248 
249 //*************************************************************************************************
263 template< typename MT // Type of the adapted matrix
264  , bool SO // Storage order of the adapted matrix
265  , bool DF > // Density flag
266 inline MT& derestrict( StrictlyLowerMatrix<MT,SO,DF>& m )
267 {
268  return m.matrix_;
269 }
271 //*************************************************************************************************
272 
273 
274 
275 
276 //=================================================================================================
277 //
278 // ROWS SPECIALIZATIONS
279 //
280 //=================================================================================================
281 
282 //*************************************************************************************************
284 template< typename MT, bool SO, bool DF >
285 struct Rows< StrictlyLowerMatrix<MT,SO,DF> > : public Rows<MT>
286 {};
288 //*************************************************************************************************
289 
290 
291 
292 
293 //=================================================================================================
294 //
295 // COLUMNS SPECIALIZATIONS
296 //
297 //=================================================================================================
298 
299 //*************************************************************************************************
301 template< typename MT, bool SO, bool DF >
302 struct Columns< StrictlyLowerMatrix<MT,SO,DF> > : public Columns<MT>
303 {};
305 //*************************************************************************************************
306 
307 
308 
309 
310 //=================================================================================================
311 //
312 // ISSQUARE SPECIALIZATIONS
313 //
314 //=================================================================================================
315 
316 //*************************************************************************************************
318 template< typename MT, bool SO, bool DF >
319 struct IsSquare< StrictlyLowerMatrix<MT,SO,DF> > : public TrueType
320 {
321  enum { value = 1 };
322  typedef TrueType Type;
323 };
325 //*************************************************************************************************
326 
327 
328 
329 
330 //=================================================================================================
331 //
332 // ISSTRICTLYLOWER SPECIALIZATIONS
333 //
334 //=================================================================================================
335 
336 //*************************************************************************************************
338 template< typename MT, bool SO, bool DF >
339 struct IsStrictlyLower< StrictlyLowerMatrix<MT,SO,DF> > : public TrueType
340 {
341  enum { value = 1 };
342  typedef TrueType Type;
343 };
345 //*************************************************************************************************
346 
347 
348 
349 
350 //=================================================================================================
351 //
352 // ISADAPTOR SPECIALIZATIONS
353 //
354 //=================================================================================================
355 
356 //*************************************************************************************************
358 template< typename MT, bool SO, bool DF >
359 struct IsAdaptor< StrictlyLowerMatrix<MT,SO,DF> > : public TrueType
360 {
361  enum { value = 1 };
362  typedef TrueType Type;
363 };
365 //*************************************************************************************************
366 
367 
368 
369 
370 //=================================================================================================
371 //
372 // ISRESTRICTED SPECIALIZATIONS
373 //
374 //=================================================================================================
375 
376 //*************************************************************************************************
378 template< typename MT, bool SO, bool DF >
379 struct IsRestricted< StrictlyLowerMatrix<MT,SO,DF> > : public TrueType
380 {
381  enum { value = 1 };
382  typedef TrueType Type;
383 };
385 //*************************************************************************************************
386 
387 
388 
389 
390 //=================================================================================================
391 //
392 // HASCONSTDATAACCESS SPECIALIZATIONS
393 //
394 //=================================================================================================
395 
396 //*************************************************************************************************
398 template< typename MT, bool SO >
399 struct HasConstDataAccess< StrictlyLowerMatrix<MT,SO,true> > : public TrueType
400 {
401  enum { value = 1 };
402  typedef TrueType Type;
403 };
405 //*************************************************************************************************
406 
407 
408 
409 
410 //=================================================================================================
411 //
412 // ISRESIZABLE SPECIALIZATIONS
413 //
414 //=================================================================================================
415 
416 //*************************************************************************************************
418 template< typename MT, bool SO, bool DF >
419 struct IsResizable< StrictlyLowerMatrix<MT,SO,DF> > : public IsResizable<MT>::Type
420 {
421  enum { value = IsResizable<MT>::value };
422  typedef typename IsResizable<MT>::Type Type;
423 };
425 //*************************************************************************************************
426 
427 
428 
429 
430 //=================================================================================================
431 //
432 // REMOVEADAPTOR SPECIALIZATIONS
433 //
434 //=================================================================================================
435 
436 //*************************************************************************************************
438 template< typename MT, bool SO, bool DF >
439 struct RemoveAdaptor< StrictlyLowerMatrix<MT,SO,DF> >
440 {
441  typedef MT Type;
442 };
444 //*************************************************************************************************
445 
446 
447 
448 
449 //=================================================================================================
450 //
451 // DERESTRICTTRAIT SPECIALIZATIONS
452 //
453 //=================================================================================================
454 
455 //*************************************************************************************************
457 template< typename MT, bool SO, bool DF >
458 struct DerestrictTrait< StrictlyLowerMatrix<MT,SO,DF> >
459 {
460  typedef MT& Type;
461 };
463 //*************************************************************************************************
464 
465 
466 
467 
468 //=================================================================================================
469 //
470 // ADDTRAIT SPECIALIZATIONS
471 //
472 //=================================================================================================
473 
474 //*************************************************************************************************
476 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
477 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
478 {
479  typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
480 };
481 
482 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
483 struct AddTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
484 {
485  typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
486 };
487 
488 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
489 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
490 {
491  typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
492 };
493 
494 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
495 struct AddTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
496 {
497  typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
498 };
499 
500 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
501 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
502 {
503  typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
504 };
505 
506 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
507 struct AddTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
508 {
509  typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
510 };
511 
512 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
513 struct AddTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
514 {
515  typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
516 };
517 
518 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
519 struct AddTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
520 {
521  typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
522 };
523 
524 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
525 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
526 {
527  typedef typename AddTrait<MT1,MT2>::Type Type;
528 };
529 
530 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
531 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
532 {
533  typedef typename AddTrait<MT1,MT2>::Type Type;
534 };
535 
536 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
537 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
538 {
539  typedef LowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
540 };
541 
542 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
543 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
544 {
545  typedef LowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
546 };
547 
548 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
549 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
550 {
551  typedef UniLowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
552 };
553 
554 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
555 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
556 {
557  typedef UniLowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
558 };
559 
560 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
561 struct AddTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
562 {
563  typedef StrictlyLowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
564 };
566 //*************************************************************************************************
567 
568 
569 
570 
571 //=================================================================================================
572 //
573 // SUBTRAIT SPECIALIZATIONS
574 //
575 //=================================================================================================
576 
577 //*************************************************************************************************
579 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
580 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
581 {
582  typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
583 };
584 
585 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
586 struct SubTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
587 {
588  typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
589 };
590 
591 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
592 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
593 {
594  typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
595 };
596 
597 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
598 struct SubTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
599 {
600  typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
601 };
602 
603 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
604 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
605 {
606  typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
607 };
608 
609 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
610 struct SubTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
611 {
612  typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
613 };
614 
615 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
616 struct SubTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
617 {
618  typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
619 };
620 
621 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
622 struct SubTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
623 {
624  typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
625 };
626 
627 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
628 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
629 {
630  typedef typename SubTrait<MT1,MT2>::Type Type;
631 };
632 
633 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
634 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
635 {
636  typedef typename SubTrait<MT1,MT2>::Type Type;
637 };
638 
639 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
640 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
641 {
642  typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
643 };
644 
645 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
646 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
647 {
648  typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
649 };
650 
651 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
652 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
653 {
654  typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
655 };
656 
657 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
658 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
659 {
660  typedef UniLowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
661 };
662 
663 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
664 struct SubTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
665 {
666  typedef StrictlyLowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
667 };
669 //*************************************************************************************************
670 
671 
672 
673 
674 //=================================================================================================
675 //
676 // MULTTRAIT SPECIALIZATIONS
677 //
678 //=================================================================================================
679 
680 //*************************************************************************************************
682 template< typename MT, bool SO, bool DF, typename T >
683 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, T >
684 {
685  typedef StrictlyLowerMatrix< typename MultTrait<MT,T>::Type > Type;
687 };
688 
689 template< typename T, typename MT, bool SO, bool DF >
690 struct MultTrait< T, StrictlyLowerMatrix<MT,SO,DF> >
691 {
692  typedef StrictlyLowerMatrix< typename MultTrait<T,MT>::Type > Type;
694 };
695 
696 template< typename MT, bool SO, bool DF, typename T, size_t N >
697 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
698 {
699  typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
700 };
701 
702 template< typename T, size_t N, typename MT, bool SO, bool DF >
703 struct MultTrait< StaticVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
704 {
705  typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
706 };
707 
708 template< typename MT, bool SO, bool DF, typename T, size_t N >
709 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
710 {
711  typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
712 };
713 
714 template< typename T, size_t N, typename MT, bool SO, bool DF >
715 struct MultTrait< HybridVector<T,N,true>, StrictlyLowerMatrix<MT,SO,DF> >
716 {
717  typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
718 };
719 
720 template< typename MT, bool SO, bool DF, typename T >
721 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
722 {
723  typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
724 };
725 
726 template< typename T, typename MT, bool SO, bool DF >
727 struct MultTrait< DynamicVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
728 {
729  typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
730 };
731 
732 template< typename MT, bool SO, bool DF, typename T >
733 struct MultTrait< StrictlyLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
734 {
735  typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
736 };
737 
738 template< typename T, typename MT, bool SO, bool DF >
739 struct MultTrait< CompressedVector<T,true>, StrictlyLowerMatrix<MT,SO,DF> >
740 {
741  typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
742 };
743 
744 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
745 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
746 {
747  typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
748 };
749 
750 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
751 struct MultTrait< StaticMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
752 {
753  typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
754 };
755 
756 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
757 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
758 {
759  typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
760 };
761 
762 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
763 struct MultTrait< HybridMatrix<T,M,N,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
764 {
765  typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
766 };
767 
768 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
769 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
770 {
771  typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
772 };
773 
774 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
775 struct MultTrait< DynamicMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
776 {
777  typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
778 };
779 
780 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
781 struct MultTrait< StrictlyLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
782 {
783  typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
784 };
785 
786 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
787 struct MultTrait< CompressedMatrix<T,SO1>, StrictlyLowerMatrix<MT,SO2,DF> >
788 {
789  typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
790 };
791 
792 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
793 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
794 {
795  typedef typename MultTrait<MT1,MT2>::Type Type;
796 };
797 
798 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
799 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, StrictlyLowerMatrix<MT2,SO2,DF2> >
800 {
801  typedef typename MultTrait<MT1,MT2>::Type Type;
802 };
803 
804 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
805 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
806 {
807  typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
808 };
809 
810 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
811 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
812 {
813  typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
814 };
815 
816 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
817 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
818 {
819  typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
820 };
821 
822 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
823 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
824 {
825  typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
826 };
827 
828 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
829 struct MultTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
830 {
831  typedef StrictlyLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
832 };
834 //*************************************************************************************************
835 
836 
837 
838 
839 //=================================================================================================
840 //
841 // DIVTRAIT SPECIALIZATIONS
842 //
843 //=================================================================================================
844 
845 //*************************************************************************************************
847 template< typename MT, bool SO, bool DF, typename T >
848 struct DivTrait< StrictlyLowerMatrix<MT,SO,DF>, T >
849 {
850  typedef StrictlyLowerMatrix< typename DivTrait<MT,T>::Type > Type;
852 };
854 //*************************************************************************************************
855 
856 
857 
858 
859 //=================================================================================================
860 //
861 // MATHTRAIT SPECIALIZATIONS
862 //
863 //=================================================================================================
864 
865 //*************************************************************************************************
867 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
868 struct MathTrait< StrictlyLowerMatrix<MT1,SO1,DF1>, StrictlyLowerMatrix<MT2,SO2,DF2> >
869 {
870  typedef StrictlyLowerMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
871  typedef StrictlyLowerMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
872 };
874 //*************************************************************************************************
875 
876 
877 
878 
879 //=================================================================================================
880 //
881 // SUBMATRIXTRAIT SPECIALIZATIONS
882 //
883 //=================================================================================================
884 
885 //*************************************************************************************************
887 template< typename MT, bool SO, bool DF >
888 struct SubmatrixTrait< StrictlyLowerMatrix<MT,SO,DF> >
889 {
890  typedef typename SubmatrixTrait<MT>::Type Type;
891 };
893 //*************************************************************************************************
894 
895 
896 
897 
898 //=================================================================================================
899 //
900 // ROWTRAIT SPECIALIZATIONS
901 //
902 //=================================================================================================
903 
904 //*************************************************************************************************
906 template< typename MT, bool SO, bool DF >
907 struct RowTrait< StrictlyLowerMatrix<MT,SO,DF> >
908 {
909  typedef typename RowTrait<MT>::Type Type;
910 };
912 //*************************************************************************************************
913 
914 
915 
916 
917 //=================================================================================================
918 //
919 // COLUMNTRAIT SPECIALIZATIONS
920 //
921 //=================================================================================================
922 
923 //*************************************************************************************************
925 template< typename MT, bool SO, bool DF >
926 struct ColumnTrait< StrictlyLowerMatrix<MT,SO,DF> >
927 {
928  typedef typename ColumnTrait<MT>::Type Type;
929 };
931 //*************************************************************************************************
932 
933 } // namespace blaze
934 
935 #endif
Constraint on the data type.
Header file for the Rows type trait.
Header file for the subtraction trait.
Header file for the row trait.
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:821
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:861
Header file for the IsSquare type trait.
Header file for the multiplication trait.
Header file for the implementation of the base template of the LowerMatrix.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for all forward declarations of the math module.
Header file for the Columns type trait.
StrictlyLowerMatrix specialization for sparse matrices.
Header file for the RemoveAdaptor type trait.
Header file for the IsStrictlyLower type trait.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:841
Header file for the IsAdaptor type trait.
Header file for the DerestrictTrait class template.
Header file for the HasConstDataAccess type trait.
Compile time check for resizable data types.This type trait tests whether the given data type is a re...
Definition: IsResizable.h:75
Header file for the addition trait.
StrictlyLowerMatrix specialization for dense matrices.
Header file for the division trait.
Header file for the submatrix trait.
#define BLAZE_CONSTRAINT_MUST_BE_NUMERIC_TYPE(T)
Constraint on the data type.In case the given data type T is not a numeric (integral or floating poin...
Definition: Numeric.h:79
Matrix adapter for strictly lower triangular matrices.
Definition: Forward.h:49
Header file for the column trait.
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b)
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:200
Header file for the mathematical trait.
boost::false_type FalseType
Type/value traits base class.The FalseType class is used as base class for type traits and value trai...
Definition: FalseType.h:61
boost::true_type TrueType
Type traits base class.The TrueType class is used as base class for type traits and value traits that...
Definition: TrueType.h:61
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
Header file for the implementation of the base template of the StrictlyLowerMatrix.
bool isIdentity(const DenseMatrix< MT, SO > &dm)
Checks if the give dense matrix is an identity matrix.
Definition: DenseMatrix.h:1525
Header file for the implementation of the base template of the UniLowerMatrix.