35 #ifndef _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_H_
92 template<
typename MT,
bool SO,
bool DF,
bool NF >
93 inline void reset( SymmetricMatrix<MT,SO,DF,NF>& m );
95 template<
typename MT,
bool SO,
bool DF,
bool NF >
96 inline void reset( SymmetricMatrix<MT,SO,DF,NF>& m,
size_t i );
98 template<
typename MT,
bool SO,
bool DF,
bool NF >
99 inline void clear( SymmetricMatrix<MT,SO,DF,NF>& m );
101 template<
typename MT,
bool SO,
bool DF,
bool NF >
102 inline bool isDefault(
const SymmetricMatrix<MT,SO,DF,NF>& m );
104 template<
typename MT,
bool SO,
bool DF,
bool NF >
105 inline bool isIntact(
const SymmetricMatrix<MT,SO,DF,NF>& m );
107 template<
typename MT,
bool SO,
bool DF,
bool NF >
108 inline void swap( SymmetricMatrix<MT,SO,DF,NF>& a, SymmetricMatrix<MT,SO,DF,NF>& b ) ;
120 template<
typename MT
144 template<
typename MT
162 template<
typename MT
191 template<
typename MT
223 template<
typename MT
243 template<
typename MT
271 template<
typename MT
273 inline void invert2x2( SymmetricMatrix<MT,SO,true,true>& m )
282 const MT& A( m.matrix_ );
285 const ET
det( A(0,0)*A(1,1) - A(0,1)*A(1,0) );
291 const ET idet( ET(1) /
det );
292 const ET a11( A(0,0) * idet );
294 B(0,0) = A(1,1) * idet;
295 B(1,0) = -A(1,0) * idet;
322 template<
typename MT
324 inline void invert3x3( SymmetricMatrix<MT,SO,true,true>& m )
333 const StaticMatrix<ET,3UL,3UL,SO> A( m.matrix_ );
336 B(0,0) = A(1,1)*A(2,2) - A(1,2)*A(2,1);
337 B(1,0) = A(1,2)*A(2,0) - A(1,0)*A(2,2);
338 B(2,0) = A(1,0)*A(2,1) - A(1,1)*A(2,0);
340 const ET
det( A(0,0)*B(0,0) + A(0,1)*B(1,0) + A(0,2)*B(2,0) );
347 B(1,1) = A(0,0)*A(2,2) - A(0,2)*A(2,0);
348 B(2,1) = A(0,1)*A(2,0) - A(0,0)*A(2,1);
351 B(2,2) = A(0,0)*A(1,1) - A(0,1)*A(1,0);
378 template<
typename MT
380 inline void invert4x4( SymmetricMatrix<MT,SO,true,true>& m )
389 const StaticMatrix<ET,4UL,4UL,SO> A( m.matrix_ );
392 ET tmp1( A(2,2)*A(3,3) - A(2,3)*A(3,2) );
393 ET tmp2( A(2,1)*A(3,3) - A(2,3)*A(3,1) );
394 ET tmp3( A(2,1)*A(3,2) - A(2,2)*A(3,1) );
396 B(0,0) = A(1,1)*tmp1 - A(1,2)*tmp2 + A(1,3)*tmp3;
397 B(0,1) = A(0,2)*tmp2 - A(0,1)*tmp1 - A(0,3)*tmp3;
399 ET tmp4( A(2,0)*A(3,3) - A(2,3)*A(3,0) );
400 ET tmp5( A(2,0)*A(3,2) - A(2,2)*A(3,0) );
402 B(1,1) = A(0,0)*tmp1 - A(0,2)*tmp4 + A(0,3)*tmp5;
404 tmp1 = A(2,0)*A(3,1) - A(2,1)*A(3,0);
406 B(2,0) = A(1,0)*tmp2 - A(1,1)*tmp4 + A(1,3)*tmp1;
407 B(2,1) = A(0,1)*tmp4 - A(0,0)*tmp2 - A(0,3)*tmp1;
408 B(3,0) = A(1,1)*tmp5 - A(1,0)*tmp3 - A(1,2)*tmp1;
409 B(3,1) = A(0,0)*tmp3 - A(0,1)*tmp5 + A(0,2)*tmp1;
411 tmp1 = A(0,1)*A(1,3) - A(0,3)*A(1,1);
412 tmp2 = A(0,1)*A(1,2) - A(0,2)*A(1,1);
413 tmp3 = A(0,0)*A(1,3) - A(0,3)*A(1,0);
414 tmp4 = A(0,0)*A(1,2) - A(0,2)*A(1,0);
415 tmp5 = A(0,0)*A(1,1) - A(0,1)*A(1,0);
417 B(2,2) = A(3,0)*tmp1 - A(3,1)*tmp3 + A(3,3)*tmp5;
418 B(2,3) = A(2,1)*tmp3 - A(2,0)*tmp1 - A(2,3)*tmp5;
419 B(3,3) = A(2,0)*tmp2 - A(2,1)*tmp4 + A(2,2)*tmp5;
428 const ET
det( A(0,0)*B(0,0) + A(0,1)*B(1,0) + A(0,2)*B(2,0) + A(0,3)*B(3,0) );
459 template<
typename MT
461 inline void invert5x5( SymmetricMatrix<MT,SO,true,true>& m )
470 const StaticMatrix<ET,5UL,5UL,SO> A( m.matrix_ );
473 ET tmp1 ( A(3,3)*A(4,4) - A(3,4)*A(4,3) );
474 ET tmp2 ( A(3,2)*A(4,4) - A(3,4)*A(4,2) );
475 ET tmp3 ( A(3,2)*A(4,3) - A(3,3)*A(4,2) );
476 ET tmp4 ( A(3,1)*A(4,4) - A(3,4)*A(4,1) );
477 ET tmp5 ( A(3,1)*A(4,3) - A(3,3)*A(4,1) );
478 ET tmp6 ( A(3,1)*A(4,2) - A(3,2)*A(4,1) );
479 ET tmp7 ( A(3,0)*A(4,4) - A(3,4)*A(4,0) );
480 ET tmp8 ( A(3,0)*A(4,3) - A(3,3)*A(4,0) );
481 ET tmp9 ( A(3,0)*A(4,2) - A(3,2)*A(4,0) );
482 ET tmp10( A(3,0)*A(4,1) - A(3,1)*A(4,0) );
484 ET tmp11( A(2,2)*tmp1 - A(2,3)*tmp2 + A(2,4)*tmp3 );
485 ET tmp12( A(2,1)*tmp1 - A(2,3)*tmp4 + A(2,4)*tmp5 );
486 ET tmp13( A(2,1)*tmp2 - A(2,2)*tmp4 + A(2,4)*tmp6 );
487 ET tmp14( A(2,1)*tmp3 - A(2,2)*tmp5 + A(2,3)*tmp6 );
488 ET tmp15( A(2,0)*tmp1 - A(2,3)*tmp7 + A(2,4)*tmp8 );
489 ET tmp16( A(2,0)*tmp2 - A(2,2)*tmp7 + A(2,4)*tmp9 );
490 ET tmp17( A(2,0)*tmp3 - A(2,2)*tmp8 + A(2,3)*tmp9 );
492 B(0,0) = A(1,1)*tmp11 - A(1,2)*tmp12 + A(1,3)*tmp13 - A(1,4)*tmp14;
493 B(0,1) = - A(0,1)*tmp11 + A(0,2)*tmp12 - A(0,3)*tmp13 + A(0,4)*tmp14;
494 B(1,1) = A(0,0)*tmp11 - A(0,2)*tmp15 + A(0,3)*tmp16 - A(0,4)*tmp17;
496 ET tmp18( A(2,0)*tmp4 - A(2,1)*tmp7 + A(2,4)*tmp10 );
497 ET tmp19( A(2,0)*tmp5 - A(2,1)*tmp8 + A(2,3)*tmp10 );
498 ET tmp20( A(2,0)*tmp6 - A(2,1)*tmp9 + A(2,2)*tmp10 );
500 B(2,0) = A(1,0)*tmp12 - A(1,1)*tmp15 + A(1,3)*tmp18 - A(1,4)*tmp19;
501 B(2,1) = - A(0,0)*tmp12 + A(0,1)*tmp15 - A(0,3)*tmp18 + A(0,4)*tmp19;
502 B(3,0) = - A(1,0)*tmp13 + A(1,1)*tmp16 - A(1,2)*tmp18 + A(1,4)*tmp20;
503 B(3,1) = A(0,0)*tmp13 - A(0,1)*tmp16 + A(0,2)*tmp18 - A(0,4)*tmp20;
504 B(4,0) = A(1,0)*tmp14 - A(1,1)*tmp17 + A(1,2)*tmp19 - A(1,3)*tmp20;
505 B(4,1) = - A(0,0)*tmp14 + A(0,1)*tmp17 - A(0,2)*tmp19 + A(0,3)*tmp20;
507 tmp11 = A(1,1)*tmp1 - A(1,3)*tmp4 + A(1,4)*tmp5;
508 tmp12 = A(1,0)*tmp1 - A(1,3)*tmp7 + A(1,4)*tmp8;
509 tmp13 = A(1,0)*tmp4 - A(1,1)*tmp7 + A(1,4)*tmp10;
510 tmp14 = A(1,0)*tmp5 - A(1,1)*tmp8 + A(1,3)*tmp10;
512 B(2,2) = A(0,0)*tmp11 - A(0,1)*tmp12 + A(0,3)*tmp13 - A(0,4)*tmp14;
514 tmp1 = A(0,2)*A(1,3) - A(0,3)*A(1,2);
515 tmp2 = A(0,1)*A(1,3) - A(0,3)*A(1,1);
516 tmp3 = A(0,1)*A(1,2) - A(0,2)*A(1,1);
517 tmp4 = A(0,0)*A(1,3) - A(0,3)*A(1,0);
518 tmp5 = A(0,0)*A(1,2) - A(0,2)*A(1,0);
519 tmp6 = A(0,0)*A(1,1) - A(0,1)*A(1,0);
520 tmp7 = A(0,2)*A(1,4) - A(0,4)*A(1,2);
521 tmp8 = A(0,1)*A(1,4) - A(0,4)*A(1,1);
522 tmp9 = A(0,0)*A(1,4) - A(0,4)*A(1,0);
523 tmp10 = A(0,3)*A(1,4) - A(0,4)*A(1,3);
525 tmp11 = A(2,1)*tmp10 - A(2,3)*tmp8 + A(2,4)*tmp2;
526 tmp12 = A(2,1)*tmp7 - A(2,2)*tmp8 + A(2,4)*tmp3;
527 tmp13 = A(2,1)*tmp1 - A(2,2)*tmp2 + A(2,3)*tmp3;
528 tmp14 = A(2,0)*tmp10 - A(2,3)*tmp9 + A(2,4)*tmp4;
529 tmp15 = A(2,0)*tmp7 - A(2,2)*tmp9 + A(2,4)*tmp5;
530 tmp16 = A(2,0)*tmp1 - A(2,2)*tmp4 + A(2,3)*tmp5;
531 tmp17 = A(2,0)*tmp8 - A(2,1)*tmp9 + A(2,4)*tmp6;
532 tmp18 = A(2,0)*tmp2 - A(2,1)*tmp4 + A(2,3)*tmp6;
533 tmp19 = A(2,0)*tmp3 - A(2,1)*tmp5 + A(2,2)*tmp6;
535 B(2,3) = A(4,0)*tmp11 - A(4,1)*tmp14 + A(4,3)*tmp17 - A(4,4)*tmp18;
536 B(2,4) = - A(3,0)*tmp11 + A(3,1)*tmp14 - A(3,3)*tmp17 + A(3,4)*tmp18;
537 B(3,3) = - A(4,0)*tmp12 + A(4,1)*tmp15 - A(4,2)*tmp17 + A(4,4)*tmp19;
538 B(3,4) = A(3,0)*tmp12 - A(3,1)*tmp15 + A(3,2)*tmp17 - A(3,4)*tmp19;
539 B(4,4) = - A(3,0)*tmp13 + A(3,1)*tmp16 - A(3,2)*tmp18 + A(3,3)*tmp19;
552 const ET
det( A(0,0)*B(0,0) + A(0,1)*B(1,0) + A(0,2)*B(2,0) + A(0,3)*B(3,0) + A(0,4)*B(4,0) );
583 template<
typename MT
585 inline void invert6x6( SymmetricMatrix<MT,SO,true,true>& m )
594 const StaticMatrix<ET,6UL,6UL,SO> A( m.matrix_ );
597 ET tmp1 ( A(4,4)*A(5,5) - A(4,5)*A(5,4) );
598 ET tmp2 ( A(4,3)*A(5,5) - A(4,5)*A(5,3) );
599 ET tmp3 ( A(4,3)*A(5,4) - A(4,4)*A(5,3) );
600 ET tmp4 ( A(4,2)*A(5,5) - A(4,5)*A(5,2) );
601 ET tmp5 ( A(4,2)*A(5,4) - A(4,4)*A(5,2) );
602 ET tmp6 ( A(4,2)*A(5,3) - A(4,3)*A(5,2) );
603 ET tmp7 ( A(4,1)*A(5,5) - A(4,5)*A(5,1) );
604 ET tmp8 ( A(4,1)*A(5,4) - A(4,4)*A(5,1) );
605 ET tmp9 ( A(4,1)*A(5,3) - A(4,3)*A(5,1) );
606 ET tmp10( A(4,1)*A(5,2) - A(4,2)*A(5,1) );
607 ET tmp11( A(4,0)*A(5,5) - A(4,5)*A(5,0) );
608 ET tmp12( A(4,0)*A(5,4) - A(4,4)*A(5,0) );
609 ET tmp13( A(4,0)*A(5,3) - A(4,3)*A(5,0) );
610 ET tmp14( A(4,0)*A(5,2) - A(4,2)*A(5,0) );
611 ET tmp15( A(4,0)*A(5,1) - A(4,1)*A(5,0) );
613 ET tmp16( A(3,3)*tmp1 - A(3,4)*tmp2 + A(3,5)*tmp3 );
614 ET tmp17( A(3,2)*tmp1 - A(3,4)*tmp4 + A(3,5)*tmp5 );
615 ET tmp18( A(3,2)*tmp2 - A(3,3)*tmp4 + A(3,5)*tmp6 );
616 ET tmp19( A(3,2)*tmp3 - A(3,3)*tmp5 + A(3,4)*tmp6 );
617 ET tmp20( A(3,1)*tmp1 - A(3,4)*tmp7 + A(3,5)*tmp8 );
618 ET tmp21( A(3,1)*tmp2 - A(3,3)*tmp7 + A(3,5)*tmp9 );
619 ET tmp22( A(3,1)*tmp3 - A(3,3)*tmp8 + A(3,4)*tmp9 );
620 ET tmp23( A(3,1)*tmp4 - A(3,2)*tmp7 + A(3,5)*tmp10 );
621 ET tmp24( A(3,1)*tmp5 - A(3,2)*tmp8 + A(3,4)*tmp10 );
622 ET tmp25( A(3,1)*tmp6 - A(3,2)*tmp9 + A(3,3)*tmp10 );
623 ET tmp26( A(3,0)*tmp1 - A(3,4)*tmp11 + A(3,5)*tmp12 );
624 ET tmp27( A(3,0)*tmp2 - A(3,3)*tmp11 + A(3,5)*tmp13 );
625 ET tmp28( A(3,0)*tmp3 - A(3,3)*tmp12 + A(3,4)*tmp13 );
626 ET tmp29( A(3,0)*tmp4 - A(3,2)*tmp11 + A(3,5)*tmp14 );
627 ET tmp30( A(3,0)*tmp5 - A(3,2)*tmp12 + A(3,4)*tmp14 );
628 ET tmp31( A(3,0)*tmp6 - A(3,2)*tmp13 + A(3,3)*tmp14 );
629 ET tmp32( A(3,0)*tmp7 - A(3,1)*tmp11 + A(3,5)*tmp15 );
630 ET tmp33( A(3,0)*tmp8 - A(3,1)*tmp12 + A(3,4)*tmp15 );
631 ET tmp34( A(3,0)*tmp9 - A(3,1)*tmp13 + A(3,3)*tmp15 );
632 ET tmp35( A(3,0)*tmp10 - A(3,1)*tmp14 + A(3,2)*tmp15 );
634 ET tmp36( A(2,2)*tmp16 - A(2,3)*tmp17 + A(2,4)*tmp18 - A(2,5)*tmp19 );
635 ET tmp37( A(2,1)*tmp16 - A(2,3)*tmp20 + A(2,4)*tmp21 - A(2,5)*tmp22 );
636 ET tmp38( A(2,1)*tmp17 - A(2,2)*tmp20 + A(2,4)*tmp23 - A(2,5)*tmp24 );
637 ET tmp39( A(2,1)*tmp18 - A(2,2)*tmp21 + A(2,3)*tmp23 - A(2,5)*tmp25 );
638 ET tmp40( A(2,1)*tmp19 - A(2,2)*tmp22 + A(2,3)*tmp24 - A(2,4)*tmp25 );
639 ET tmp41( A(2,0)*tmp16 - A(2,3)*tmp26 + A(2,4)*tmp27 - A(2,5)*tmp28 );
640 ET tmp42( A(2,0)*tmp17 - A(2,2)*tmp26 + A(2,4)*tmp29 - A(2,5)*tmp30 );
641 ET tmp43( A(2,0)*tmp18 - A(2,2)*tmp27 + A(2,3)*tmp29 - A(2,5)*tmp31 );
642 ET tmp44( A(2,0)*tmp19 - A(2,2)*tmp28 + A(2,3)*tmp30 - A(2,4)*tmp31 );
644 B(0,0) = A(1,1)*tmp36 - A(1,2)*tmp37 + A(1,3)*tmp38 - A(1,4)*tmp39 + A(1,5)*tmp40;
645 B(0,1) = - A(0,1)*tmp36 + A(0,2)*tmp37 - A(0,3)*tmp38 + A(0,4)*tmp39 - A(0,5)*tmp40;
646 B(1,1) = A(0,0)*tmp36 - A(0,2)*tmp41 + A(0,3)*tmp42 - A(0,4)*tmp43 + A(0,5)*tmp44;
648 ET tmp45( A(2,0)*tmp20 - A(2,1)*tmp26 + A(2,4)*tmp32 - A(2,5)*tmp33 );
649 ET tmp46( A(2,0)*tmp21 - A(2,1)*tmp27 + A(2,3)*tmp32 - A(2,5)*tmp34 );
650 ET tmp47( A(2,0)*tmp22 - A(2,1)*tmp28 + A(2,3)*tmp33 - A(2,4)*tmp34 );
651 ET tmp48( A(2,0)*tmp23 - A(2,1)*tmp29 + A(2,2)*tmp32 - A(2,5)*tmp35 );
652 ET tmp49( A(2,0)*tmp24 - A(2,1)*tmp30 + A(2,2)*tmp33 - A(2,4)*tmp35 );
654 B(2,0) = A(1,0)*tmp37 - A(1,1)*tmp41 + A(1,3)*tmp45 - A(1,4)*tmp46 + A(1,5)*tmp47;
655 B(2,1) = - A(0,0)*tmp37 + A(0,1)*tmp41 - A(0,3)*tmp45 + A(0,4)*tmp46 - A(0,5)*tmp47;
656 B(3,0) = - A(1,0)*tmp38 + A(1,1)*tmp42 - A(1,2)*tmp45 + A(1,4)*tmp48 - A(1,5)*tmp49;
657 B(3,1) = A(0,0)*tmp38 - A(0,1)*tmp42 + A(0,2)*tmp45 - A(0,4)*tmp48 + A(0,5)*tmp49;
659 ET tmp50( A(2,0)*tmp25 - A(2,1)*tmp31 + A(2,2)*tmp34 - A(2,3)*tmp35 );
661 B(4,0) = A(1,0)*tmp39 - A(1,1)*tmp43 + A(1,2)*tmp46 - A(1,3)*tmp48 + A(1,5)*tmp50;
662 B(4,1) = - A(0,0)*tmp39 + A(0,1)*tmp43 - A(0,2)*tmp46 + A(0,3)*tmp48 - A(0,5)*tmp50;
663 B(5,0) = - A(1,0)*tmp40 + A(1,1)*tmp44 - A(1,2)*tmp47 + A(1,3)*tmp49 - A(1,4)*tmp50;
664 B(5,1) = A(0,0)*tmp40 - A(0,1)*tmp44 + A(0,2)*tmp47 - A(0,3)*tmp49 + A(0,4)*tmp50;
666 tmp36 = A(1,1)*tmp16 - A(1,3)*tmp20 + A(1,4)*tmp21 - A(1,5)*tmp22;
667 tmp37 = A(1,1)*tmp17 - A(1,2)*tmp20 + A(1,4)*tmp23 - A(1,5)*tmp24;
668 tmp38 = A(1,0)*tmp16 - A(1,3)*tmp26 + A(1,4)*tmp27 - A(1,5)*tmp28;
669 tmp39 = A(1,0)*tmp17 - A(1,2)*tmp26 + A(1,4)*tmp29 - A(1,5)*tmp30;
670 tmp40 = A(1,0)*tmp20 - A(1,1)*tmp26 + A(1,4)*tmp32 - A(1,5)*tmp33;
671 tmp41 = A(1,0)*tmp21 - A(1,1)*tmp27 + A(1,3)*tmp32 - A(1,5)*tmp34;
672 tmp42 = A(1,0)*tmp22 - A(1,1)*tmp28 + A(1,3)*tmp33 - A(1,4)*tmp34;
673 tmp43 = A(1,0)*tmp23 - A(1,1)*tmp29 + A(1,2)*tmp32 - A(1,5)*tmp35;
674 tmp44 = A(1,0)*tmp24 - A(1,1)*tmp30 + A(1,2)*tmp33 - A(1,4)*tmp35;
676 B(2,2) = A(0,0)*tmp36 - A(0,1)*tmp38 + A(0,3)*tmp40 - A(0,4)*tmp41 + A(0,5)*tmp42;
677 B(3,2) = - A(0,0)*tmp37 + A(0,1)*tmp39 - A(0,2)*tmp40 + A(0,4)*tmp43 - A(0,5)*tmp44;
679 tmp1 = A(0,3)*A(1,4) - A(0,4)*A(1,3);
680 tmp2 = A(0,2)*A(1,4) - A(0,4)*A(1,2);
681 tmp3 = A(0,2)*A(1,3) - A(0,3)*A(1,2);
682 tmp4 = A(0,1)*A(1,4) - A(0,4)*A(1,1);
683 tmp5 = A(0,1)*A(1,3) - A(0,3)*A(1,1);
684 tmp6 = A(0,1)*A(1,2) - A(0,2)*A(1,1);
685 tmp7 = A(0,0)*A(1,4) - A(0,4)*A(1,0);
686 tmp8 = A(0,0)*A(1,3) - A(0,3)*A(1,0);
687 tmp9 = A(0,0)*A(1,2) - A(0,2)*A(1,0);
688 tmp10 = A(0,0)*A(1,1) - A(0,1)*A(1,0);
689 tmp11 = A(0,3)*A(1,5) - A(0,5)*A(1,3);
690 tmp12 = A(0,2)*A(1,5) - A(0,5)*A(1,2);
691 tmp13 = A(0,1)*A(1,5) - A(0,5)*A(1,1);
692 tmp14 = A(0,0)*A(1,5) - A(0,5)*A(1,0);
693 tmp15 = A(0,4)*A(1,5) - A(0,5)*A(1,4);
695 tmp16 = A(2,3)*tmp15 - A(2,4)*tmp11 + A(2,5)*tmp1;
696 tmp17 = A(2,2)*tmp15 - A(2,4)*tmp12 + A(2,5)*tmp2;
697 tmp18 = A(2,2)*tmp11 - A(2,3)*tmp12 + A(2,5)*tmp3;
698 tmp19 = A(2,2)*tmp1 - A(2,3)*tmp2 + A(2,4)*tmp3;
699 tmp20 = A(2,1)*tmp15 - A(2,4)*tmp13 + A(2,5)*tmp4;
700 tmp21 = A(2,1)*tmp11 - A(2,3)*tmp13 + A(2,5)*tmp5;
701 tmp22 = A(2,1)*tmp1 - A(2,3)*tmp4 + A(2,4)*tmp5;
702 tmp23 = A(2,1)*tmp12 - A(2,2)*tmp13 + A(2,5)*tmp6;
703 tmp24 = A(2,1)*tmp2 - A(2,2)*tmp4 + A(2,4)*tmp6;
704 tmp25 = A(2,1)*tmp3 - A(2,2)*tmp5 + A(2,3)*tmp6;
705 tmp26 = A(2,0)*tmp15 - A(2,4)*tmp14 + A(2,5)*tmp7;
706 tmp27 = A(2,0)*tmp11 - A(2,3)*tmp14 + A(2,5)*tmp8;
707 tmp28 = A(2,0)*tmp1 - A(2,3)*tmp7 + A(2,4)*tmp8;
708 tmp29 = A(2,0)*tmp12 - A(2,2)*tmp14 + A(2,5)*tmp9;
709 tmp30 = A(2,0)*tmp2 - A(2,2)*tmp7 + A(2,4)*tmp9;
710 tmp31 = A(2,0)*tmp3 - A(2,2)*tmp8 + A(2,3)*tmp9;
711 tmp32 = A(2,0)*tmp13 - A(2,1)*tmp14 + A(2,5)*tmp10;
712 tmp33 = A(2,0)*tmp4 - A(2,1)*tmp7 + A(2,4)*tmp10;
713 tmp34 = A(2,0)*tmp5 - A(2,1)*tmp8 + A(2,3)*tmp10;
714 tmp35 = A(2,0)*tmp6 - A(2,1)*tmp9 + A(2,2)*tmp10;
716 tmp36 = A(3,1)*tmp16 - A(3,3)*tmp20 + A(3,4)*tmp21 - A(3,5)*tmp22;
717 tmp37 = A(3,1)*tmp17 - A(3,2)*tmp20 + A(3,4)*tmp23 - A(3,5)*tmp24;
718 tmp38 = A(3,0)*tmp16 - A(3,3)*tmp26 + A(3,4)*tmp27 - A(3,5)*tmp28;
719 tmp39 = A(3,0)*tmp17 - A(3,2)*tmp26 + A(3,4)*tmp29 - A(3,5)*tmp30;
720 tmp40 = A(3,0)*tmp20 - A(3,1)*tmp26 + A(3,4)*tmp32 - A(3,5)*tmp33;
721 tmp41 = A(3,0)*tmp21 - A(3,1)*tmp27 + A(3,3)*tmp32 - A(3,5)*tmp34;
722 tmp42 = A(3,0)*tmp22 - A(3,1)*tmp28 + A(3,3)*tmp33 - A(3,4)*tmp34;
723 tmp43 = A(3,0)*tmp23 - A(3,1)*tmp29 + A(3,2)*tmp32 - A(3,5)*tmp35;
724 tmp44 = A(3,0)*tmp24 - A(3,1)*tmp30 + A(3,2)*tmp33 - A(3,4)*tmp35;
726 B(2,4) = - A(5,0)*tmp36 + A(5,1)*tmp38 - A(5,3)*tmp40 + A(5,4)*tmp41 - A(5,5)*tmp42;
727 B(2,5) = A(4,0)*tmp36 - A(4,1)*tmp38 + A(4,3)*tmp40 - A(4,4)*tmp41 + A(4,5)*tmp42;
728 B(3,4) = A(5,0)*tmp37 - A(5,1)*tmp39 + A(5,2)*tmp40 - A(5,4)*tmp43 + A(5,5)*tmp44;
729 B(3,5) = - A(4,0)*tmp37 + A(4,1)*tmp39 - A(4,2)*tmp40 + A(4,4)*tmp43 - A(4,5)*tmp44;
731 tmp36 = A(3,1)*tmp18 - A(3,2)*tmp21 + A(3,3)*tmp23 - A(3,5)*tmp25;
732 tmp37 = A(3,1)*tmp19 - A(3,2)*tmp22 + A(3,3)*tmp24 - A(3,4)*tmp25;
733 tmp38 = A(3,0)*tmp18 - A(3,2)*tmp27 + A(3,3)*tmp29 - A(3,5)*tmp31;
734 tmp39 = A(3,0)*tmp19 - A(3,2)*tmp28 + A(3,3)*tmp30 - A(3,4)*tmp31;
735 tmp40 = A(3,0)*tmp25 - A(3,1)*tmp31 + A(3,2)*tmp34 - A(3,3)*tmp35;
737 B(4,4) = - A(5,0)*tmp36 + A(5,1)*tmp38 - A(5,2)*tmp41 + A(5,3)*tmp43 - A(5,5)*tmp40;
738 B(4,5) = A(4,0)*tmp36 - A(4,1)*tmp38 + A(4,2)*tmp41 - A(4,3)*tmp43 + A(4,5)*tmp40;
739 B(5,5) = - A(4,0)*tmp37 + A(4,1)*tmp39 - A(4,2)*tmp42 + A(4,3)*tmp44 - A(4,4)*tmp40;
741 tmp36 = A(4,1)*tmp17 - A(4,2)*tmp20 + A(4,4)*tmp23 - A(4,5)*tmp24;
742 tmp37 = A(4,0)*tmp17 - A(4,2)*tmp26 + A(4,4)*tmp29 - A(4,5)*tmp30;
743 tmp38 = A(4,0)*tmp20 - A(4,1)*tmp26 + A(4,4)*tmp32 - A(4,5)*tmp33;
744 tmp39 = A(4,0)*tmp23 - A(4,1)*tmp29 + A(4,2)*tmp32 - A(4,5)*tmp35;
745 tmp40 = A(4,0)*tmp24 - A(4,1)*tmp30 + A(4,2)*tmp33 - A(4,4)*tmp35;
747 B(3,3) = - A(5,0)*tmp36 + A(5,1)*tmp37 - A(5,2)*tmp38 + A(5,4)*tmp39 - A(5,5)*tmp40;
765 const ET
det( A(0,0)*B(0,0) + A(0,1)*B(1,0) + A(0,2)*B(2,0) +
766 A(0,3)*B(3,0) + A(0,4)*B(4,0) + A(0,5)*B(5,0) );
803 template<
typename MT
805 inline void invertByDefault( SymmetricMatrix<MT,SO,true,true>& m )
836 template<
typename MT
838 inline void invertByLU( SymmetricMatrix<MT,SO,true,true>& m )
844 move( m.matrix_, tmp );
875 template<
typename MT
877 inline void invertByLDLT( SymmetricMatrix<MT,SO,true,true>& m )
883 move( m.matrix_, tmp );
914 template<
typename MT
916 inline void invertByLDLH( SymmetricMatrix<MT,SO,true,true>& m )
922 move( m.matrix_, tmp );
953 template<
typename MT
955 inline void invertByLLH( SymmetricMatrix<MT,SO,true,true>& m )
961 move( m.matrix_, tmp );
985 template<
typename MT1
991 inline bool tryAssign(
const SymmetricMatrix<MT1,SO1,DF,NF>& lhs,
992 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1003 const size_t M( (~rhs).
rows() );
1004 const size_t N( (~rhs).
columns() );
1006 if( ( row + M <= column ) || ( column + N <= row ) )
1009 const bool lower( row > column );
1010 const size_t size (
min( row + M, column + N ) - ( lower ? row : column ) );
1015 const size_t subrow( lower ? 0UL : column - row );
1016 const size_t subcol( lower ? row - column : 0UL );
1040 template<
typename MT1
1046 inline bool tryAddAssign(
const SymmetricMatrix<MT1,SO1,DF,NF>& lhs,
1047 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1049 return tryAssign( lhs, ~rhs, row, column );
1072 template<
typename MT1
1078 inline bool trySubAssign(
const SymmetricMatrix<MT1,SO1,DF,NF>& lhs,
1079 const Matrix<MT2,SO2>& rhs,
size_t row,
size_t column )
1081 return tryAssign( lhs, ~rhs, row, column );
1097 template<
typename MT,
bool SO,
bool DF,
bool NF >
1098 struct Rows< SymmetricMatrix<MT,SO,DF,NF> > :
public Rows<MT>
1114 template<
typename MT,
bool SO,
bool DF,
bool NF >
1115 struct Columns< SymmetricMatrix<MT,SO,DF,NF> > :
public Columns<MT>
1131 template<
typename MT,
bool SO,
bool DF,
bool NF >
1132 struct IsSquare< SymmetricMatrix<MT,SO,DF,NF> > :
public IsTrue<true>
1148 template<
typename MT,
bool SO,
bool DF,
bool NF >
1149 struct IsSymmetric< SymmetricMatrix<MT,SO,DF,NF> > :
public IsTrue<true>
1165 template<
typename MT,
bool SO,
bool DF,
bool NF >
1166 struct IsHermitian< SymmetricMatrix<MT,SO,DF,NF> >
1167 :
public IsTrue< IsBuiltin<typename MT::ElementType>::value >
1183 template<
typename MT,
bool SO,
bool DF,
bool NF >
1184 struct IsAdaptor< SymmetricMatrix<MT,SO,DF,NF> > :
public IsTrue<true>
1200 template<
typename MT,
bool SO,
bool DF,
bool NF >
1201 struct IsRestricted< SymmetricMatrix<MT,SO,DF,NF> > :
public IsTrue<true>
1217 template<
typename MT,
bool SO,
bool NF >
1218 struct HasConstDataAccess< SymmetricMatrix<MT,SO,true,NF> > :
public IsTrue<true>
1234 template<
typename MT,
bool SO,
bool DF,
bool NF >
1235 struct IsAligned< SymmetricMatrix<MT,SO,DF,NF> > :
public IsTrue< IsAligned<MT>::value >
1251 template<
typename MT,
bool SO,
bool DF,
bool NF >
1252 struct IsPadded< SymmetricMatrix<MT,SO,DF,NF> > :
public IsTrue< IsPadded<MT>::value >
1268 template<
typename MT,
bool SO,
bool DF,
bool NF >
1269 struct IsResizable< SymmetricMatrix<MT,SO,DF,NF> > :
public IsTrue< IsResizable<MT>::value >
1285 template<
typename MT,
bool SO,
bool DF,
bool NF >
1286 struct RemoveAdaptor< SymmetricMatrix<MT,SO,DF,NF> >
1304 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
1305 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
1307 typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1310 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1311 struct AddTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1313 typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1316 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
1317 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
1319 typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1322 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1323 struct AddTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1325 typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1328 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
1329 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
1331 typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1334 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1335 struct AddTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1337 typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1340 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool AF,
bool PF,
bool SO2 >
1341 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, CustomMatrix<T,AF,PF,SO2> >
1343 typedef typename AddTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1346 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1347 struct AddTrait< CustomMatrix<T,AF,PF,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1349 typedef typename AddTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1352 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
1353 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
1355 typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1358 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1359 struct AddTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1361 typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1364 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
1365 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
1367 typedef SymmetricMatrix< typename AddTrait<MT1,MT2>::Type > Type;
1383 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
1384 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
1386 typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1389 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1390 struct SubTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1392 typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1395 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
1396 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
1398 typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1401 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1402 struct SubTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1404 typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1407 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
1408 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
1410 typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1413 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1414 struct SubTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1416 typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1419 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool AF,
bool PF,
bool SO2 >
1420 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, CustomMatrix<T,AF,PF,SO2> >
1422 typedef typename SubTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1425 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1426 struct SubTrait< CustomMatrix<T,AF,PF,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1428 typedef typename SubTrait< CustomMatrix<T,AF,PF,SO1>, MT >::Type Type;
1431 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
1432 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
1434 typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1437 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1438 struct SubTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1440 typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1443 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
1444 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
1446 typedef SymmetricMatrix< typename SubTrait<MT1,MT2>::Type > Type;
1462 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
1463 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, T, typename EnableIf< IsNumeric<T> >::Type >
1465 typedef SymmetricMatrix< typename MultTrait<MT,T>::Type > Type;
1468 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
1469 struct MultTrait< T, SymmetricMatrix<MT,SO,DF,NF>, typename EnableIf< IsNumeric<T> >::Type >
1471 typedef SymmetricMatrix< typename MultTrait<T,MT>::Type > Type;
1474 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T,
size_t N >
1475 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, StaticVector<T,N,false> >
1477 typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
1480 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF,
bool NF >
1481 struct MultTrait< StaticVector<T,N,true>, SymmetricMatrix<MT,SO,DF,NF> >
1483 typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
1486 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T,
size_t N >
1487 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, HybridVector<T,N,false> >
1489 typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
1492 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF,
bool NF >
1493 struct MultTrait< HybridVector<T,N,true>, SymmetricMatrix<MT,SO,DF,NF> >
1495 typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
1498 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
1499 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, DynamicVector<T,false> >
1501 typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
1504 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
1505 struct MultTrait< DynamicVector<T,true>, SymmetricMatrix<MT,SO,DF,NF> >
1507 typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
1510 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T,
bool AF,
bool PF >
1511 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, CustomVector<T,AF,PF,false> >
1513 typedef typename MultTrait< MT, CustomVector<T,AF,PF,false> >::Type Type;
1516 template<
typename T,
bool AF,
bool PF,
typename MT,
bool SO,
bool DF,
bool NF >
1517 struct MultTrait< CustomVector<T,AF,PF,true>, SymmetricMatrix<MT,SO,DF,NF> >
1519 typedef typename MultTrait< CustomVector<T,AF,PF,true>, MT >::Type Type;
1522 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
1523 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, CompressedVector<T,false> >
1525 typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
1528 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
1529 struct MultTrait< CompressedVector<T,true>, SymmetricMatrix<MT,SO,DF,NF> >
1531 typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
1534 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
1535 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
1537 typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
1540 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1541 struct MultTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1543 typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
1546 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
1547 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
1549 typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
1552 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1553 struct MultTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1555 typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
1558 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
1559 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
1561 typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
1564 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1565 struct MultTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1567 typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1570 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool AF,
bool PF,
bool SO2 >
1571 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, CustomMatrix<T,AF,PF,SO2> >
1573 typedef typename MultTrait< MT, CustomMatrix<T,AF,PF,SO2> >::Type Type;
1576 template<
typename T,
bool AF,
bool PF,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1577 struct MultTrait< CustomMatrix<T,AF,PF,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1579 typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
1582 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
1583 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
1585 typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
1588 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
1589 struct MultTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
1591 typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
1594 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
1595 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
1597 typedef typename MultTrait<MT1,MT2>::Type Type;
1613 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
1614 struct DivTrait< SymmetricMatrix<MT,SO,DF,NF>, T, typename EnableIf< IsNumeric<T> >::Type >
1616 typedef SymmetricMatrix< typename DivTrait<MT,T>::Type > Type;
1632 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
1633 struct MathTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
1635 typedef SymmetricMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
1636 typedef SymmetricMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
1652 template<
typename MT,
bool SO,
bool DF,
bool NF >
1653 struct SubmatrixTrait< SymmetricMatrix<MT,SO,DF,NF> >
1655 typedef typename SubmatrixTrait<MT>::Type Type;
1671 template<
typename MT,
bool SO,
bool DF,
bool NF >
1672 struct RowTrait< SymmetricMatrix<MT,SO,DF,NF> >
1674 typedef typename RowTrait<MT>::Type Type;
1690 template<
typename MT,
bool SO,
bool DF,
bool NF >
1691 struct ColumnTrait< SymmetricMatrix<MT,SO,DF,NF> >
1693 typedef typename ColumnTrait<MT>::Type Type;
#define BLAZE_THROW_INVALID_ARGUMENT(MESSAGE)
Macro for the emission of a std::invalid_argument exceptionThis macro encapsulates the default way of...
Definition: Exception.h:187
Header file for mathematical functions.
Header file for the Rows type trait.
Header file for the UNUSED_PARAMETER function template.
Header file for the subtraction trait.
BLAZE_ALWAYS_INLINE size_t size(const Vector< VT, TF > &vector)
Returns the current size/dimension of the vector.
Definition: Vector.h:252
Header file for the row trait.
bool isSymmetric(const DenseMatrix< MT, SO > &dm)
Checks if the given dense matrix is symmetric.
Definition: DenseMatrix.h:697
void reset(const DiagonalProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: DiagonalProxy.h:507
MT::ElementType det(const DenseMatrix< MT, SO > &dm)
Computation of the determinant of the given dense square matrix.
Definition: DMatDetExpr.h:382
BLAZE_ALWAYS_INLINE size_t rows(const Matrix< MT, SO > &matrix)
Returns the current number of rows of the matrix.
Definition: Matrix.h:308
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
void UNUSED_PARAMETER(const T1 &)
Suppression of unused parameter warnings.
Definition: Unused.h:81
Matrix adapter for symmetric matrices.
Definition: Forward.h:52
void move(CustomMatrix< Type, AF, PF, SO > &dst, CustomMatrix< Type, AF, PF, SO > &src)
Moving the contents of one custom matrix to another.
Definition: CustomMatrix.h:6085
Header file for the implementation of the base template of the SymmetricMatrix.
bool isDefault(const DiagonalProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: DiagonalProxy.h:547
Header file for the IsSquare type trait.
SymmetricMatrix specialization for dense matrices with non-numeric element type.
Header file for the multiplication trait.
Header file for the IsSymmetric type trait.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
Header file for all forward declarations of the math module.
SymmetricMatrix specialization for sparse matrices with numeric element type.
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 Columns type trait.
Header file for the implementation of a fixed-size matrix.
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Constraint on the data type.
Header file for the RemoveAdaptor type trait.
Constraint on the data type.
Header file for the EnableIf class template.
void clear(const DiagonalProxy< MT > &proxy)
Clearing the represented element.
Definition: DiagonalProxy.h:527
Header file for the IsPadded type trait.
Header file for the IsAdaptor type trait.
Header file for the IsNumeric type trait.
Header file for the HasConstDataAccess type trait.
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
SymmetricMatrix specialization for sparse matrices with non-numeric element type. ...
Header file for run time assertion macros.
Header file for the addition trait.
Header file for the division trait.
Header file for the submatrix trait.
Header file for the column trait.
#define BLAZE_CONSTRAINT_MUST_BE_BLAS_COMPATIBLE_TYPE(T)
Constraint on the data type.In case the given data type T is not a BLAS compatible data type (i...
Definition: BlasCompatible.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_REQUIRE_EVALUATION(T)
Constraint on the data type.In case the given data type T requires an intermediate evaluation within ...
Definition: RequiresEvaluation.h:118
void swap(DiagonalMatrix< MT, SO, DF > &a, DiagonalMatrix< MT, SO, DF > &b)
Swapping the contents of two matrices.
Definition: DiagonalMatrix.h:256
SymmetricMatrix specialization for dense matrices with numeric element type.
Header file for the mathematical 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 IsBuiltin type trait.
Header file for the IsTrue value trait.
BLAZE_ALWAYS_INLINE size_t columns(const Matrix< MT, SO > &matrix)
Returns the current number of columns of the matrix.
Definition: Matrix.h:324
bool isIntact(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the invariants of the given diagonal matrix are intact.
Definition: DiagonalMatrix.h:237
Header file for exception macros.
Header file for the IsHermitian type trait.
Header file for the IsResizable type trait.
Header file for the IsRestricted type trait.
#define BLAZE_INTERNAL_ASSERT(expr, msg)
Run time assertion macro for internal checks.In case of an invalid run time expression, the program execution is terminated. The BLAZE_INTERNAL_ASSERT macro can be disabled by setting the BLAZE_USER_ASSERTION flag to zero or by defining NDEBUG during the compilation.
Definition: Assert.h:101