35#ifndef _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_SYMMETRICVALUE_H_
36#define _BLAZE_MATH_ADAPTORS_SYMMETRICMATRIX_SYMMETRICVALUE_H_
114template<
typename MT >
116 :
public Proxy< SymmetricValue<MT> >
127 template<
typename T >
128 struct BuiltinType {
using Type = INVALID_TYPE; };
136 template<
typename T >
137 struct ComplexType {
using Type =
typename T::value_type; };
147 , ComplexType<RepresentedType>
148 , BuiltinType<RepresentedType> >::Type;
174 template<
typename T >
inline SymmetricValue& operator+=(
const T& value );
175 template<
typename T >
inline SymmetricValue& operator-=(
const T& value );
176 template<
typename T >
inline SymmetricValue& operator*=(
const T& value );
177 template<
typename T >
inline SymmetricValue& operator/=(
const T& value );
184 inline void invert()
const;
211 inline
void sync() const;
253 reset( value.pos_->value() );
255 if( value.pos_->index() != value.index_ )
257 const size_t row ( ( IsRowMajorMatrix_v<MT> )?( value.pos_->index() ):( value.index_ ) );
258 const size_t column( ( IsRowMajorMatrix_v<MT> )?( value.index_ ):( value.pos_->index() ) );
261 reset( pos2->value() );
285 const size_t row ( ( IsRowMajorMatrix_v<MT> )?( value.
pos_->index() ):( value.
index_ ) );
286 const size_t column( ( IsRowMajorMatrix_v<MT> )?( value.
index_ ):( value.
pos_->index() ) );
289 clear( pos2->value() );
313template<
typename MT >
336template<
typename MT >
339 pos_->value() = sv.
pos_->value();
352template<
typename MT >
353template<
typename T >
356 pos_->value() = value;
370template<
typename MT >
371template<
typename T >
374 pos_->value() += value;
387template<
typename MT >
388template<
typename T >
391 pos_->value() -= value;
404template<
typename MT >
405template<
typename T >
408 pos_->value() *= value;
421template<
typename MT >
422template<
typename T >
425 pos_->value() /= value;
445template<
typename MT >
452 if( pos_->index() != index_ )
454 const size_t row ( ( IsRowMajorMatrix_v<MT> )?( pos_->index() ):( index_ ) );
455 const size_t column( ( IsRowMajorMatrix_v<MT> )?( index_ ):( pos_->index() ) );
458 pos2->value() = pos_->value();
469template<
typename MT >
472 return pos_->value();
482template<
typename MT >
485 if( pos_->index() == index_ ||
isDefault( pos_->value() ) )
488 const size_t row ( ( IsRowMajorMatrix_v<MT> )?( pos_->index() ):( index_ ) );
489 const size_t column( ( IsRowMajorMatrix_v<MT> )?( index_ ):( pos_->index() ) );
491 matrix_->set(
row,
column, pos_->value() );
509template<
typename MT >
512 return pos_->value();
533template<
typename MT >
536 return pos_->value().real();
550template<
typename MT >
553 pos_->value().real() = value;
567template<
typename MT >
570 return pos_->value.imag();
584template<
typename MT >
587 pos_->value().imag( value );
604template<
typename MT >
617template<
typename MT >
Header file for auxiliary alias declarations.
typename T::ElementType ElementType_t
Alias declaration for nested ElementType type definitions.
Definition: Aliases.h:190
Constraint on the data type.
Constraint on the data type.
Header file for the If class template.
Utility type for generic codes.
Header file for the invert shim.
Header file for the IsComplex type trait.
Header file for the isDefault shim.
Header file for the isOne shim.
Header file for the isReal shim.
Header file for the IsRowMajorMatrix type trait.
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
Header file for the relaxation flag enumeration.
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
Proxy base class.
Definition: Proxy.h:169
Representation of two synchronized values within a sparse symmetric matrix.
Definition: SymmetricValue.h:117
ValueType real() const
Returns the real part of the represented complex number.
Definition: SymmetricValue.h:534
RepresentedType get() const noexcept
Access to the represented value.
Definition: SymmetricValue.h:470
SymmetricValue & operator=(const SymmetricValue &sv)
Copy assignment operator for SymmetricValue.
Definition: SymmetricValue.h:337
ValueType imag() const
Returns the imaginary part of the represented complex number.
Definition: SymmetricValue.h:568
size_t index_
The row/column index of the iterator.
Definition: SymmetricValue.h:218
SymmetricValue(IteratorType pos, MT *matrix, size_t index)
Constructor for the SymmetricValue class.
Definition: SymmetricValue.h:314
typename If_t< IsComplex_v< RepresentedType >, ComplexType< RepresentedType >, BuiltinType< RepresentedType > >::Type ValueType
Value type of the represented complex element.
Definition: SymmetricValue.h:148
ValueType value_type
Value type of the represented complex element.
Definition: SymmetricValue.h:150
typename MT::Iterator IteratorType
Type of the underlying sparse matrix iterators.
Definition: SymmetricValue.h:120
ElementType_t< MT > RepresentedType
Type of the represented matrix element.
Definition: SymmetricValue.h:143
IteratorType pos_
Iterator to the current sparse symmetric matrix element.
Definition: SymmetricValue.h:216
MT * matrix_
The sparse matrix containing the iterator.
Definition: SymmetricValue.h:217
void sync() const
Synchronization of the current sparse element to the according paired element.
Definition: SymmetricValue.h:483
void invert() const
In-place inversion of the symmetric value.
Definition: SymmetricValue.h:446
Constraint on the data type.
Constraint on the data type.
Constraint on the data type.
decltype(auto) column(Matrix< MT, SO > &matrix, RCAs... args)
Creating a view on a specific column of the given matrix.
Definition: Column.h:137
#define BLAZE_CONSTRAINT_MUST_NOT_BE_VOLATILE(T)
Constraint on the data type.
Definition: Volatile.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_POINTER_TYPE(T)
Constraint on the data type.
Definition: Pointer.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_CONST(T)
Constraint on the data type.
Definition: Const.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_REFERENCE_TYPE(T)
Constraint on the data type.
Definition: Reference.h:79
bool isDefault(const DiagonalMatrix< MT, SO, DF > &m)
Returns whether the given diagonal matrix is in default state.
Definition: DiagonalMatrix.h:169
#define BLAZE_CONSTRAINT_MUST_NOT_BE_SYMMETRIC_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Symmetric.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_VIEW_TYPE(T)
Constraint on the data type.
Definition: View.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_HERMITIAN_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Hermitian.h:79
#define BLAZE_CONSTRAINT_MUST_NOT_BE_UPPER_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Upper.h:81
#define BLAZE_CONSTRAINT_MUST_NOT_BE_COMPUTATION_TYPE(T)
Constraint on the data type.
Definition: Computation.h:81
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_MATRIX_TYPE(T)
Constraint on the data type.
Definition: SparseMatrix.h:61
#define BLAZE_CONSTRAINT_MUST_NOT_BE_LOWER_MATRIX_TYPE(T)
Constraint on the data type.
Definition: Lower.h:81
#define BLAZE_CONSTRAINT_MUST_BE_SCALAR_TYPE(T)
Constraint on the data type.
Definition: Scalar.h:61
#define BLAZE_CONSTRAINT_MUST_NOT_BE_TRANSFORMATION_TYPE(T)
Constraint on the data type.
Definition: Transformation.h:81
constexpr void clear(Matrix< MT, SO > &matrix)
Clearing the given matrix.
Definition: Matrix.h:960
constexpr void reset(Matrix< MT, SO > &matrix)
Resetting the given matrix.
Definition: Matrix.h:806
decltype(auto) row(Matrix< MT, SO > &, RRAs...)
Creating a view on a specific row of the given matrix.
Definition: Row.h:137
void invert(const SymmetricValue< MT > &value)
In-place inversion of the symmetric value.
Definition: SymmetricValue.h:618
typename If< Condition >::template Type< T1, T2 > If_t
Auxiliary alias template for the If class template.
Definition: If.h:108
Header file for the Proxy class.
Header file for the clear shim.
Header file for the isZero shim.
Header file for the reset shim.
Header file for basic type definitions.