35 #ifndef _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_H_
79 template<
typename MT,
bool SO,
bool DF,
bool NF >
80 inline void reset( SymmetricMatrix<MT,SO,DF,NF>& m );
82 template<
typename MT,
bool SO,
bool DF,
bool NF >
83 inline void reset( SymmetricMatrix<MT,SO,DF,NF>& m,
size_t i );
85 template<
typename MT,
bool SO,
bool DF,
bool NF >
86 inline void clear( SymmetricMatrix<MT,SO,DF,NF>& m );
88 template<
typename MT,
bool SO,
bool DF,
bool NF >
89 inline bool isDefault(
const SymmetricMatrix<MT,SO,DF,NF>& m );
91 template<
typename MT,
bool SO,
bool DF,
bool NF >
92 inline void swap( SymmetricMatrix<MT,SO,DF,NF>& a, SymmetricMatrix<MT,SO,DF,NF>& b ) ;
104 template<
typename MT
128 template<
typename MT
146 template<
typename MT
175 template<
typename MT
195 template<
typename MT
216 template<
typename MT,
bool SO,
bool DF,
bool NF >
217 struct Rows< SymmetricMatrix<MT,SO,DF,NF> > :
public Rows<MT>
233 template<
typename MT,
bool SO,
bool DF,
bool NF >
234 struct Columns< SymmetricMatrix<MT,SO,DF,NF> > :
public Columns<MT>
250 template<
typename MT,
bool SO,
bool DF,
bool NF >
251 struct IsSquare< SymmetricMatrix<MT,SO,DF,NF> > :
public TrueType
270 template<
typename MT,
bool SO,
bool DF,
bool NF >
271 struct IsSymmetric< SymmetricMatrix<MT,SO,DF,NF> > :
public TrueType
290 template<
typename MT,
bool SO,
bool NF >
291 struct HasConstDataAccess< SymmetricMatrix<MT,SO,true,NF> > :
public TrueType
310 template<
typename MT,
bool SO,
bool DF,
bool NF >
311 struct IsResizable< SymmetricMatrix<MT,SO,DF,NF> > :
public IsResizable<MT>::Type
313 enum { value = IsResizable<MT>::value };
314 typedef typename IsResizable<MT>::Type Type;
330 template<
typename MT,
bool SO,
bool DF,
bool NF >
331 struct IsAdaptor< SymmetricMatrix<MT,SO,DF,NF> > :
public TrueType
350 template<
typename MT,
bool SO,
bool DF,
bool NF >
351 struct RemoveAdaptor< SymmetricMatrix<MT,SO,DF,NF> >
369 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
370 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
372 typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
375 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
376 struct AddTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
378 typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
381 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
382 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
384 typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
387 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
388 struct AddTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
390 typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
393 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
394 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
396 typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
399 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
400 struct AddTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
402 typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
405 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
406 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
408 typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
411 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
412 struct AddTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
414 typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
417 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
418 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
420 typedef SymmetricMatrix< typename AddTrait<MT1,MT2>::Type > Type;
436 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
437 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
439 typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
442 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
443 struct SubTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
445 typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
448 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
449 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
451 typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
454 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
455 struct SubTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
457 typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
460 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
461 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
463 typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
466 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
467 struct SubTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
469 typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
472 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
473 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
475 typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
478 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
479 struct SubTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
481 typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
484 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
485 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
487 typedef SymmetricMatrix< typename SubTrait<MT1,MT2>::Type > Type;
503 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
504 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, T >
506 typedef SymmetricMatrix< typename MultTrait<MT,T>::Type > Type;
510 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
511 struct MultTrait< T, SymmetricMatrix<MT,SO,DF,NF> >
513 typedef SymmetricMatrix< typename MultTrait<T,MT>::Type > Type;
517 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T,
size_t N >
518 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, StaticVector<T,N,false> >
520 typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
523 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF,
bool NF >
524 struct MultTrait< StaticVector<T,N,true>, SymmetricMatrix<MT,SO,DF,NF> >
526 typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
529 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T,
size_t N >
530 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, HybridVector<T,N,false> >
532 typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
535 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF,
bool NF >
536 struct MultTrait< HybridVector<T,N,true>, SymmetricMatrix<MT,SO,DF,NF> >
538 typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
541 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
542 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, DynamicVector<T,false> >
544 typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
547 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
548 struct MultTrait< DynamicVector<T,true>, SymmetricMatrix<MT,SO,DF,NF> >
550 typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
553 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
554 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, CompressedVector<T,false> >
556 typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
559 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
560 struct MultTrait< CompressedVector<T,true>, SymmetricMatrix<MT,SO,DF,NF> >
562 typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
565 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
566 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
568 typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
571 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
572 struct MultTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
574 typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
577 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
578 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
580 typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
583 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
584 struct MultTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
586 typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
589 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
590 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
592 typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
595 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
596 struct MultTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
598 typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
601 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
602 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
604 typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
607 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
608 struct MultTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
610 typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
613 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
614 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
616 typedef typename MultTrait<MT1,MT2>::Type Type;
632 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
633 struct DivTrait< SymmetricMatrix<MT,SO,DF,NF>, T >
635 typedef SymmetricMatrix< typename DivTrait<MT,T>::Type > Type;
652 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
653 struct MathTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
655 typedef SymmetricMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
656 typedef SymmetricMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
672 template<
typename MT,
bool SO,
bool DF,
bool NF >
673 struct SubmatrixTrait< SymmetricMatrix<MT,SO,DF,NF> >
675 typedef typename SubmatrixTrait<MT>::Type Type;
691 template<
typename MT,
bool SO,
bool DF,
bool NF >
692 struct RowTrait< SymmetricMatrix<MT,SO,DF,NF> >
694 typedef typename RowTrait<MT>::Type Type;
710 template<
typename MT,
bool SO,
bool DF,
bool NF >
711 struct ColumnTrait< SymmetricMatrix<MT,SO,DF,NF> >
713 typedef typename ColumnTrait<MT>::Type Type;
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
Matrix adapter for symmetric matrices.
Definition: Forward.h:51
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:861
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.
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 HasConstDataAccess type trait.
SymmetricMatrix specialization for sparse matrices with non-numeric element type. ...
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
SymmetricMatrix specialization for dense matrices with numeric element type.
Header file for the mathematical trait.
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.