UniLowerMatrix.h
Go to the documentation of this file.
1 //=================================================================================================
33 //=================================================================================================
34 
35 #ifndef _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_UNILOWERMATRIX_H_
37 
38 
39 //*************************************************************************************************
40 // Includes
41 //*************************************************************************************************
42 
47 #include <blaze/math/Forward.h>
67 
68 
69 namespace blaze {
70 
71 //=================================================================================================
72 //
73 // UNILOWERMATRIX OPERATORS
74 //
75 //=================================================================================================
76 
77 //*************************************************************************************************
80 template< typename MT, bool SO, bool DF >
81 inline void reset( UniLowerMatrix<MT,SO,DF>& m );
82 
83 template< typename MT, bool SO, bool DF >
84 inline void reset( UniLowerMatrix<MT,SO,DF>& m, size_t i );
85 
86 template< typename MT, bool SO, bool DF >
87 inline void clear( UniLowerMatrix<MT,SO,DF>& m );
88 
89 template< typename MT, bool SO, bool DF >
90 inline bool isDefault( const UniLowerMatrix<MT,SO,DF>& m );
91 
92 template< typename MT, bool SO, bool DF >
93 inline void swap( UniLowerMatrix<MT,SO,DF>& a, UniLowerMatrix<MT,SO,DF>& b ) /* throw() */;
95 //*************************************************************************************************
96 
97 
98 //*************************************************************************************************
105 template< typename MT // Type of the adapted matrix
106  , bool SO // Storage order of the adapted matrix
107  , bool DF > // Density flag
109 {
110  m.reset();
111 }
112 //*************************************************************************************************
113 
114 
115 //*************************************************************************************************
128 template< typename MT // Type of the adapted matrix
129  , bool SO // Storage order of the adapted matrix
130  , bool DF > // Density flag
131 inline void reset( UniLowerMatrix<MT,SO,DF>& m, size_t i )
132 {
133  m.reset( i );
134 }
135 //*************************************************************************************************
136 
137 
138 //*************************************************************************************************
145 template< typename MT // Type of the adapted matrix
146  , bool SO // Storage order of the adapted matrix
147  , bool DF > // Density flag
149 {
150  m.clear();
151 }
152 //*************************************************************************************************
153 
154 
155 //*************************************************************************************************
165 template< typename MT // Type of the adapted matrix
166  , bool SO // Storage order of the adapted matrix
167  , bool DF > // Density flag
168 inline bool isDefault_backend( const UniLowerMatrix<MT,SO,DF>& m, TrueType )
169 {
170  return ( m.rows() == 0UL );
171 }
173 //*************************************************************************************************
174 
175 
176 //*************************************************************************************************
186 template< typename MT // Type of the adapted matrix
187  , bool SO // Storage order of the adapted matrix
188  , bool DF > // Density flag
189 inline bool isDefault_backend( const UniLowerMatrix<MT,SO,DF>& m, FalseType )
190 {
191  return isIdentity( m );
192 }
194 //*************************************************************************************************
195 
196 
197 //*************************************************************************************************
217 template< typename MT // Type of the adapted matrix
218  , bool SO // Storage order of the adapted matrix
219  , bool DF > // Density flag
220 inline bool isDefault( const UniLowerMatrix<MT,SO,DF>& m )
221 {
222  return isDefault_backend( m, typename IsResizable<MT>::Type() );
223 }
224 //*************************************************************************************************
225 
226 
227 //*************************************************************************************************
236 template< typename MT // Type of the adapted matrix
237  , bool SO // Storage order of the adapted matrix
238  , bool DF > // Density flag
239 inline void swap( UniLowerMatrix<MT,SO,DF>& a, UniLowerMatrix<MT,SO,DF>& b ) /* throw() */
240 {
241  a.swap( b );
242 }
243 //*************************************************************************************************
244 
245 
246 //*************************************************************************************************
260 template< typename MT // Type of the adapted matrix
261  , bool SO // Storage order of the adapted matrix
262  , bool DF > // Density flag
263 inline MT& derestrict( UniLowerMatrix<MT,SO,DF>& m )
264 {
265  return m.matrix_;
266 }
268 //*************************************************************************************************
269 
270 
271 
272 
273 //=================================================================================================
274 //
275 // ROWS SPECIALIZATIONS
276 //
277 //=================================================================================================
278 
279 //*************************************************************************************************
281 template< typename MT, bool SO, bool DF >
282 struct Rows< UniLowerMatrix<MT,SO,DF> > : public Rows<MT>
283 {};
285 //*************************************************************************************************
286 
287 
288 
289 
290 //=================================================================================================
291 //
292 // COLUMNS SPECIALIZATIONS
293 //
294 //=================================================================================================
295 
296 //*************************************************************************************************
298 template< typename MT, bool SO, bool DF >
299 struct Columns< UniLowerMatrix<MT,SO,DF> > : public Columns<MT>
300 {};
302 //*************************************************************************************************
303 
304 
305 
306 
307 //=================================================================================================
308 //
309 // ISSQUARE SPECIALIZATIONS
310 //
311 //=================================================================================================
312 
313 //*************************************************************************************************
315 template< typename MT, bool SO, bool DF >
316 struct IsSquare< UniLowerMatrix<MT,SO,DF> > : public TrueType
317 {
318  enum { value = 1 };
319  typedef TrueType Type;
320 };
322 //*************************************************************************************************
323 
324 
325 
326 
327 //=================================================================================================
328 //
329 // ISUNILOWER SPECIALIZATIONS
330 //
331 //=================================================================================================
332 
333 //*************************************************************************************************
335 template< typename MT, bool SO, bool DF >
336 struct IsUniLower< UniLowerMatrix<MT,SO,DF> > : public TrueType
337 {
338  enum { value = 1 };
339  typedef TrueType Type;
340 };
342 //*************************************************************************************************
343 
344 
345 
346 
347 //=================================================================================================
348 //
349 // ISADAPTOR SPECIALIZATIONS
350 //
351 //=================================================================================================
352 
353 //*************************************************************************************************
355 template< typename MT, bool SO, bool DF >
356 struct IsAdaptor< UniLowerMatrix<MT,SO,DF> > : public TrueType
357 {
358  enum { value = 1 };
359  typedef TrueType Type;
360 };
362 //*************************************************************************************************
363 
364 
365 
366 
367 //=================================================================================================
368 //
369 // ISRESTRICTED SPECIALIZATIONS
370 //
371 //=================================================================================================
372 
373 //*************************************************************************************************
375 template< typename MT, bool SO, bool DF >
376 struct IsRestricted< UniLowerMatrix<MT,SO,DF> > : public TrueType
377 {
378  enum { value = 1 };
379  typedef TrueType Type;
380 };
382 //*************************************************************************************************
383 
384 
385 
386 
387 //=================================================================================================
388 //
389 // HASCONSTDATAACCESS SPECIALIZATIONS
390 //
391 //=================================================================================================
392 
393 //*************************************************************************************************
395 template< typename MT, bool SO >
396 struct HasConstDataAccess< UniLowerMatrix<MT,SO,true> > : public TrueType
397 {
398  enum { value = 1 };
399  typedef TrueType Type;
400 };
402 //*************************************************************************************************
403 
404 
405 
406 
407 //=================================================================================================
408 //
409 // ISRESIZABLE SPECIALIZATIONS
410 //
411 //=================================================================================================
412 
413 //*************************************************************************************************
415 template< typename MT, bool SO, bool DF >
416 struct IsResizable< UniLowerMatrix<MT,SO,DF> > : public IsResizable<MT>::Type
417 {
418  enum { value = IsResizable<MT>::value };
419  typedef typename IsResizable<MT>::Type Type;
420 };
422 //*************************************************************************************************
423 
424 
425 
426 
427 //=================================================================================================
428 //
429 // REMOVEADAPTOR SPECIALIZATIONS
430 //
431 //=================================================================================================
432 
433 //*************************************************************************************************
435 template< typename MT, bool SO, bool DF >
436 struct RemoveAdaptor< UniLowerMatrix<MT,SO,DF> >
437 {
438  typedef MT Type;
439 };
441 //*************************************************************************************************
442 
443 
444 
445 
446 //=================================================================================================
447 //
448 // DERESTRICTTRAIT SPECIALIZATIONS
449 //
450 //=================================================================================================
451 
452 //*************************************************************************************************
454 template< typename MT, bool SO, bool DF >
455 struct DerestrictTrait< UniLowerMatrix<MT,SO,DF> >
456 {
457  typedef MT& Type;
458 };
460 //*************************************************************************************************
461 
462 
463 
464 
465 //=================================================================================================
466 //
467 // ADDTRAIT SPECIALIZATIONS
468 //
469 //=================================================================================================
470 
471 //*************************************************************************************************
473 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
474 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
475 {
476  typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
477 };
478 
479 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
480 struct AddTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
481 {
482  typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
483 };
484 
485 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
486 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
487 {
488  typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
489 };
490 
491 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
492 struct AddTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
493 {
494  typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
495 };
496 
497 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
498 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
499 {
500  typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
501 };
502 
503 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
504 struct AddTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
505 {
506  typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
507 };
508 
509 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
510 struct AddTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
511 {
512  typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
513 };
514 
515 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
516 struct AddTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
517 {
518  typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
519 };
520 
521 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
522 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
523 {
524  typedef typename AddTrait<MT1,MT2>::Type Type;
525 };
526 
527 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
528 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
529 {
530  typedef typename AddTrait<MT1,MT2>::Type Type;
531 };
532 
533 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
534 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
535 {
536  typedef LowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
537 };
538 
539 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
540 struct AddTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
541 {
542  typedef LowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
543 };
544 
545 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
546 struct AddTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
547 {
548  typedef LowerMatrix< typename AddTrait<MT1,MT2>::Type > Type;
549 };
551 //*************************************************************************************************
552 
553 
554 
555 
556 //=================================================================================================
557 //
558 // SUBTRAIT SPECIALIZATIONS
559 //
560 //=================================================================================================
561 
562 //*************************************************************************************************
564 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
565 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
566 {
567  typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
568 };
569 
570 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
571 struct SubTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
572 {
573  typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
574 };
575 
576 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
577 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
578 {
579  typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
580 };
581 
582 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
583 struct SubTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
584 {
585  typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
586 };
587 
588 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
589 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
590 {
591  typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
592 };
593 
594 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
595 struct SubTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
596 {
597  typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
598 };
599 
600 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
601 struct SubTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
602 {
603  typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
604 };
605 
606 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
607 struct SubTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
608 {
609  typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
610 };
611 
612 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
613 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
614 {
615  typedef typename SubTrait<MT1,MT2>::Type Type;
616 };
617 
618 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
619 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
620 {
621  typedef typename SubTrait<MT1,MT2>::Type Type;
622 };
623 
624 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
625 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
626 {
627  typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
628 };
629 
630 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
631 struct SubTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
632 {
633  typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
634 };
635 
636 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
637 struct SubTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
638 {
639  typedef LowerMatrix< typename SubTrait<MT1,MT2>::Type > Type;
640 };
642 //*************************************************************************************************
643 
644 
645 
646 
647 //=================================================================================================
648 //
649 // MULTTRAIT SPECIALIZATIONS
650 //
651 //=================================================================================================
652 
653 //*************************************************************************************************
655 template< typename MT, bool SO, bool DF, typename T >
656 struct MultTrait< UniLowerMatrix<MT,SO,DF>, T >
657 {
658  typedef LowerMatrix< typename MultTrait<MT,T>::Type > Type;
660 };
661 
662 template< typename T, typename MT, bool SO, bool DF >
663 struct MultTrait< T, UniLowerMatrix<MT,SO,DF> >
664 {
665  typedef LowerMatrix< typename MultTrait<T,MT>::Type > Type;
667 };
668 
669 template< typename MT, bool SO, bool DF, typename T, size_t N >
670 struct MultTrait< UniLowerMatrix<MT,SO,DF>, StaticVector<T,N,false> >
671 {
672  typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
673 };
674 
675 template< typename T, size_t N, typename MT, bool SO, bool DF >
676 struct MultTrait< StaticVector<T,N,true>, UniLowerMatrix<MT,SO,DF> >
677 {
678  typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
679 };
680 
681 template< typename MT, bool SO, bool DF, typename T, size_t N >
682 struct MultTrait< UniLowerMatrix<MT,SO,DF>, HybridVector<T,N,false> >
683 {
684  typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
685 };
686 
687 template< typename T, size_t N, typename MT, bool SO, bool DF >
688 struct MultTrait< HybridVector<T,N,true>, UniLowerMatrix<MT,SO,DF> >
689 {
690  typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
691 };
692 
693 template< typename MT, bool SO, bool DF, typename T >
694 struct MultTrait< UniLowerMatrix<MT,SO,DF>, DynamicVector<T,false> >
695 {
696  typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
697 };
698 
699 template< typename T, typename MT, bool SO, bool DF >
700 struct MultTrait< DynamicVector<T,true>, UniLowerMatrix<MT,SO,DF> >
701 {
702  typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
703 };
704 
705 template< typename MT, bool SO, bool DF, typename T >
706 struct MultTrait< UniLowerMatrix<MT,SO,DF>, CompressedVector<T,false> >
707 {
708  typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
709 };
710 
711 template< typename T, typename MT, bool SO, bool DF >
712 struct MultTrait< CompressedVector<T,true>, UniLowerMatrix<MT,SO,DF> >
713 {
714  typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
715 };
716 
717 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
718 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, StaticMatrix<T,M,N,SO2> >
719 {
720  typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
721 };
722 
723 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
724 struct MultTrait< StaticMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
725 {
726  typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
727 };
728 
729 template< typename MT, bool SO1, bool DF, typename T, size_t M, size_t N, bool SO2 >
730 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, HybridMatrix<T,M,N,SO2> >
731 {
732  typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
733 };
734 
735 template< typename T, size_t M, size_t N, bool SO1, typename MT, bool SO2, bool DF >
736 struct MultTrait< HybridMatrix<T,M,N,SO1>, UniLowerMatrix<MT,SO2,DF> >
737 {
738  typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
739 };
740 
741 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
742 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, DynamicMatrix<T,SO2> >
743 {
744  typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
745 };
746 
747 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
748 struct MultTrait< DynamicMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
749 {
750  typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
751 };
752 
753 template< typename MT, bool SO1, bool DF, typename T, bool SO2 >
754 struct MultTrait< UniLowerMatrix<MT,SO1,DF>, CompressedMatrix<T,SO2> >
755 {
756  typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
757 };
758 
759 template< typename T, bool SO1, typename MT, bool SO2, bool DF >
760 struct MultTrait< CompressedMatrix<T,SO1>, UniLowerMatrix<MT,SO2,DF> >
761 {
762  typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
763 };
764 
765 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2, bool NF >
766 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, SymmetricMatrix<MT2,SO2,DF2,NF> >
767 {
768  typedef typename MultTrait<MT1,MT2>::Type Type;
769 };
770 
771 template< typename MT1, bool SO1, bool DF1, bool NF, typename MT2, bool SO2, bool DF2 >
772 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF>, UniLowerMatrix<MT2,SO2,DF2> >
773 {
774  typedef typename MultTrait<MT1,MT2>::Type Type;
775 };
776 
777 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
778 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, LowerMatrix<MT2,SO2,DF2> >
779 {
780  typedef LowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
781 };
782 
783 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
784 struct MultTrait< LowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
785 {
786  typedef LowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
787 };
788 
789 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
790 struct MultTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
791 {
792  typedef UniLowerMatrix< typename MultTrait<MT1,MT2>::Type > Type;
793 };
795 //*************************************************************************************************
796 
797 
798 
799 
800 //=================================================================================================
801 //
802 // DIVTRAIT SPECIALIZATIONS
803 //
804 //=================================================================================================
805 
806 //*************************************************************************************************
808 template< typename MT, bool SO, bool DF, typename T >
809 struct DivTrait< UniLowerMatrix<MT,SO,DF>, T >
810 {
811  typedef LowerMatrix< typename DivTrait<MT,T>::Type > Type;
813 };
815 //*************************************************************************************************
816 
817 
818 
819 
820 //=================================================================================================
821 //
822 // MATHTRAIT SPECIALIZATIONS
823 //
824 //=================================================================================================
825 
826 //*************************************************************************************************
828 template< typename MT1, bool SO1, bool DF1, typename MT2, bool SO2, bool DF2 >
829 struct MathTrait< UniLowerMatrix<MT1,SO1,DF1>, UniLowerMatrix<MT2,SO2,DF2> >
830 {
831  typedef UniLowerMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
832  typedef UniLowerMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
833 };
835 //*************************************************************************************************
836 
837 
838 
839 
840 //=================================================================================================
841 //
842 // SUBMATRIXTRAIT SPECIALIZATIONS
843 //
844 //=================================================================================================
845 
846 //*************************************************************************************************
848 template< typename MT, bool SO, bool DF >
849 struct SubmatrixTrait< UniLowerMatrix<MT,SO,DF> >
850 {
851  typedef typename SubmatrixTrait<MT>::Type Type;
852 };
854 //*************************************************************************************************
855 
856 
857 
858 
859 //=================================================================================================
860 //
861 // ROWTRAIT SPECIALIZATIONS
862 //
863 //=================================================================================================
864 
865 //*************************************************************************************************
867 template< typename MT, bool SO, bool DF >
868 struct RowTrait< UniLowerMatrix<MT,SO,DF> >
869 {
870  typedef typename RowTrait<MT>::Type Type;
871 };
873 //*************************************************************************************************
874 
875 
876 
877 
878 //=================================================================================================
879 //
880 // COLUMNTRAIT SPECIALIZATIONS
881 //
882 //=================================================================================================
883 
884 //*************************************************************************************************
886 template< typename MT, bool SO, bool DF >
887 struct ColumnTrait< UniLowerMatrix<MT,SO,DF> >
888 {
889  typedef typename ColumnTrait<MT>::Type Type;
890 };
892 //*************************************************************************************************
893 
894 } // namespace blaze
895 
896 #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
Header file for the IsUniLower type trait.
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.
UniLowerMatrix specialization for sparse matrices.
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.
Header file for the RemoveAdaptor 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.
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
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
UniLowerMatrix specialization for dense matrices.
Matrix adapter for lower unitriangular matrices.
Definition: Forward.h:52
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.
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.