35 #ifndef _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_H_
36 #define _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_H_
75 template<
typename MT,
bool SO,
bool DF,
bool NF >
76 inline void reset( SymmetricMatrix<MT,SO,DF,NF>& m );
78 template<
typename MT,
bool SO,
bool DF,
bool NF >
79 inline void reset( SymmetricMatrix<MT,SO,DF,NF>& m,
size_t i );
81 template<
typename MT,
bool SO,
bool DF,
bool NF >
82 inline void clear( SymmetricMatrix<MT,SO,DF,NF>& m );
84 template<
typename MT,
bool SO,
bool DF,
bool NF >
85 inline bool isDefault(
const SymmetricMatrix<MT,SO,DF,NF>& m );
87 template<
typename MT,
bool SO,
bool DF,
bool NF >
88 inline void swap( SymmetricMatrix<MT,SO,DF,NF>& a, SymmetricMatrix<MT,SO,DF,NF>& b ) ;
100 template<
typename MT
124 template<
typename MT
142 template<
typename MT
171 template<
typename MT
191 template<
typename MT
212 template<
typename MT,
bool SO,
bool DF,
bool NF >
213 struct IsSquare< SymmetricMatrix<MT,SO,DF,NF> > :
public TrueType
232 template<
typename MT,
bool SO,
bool DF,
bool NF >
233 struct IsSymmetric< SymmetricMatrix<MT,SO,DF,NF> > :
public TrueType
252 template<
typename MT,
bool SO,
bool DF,
bool NF >
253 struct IsResizable< SymmetricMatrix<MT,SO,DF,NF> > :
public IsResizable<MT>::Type
255 enum { value = IsResizable<MT>::value };
256 typedef typename IsResizable<MT>::Type Type;
272 template<
typename MT,
bool SO,
bool DF,
bool NF >
273 struct RemoveAdaptor< SymmetricMatrix<MT,SO,DF,NF> >
291 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
292 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
294 typedef typename AddTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
297 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
298 struct AddTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
300 typedef typename AddTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
303 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
304 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
306 typedef typename AddTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
309 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
310 struct AddTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
312 typedef typename AddTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
315 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
316 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
318 typedef typename AddTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
321 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
322 struct AddTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
324 typedef typename AddTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
327 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
328 struct AddTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
330 typedef typename AddTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
333 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
334 struct AddTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
336 typedef typename AddTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
339 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
340 struct AddTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
342 typedef SymmetricMatrix< typename AddTrait<MT1,MT2>::Type > Type;
358 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
359 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
361 typedef typename SubTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
364 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
365 struct SubTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
367 typedef typename SubTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
370 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
371 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
373 typedef typename SubTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
376 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
377 struct SubTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
379 typedef typename SubTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
382 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
383 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
385 typedef typename SubTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
388 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
389 struct SubTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
391 typedef typename SubTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
394 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
395 struct SubTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
397 typedef typename SubTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
400 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
401 struct SubTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
403 typedef typename SubTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
406 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
407 struct SubTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
409 typedef SymmetricMatrix< typename SubTrait<MT1,MT2>::Type > Type;
425 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
426 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, T >
428 typedef SymmetricMatrix< typename MultTrait<MT,T>::Type > Type;
432 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
433 struct MultTrait< T, SymmetricMatrix<MT,SO,DF,NF> >
435 typedef SymmetricMatrix< typename MultTrait<T,MT>::Type > Type;
439 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T,
size_t N >
440 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, StaticVector<T,N,false> >
442 typedef typename MultTrait< MT, StaticVector<T,N,false> >::Type Type;
445 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF,
bool NF >
446 struct MultTrait< StaticVector<T,N,true>, SymmetricMatrix<MT,SO,DF,NF> >
448 typedef typename MultTrait< StaticVector<T,N,true>, MT >::Type Type;
451 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T,
size_t N >
452 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, HybridVector<T,N,false> >
454 typedef typename MultTrait< MT, HybridVector<T,N,false> >::Type Type;
457 template<
typename T,
size_t N,
typename MT,
bool SO,
bool DF,
bool NF >
458 struct MultTrait< HybridVector<T,N,true>, SymmetricMatrix<MT,SO,DF,NF> >
460 typedef typename MultTrait< HybridVector<T,N,true>, MT >::Type Type;
463 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
464 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, DynamicVector<T,false> >
466 typedef typename MultTrait< MT, DynamicVector<T,false> >::Type Type;
469 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
470 struct MultTrait< DynamicVector<T,true>, SymmetricMatrix<MT,SO,DF,NF> >
472 typedef typename MultTrait< DynamicVector<T,true>, MT >::Type Type;
475 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
476 struct MultTrait< SymmetricMatrix<MT,SO,DF,NF>, CompressedVector<T,false> >
478 typedef typename MultTrait< MT, CompressedVector<T,false> >::Type Type;
481 template<
typename T,
typename MT,
bool SO,
bool DF,
bool NF >
482 struct MultTrait< CompressedVector<T,true>, SymmetricMatrix<MT,SO,DF,NF> >
484 typedef typename MultTrait< CompressedVector<T,true>, MT >::Type Type;
487 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
488 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, StaticMatrix<T,M,N,SO2> >
490 typedef typename MultTrait< MT, StaticMatrix<T,M,N,SO2> >::Type Type;
493 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
494 struct MultTrait< StaticMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
496 typedef typename MultTrait< StaticMatrix<T,M,N,SO1>, MT >::Type Type;
499 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
size_t M,
size_t N,
bool SO2 >
500 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, HybridMatrix<T,M,N,SO2> >
502 typedef typename MultTrait< MT, HybridMatrix<T,M,N,SO2> >::Type Type;
505 template<
typename T,
size_t M,
size_t N,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
506 struct MultTrait< HybridMatrix<T,M,N,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
508 typedef typename MultTrait< HybridMatrix<T,M,N,SO1>, MT >::Type Type;
511 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
512 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, DynamicMatrix<T,SO2> >
514 typedef typename MultTrait< MT, DynamicMatrix<T,SO2> >::Type Type;
517 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
518 struct MultTrait< DynamicMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
520 typedef typename MultTrait< DynamicMatrix<T,SO1>, MT >::Type Type;
523 template<
typename MT,
bool SO1,
bool DF,
bool NF,
typename T,
bool SO2 >
524 struct MultTrait< SymmetricMatrix<MT,SO1,DF,NF>, CompressedMatrix<T,SO2> >
526 typedef typename MultTrait< MT, CompressedMatrix<T,SO2> >::Type Type;
529 template<
typename T,
bool SO1,
typename MT,
bool SO2,
bool DF,
bool NF >
530 struct MultTrait< CompressedMatrix<T,SO1>, SymmetricMatrix<MT,SO2,DF,NF> >
532 typedef typename MultTrait< CompressedMatrix<T,SO1>, MT >::Type Type;
535 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
536 struct MultTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
538 typedef typename MultTrait<MT1,MT2>::Type Type;
554 template<
typename MT,
bool SO,
bool DF,
bool NF,
typename T >
555 struct DivTrait< SymmetricMatrix<MT,SO,DF,NF>, T >
557 typedef SymmetricMatrix< typename DivTrait<MT,T>::Type > Type;
574 template<
typename MT1,
bool SO1,
bool DF1,
bool NF1,
typename MT2,
bool SO2,
bool DF2,
bool NF2 >
575 struct MathTrait< SymmetricMatrix<MT1,SO1,DF1,NF1>, SymmetricMatrix<MT2,SO2,DF2,NF2> >
577 typedef SymmetricMatrix< typename MathTrait<MT1,MT2>::HighType > HighType;
578 typedef SymmetricMatrix< typename MathTrait<MT1,MT2>::LowType > LowType;
594 template<
typename MT,
bool SO,
bool DF,
bool NF >
595 struct SubmatrixTrait< SymmetricMatrix<MT,SO,DF,NF> >
597 typedef typename SubmatrixTrait<MT>::Type Type;
613 template<
typename MT,
bool SO,
bool DF,
bool NF >
614 struct RowTrait< SymmetricMatrix<MT,SO,DF,NF> >
616 typedef typename RowTrait<MT>::Type Type;
632 template<
typename MT,
bool SO,
bool DF,
bool NF >
633 struct ColumnTrait< SymmetricMatrix<MT,SO,DF,NF> >
635 typedef typename ColumnTrait<MT>::Type Type;
Constraint on the data type.
void swap(SymmetricMatrix< MT, SO, DF, NF > &a, SymmetricMatrix< MT, SO, DF, NF > &b)
Swapping the contents of two matrices.
Definition: SymmetricMatrix.h:195
Header file for the subtraction trait.
Header file for the row trait.
Matrix adapter for symmetric matrices.
Definition: Forward.h:47
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.
Header file for all forward declarations of the math module.
SymmetricMatrix specialization for sparse matrices with numeric element type.
BLAZE_ALWAYS_INLINE void clear(const NonNumericProxy< MT > &proxy)
Clearing the represented element.
Definition: NonNumericProxy.h:854
Header file for the RemoveAdaptor 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.
Header file for the implementation of the base template of the SymmetricMatrix.
#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.
BLAZE_ALWAYS_INLINE bool isDefault(const NonNumericProxy< MT > &proxy)
Returns whether the represented element is in default state.
Definition: NonNumericProxy.h:874
BLAZE_ALWAYS_INLINE void reset(const NonNumericProxy< MT > &proxy)
Resetting the represented element to the default initial values.
Definition: NonNumericProxy.h:833
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.