35 #ifndef _BLAZE_MATH_EXPRESSIONS_SVECABSEXPR_H_
36 #define _BLAZE_MATH_EXPRESSIONS_SVECABSEXPR_H_
94 class SVecAbsExpr :
public SparseVector< SVecAbsExpr<VT,TF>, TF >
131 template<
typename VT2 >
134 enum { value = useAssign };
147 template<
typename VT2 >
148 struct UseSMPAssign {
149 enum { value = ( !VT2::smpAssignable || !VT::smpAssignable ) && useAssign };
173 enum { smpAssignable = VT::smpAssignable };
229 return Element(
abs( it_->value() ), it_->index() );
250 return abs( it_->value() );
271 return it_ == rhs.
it_;
282 return it_ != rhs.
it_;
293 return it_ - rhs.
it_;
334 inline ReturnType
at(
size_t index )
const {
335 if( index >=
sv_.size() ) {
338 return (*
this)[index];
378 return sv_.nonZeros();
434 template<
typename T >
436 return sv_.canAlias( alias );
446 template<
typename T >
448 return sv_.isAliased( alias );
458 return sv_.canSMPAssign();
481 template<
typename VT2 >
491 assign( ~lhs, rhs.sv_ );
492 assign( ~lhs,
abs( ~lhs ) );
511 template<
typename VT2 >
523 assign( ~lhs, rhs.sv_ );
525 const Iterator
end( (~lhs).
end() );
526 for( Iterator element=(~lhs).
begin(); element!=
end; ++element ) {
527 element->value() =
abs( element->value() );
547 template<
typename VT2 >
548 friend inline typename EnableIf< UseAssign<VT2> >::Type
549 addAssign( DenseVector<VT2,TF>& lhs,
const SVecAbsExpr& rhs )
559 const ResultType tmp(
serial( rhs ) );
560 addAssign( ~lhs, tmp );
583 template<
typename VT2 >
584 friend inline typename EnableIf< UseAssign<VT2> >::Type
585 subAssign( DenseVector<VT2,TF>& lhs,
const SVecAbsExpr& rhs )
595 const ResultType tmp(
serial( rhs ) );
596 subAssign( ~lhs, tmp );
619 template<
typename VT2 >
620 friend inline typename EnableIf< UseAssign<VT2> >::Type
621 multAssign( DenseVector<VT2,TF>& lhs,
const SVecAbsExpr& rhs )
631 const ResultType tmp(
serial( rhs ) );
632 multAssign( ~lhs, tmp );
655 template<
typename VT2 >
656 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
687 template<
typename VT2 >
688 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
699 const ResultType tmp( rhs );
723 template<
typename VT2 >
724 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
735 const ResultType tmp( rhs );
759 template<
typename VT2 >
760 friend inline typename EnableIf< UseSMPAssign<VT2> >::Type
771 const ResultType tmp( rhs );
816 template<
typename VT
846 template<
typename VT
848 inline const SVecAbsExpr<VT,TF>&
abs(
const SVecAbsExpr<VT,TF>& sv )
868 template<
typename VT,
bool TF >
869 struct Size<
SVecAbsExpr<VT,TF> > :
public Size<VT>
885 template<
typename VT >
890 typedef typename SelectType< IsSparseVector<VT>::value && IsColumnVector<VT>::value
891 , SVecAbsExpr<VT,false>
892 , INVALID_TYPE >::Type Type;
901 template<
typename VT >
906 typedef typename SelectType< IsSparseVector<VT>::value && IsRowVector<VT>::value
907 , SVecAbsExpr<VT,true>
908 , INVALID_TYPE >::Type Type;
917 template<
typename VT,
bool TF,
bool AF >
918 struct SubvectorExprTrait<
SVecAbsExpr<VT,TF>, AF >
922 typedef typename AbsExprTrait< typename SubvectorExprTrait<const VT,AF>::Type >::Type Type;
Pointer difference type of the Blaze library.
ValueType * PointerType
Pointer return type.
Definition: SVecAbsExpr.h:191
Header file for the TSVecAbsExprTrait class template.
ConstIterator begin() const
Returns an iterator to the first non-zero element of the sparse vector.
Definition: SVecAbsExpr.h:347
Compile time check whether the given type is a temporary vector or matrix type.This type trait class ...
Definition: IsTemporary.h:87
Header file for basic type definitions.
Header file for the SparseVector base class.
IteratorType it_
Iterator over the elements of the sparse vector expression.
Definition: SVecAbsExpr.h:299
size_t index() const
Access to the current index of the sparse element.
Definition: SVecAbsExpr.h:259
ConstIterator upperBound(size_t index) const
Returns an iterator to the first index greater then the given index.
Definition: SVecAbsExpr.h:412
ValueType & ReferenceType
Reference return type.
Definition: SVecAbsExpr.h:192
const Element operator*() const
Direct access to the sparse vector element at the current iterator position.
Definition: SVecAbsExpr.h:227
VT::TransposeType TT
Transpose type of the sparse vector expression.
Definition: SVecAbsExpr.h:103
SelectType< useAssign, const ResultType, const SVecAbsExpr & >::Type CompositeType
Data type for composite expression templates.
Definition: SVecAbsExpr.h:165
const SVecAbsExpr< VT, TF > abs(const SparseVector< VT, TF > &sv)
Returns a vector containing the absolute values of each single element of sv.
Definition: SVecAbsExpr.h:818
VT::ResultType RT
Result type of the sparse vector expression.
Definition: SVecAbsExpr.h:100
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:2588
Header file for the IsRowVector type trait.
const DMatAbsExpr< MT, SO > abs(const DenseMatrix< MT, SO > &dm)
Returns a matrix containing the absolute values of each single element of dm.
Definition: DMatAbsExpr.h:938
Element ValueType
Type of the underlying pointers.
Definition: SVecAbsExpr.h:190
const DMatSerialExpr< MT, SO > serial(const DenseMatrix< MT, SO > &dm)
Forces the serial evaluation of the given dense matrix expression dm.
Definition: DMatSerialExpr.h:721
Header file for the Computation base class.
SVecAbsExpr< VT, TF > This
Type of this SVecAbsExpr instance.
Definition: SVecAbsExpr.h:156
ConstIterator & operator++()
Pre-increment operator.
Definition: SVecAbsExpr.h:216
Header file for the SVecAbsExprTrait class template.
Header file for the RequiresEvaluation type trait.
SVecAbsExpr(const VT &sv)
Constructor for the SVecAbsExpr class.
Definition: SVecAbsExpr.h:309
AbsExprTrait< RN >::Type ExprReturnType
Expression return type for the subscript operator.
Definition: SVecAbsExpr.h:117
IteratorCategory iterator_category
The iterator category.
Definition: SVecAbsExpr.h:196
Expression object for the sparse vector abs() function.The SVecAbsExpr class represents the compile t...
Definition: Forward.h:119
VT::ReturnType RN
Return type of the sparse vector expression.
Definition: SVecAbsExpr.h:101
Constraint on the data type.
bool canAlias(const T *alias) const
Returns whether the expression can alias with the given address alias.
Definition: SVecAbsExpr.h:435
RemoveReference< Operand >::Type::ConstIterator IteratorType
Iterator type of the sparse vector expression.
Definition: SVecAbsExpr.h:187
Compile time check to query the requirement to evaluate an expression.Via this type trait it is possi...
Definition: RequiresEvaluation.h:90
const This & CompositeType
Data type for composite expression templates.
Definition: CompressedMatrix.h:261
ConstIterator end() const
Returns an iterator just past the last non-zero element of the sparse vector.
Definition: SVecAbsExpr.h:357
Header file for the ValueIndexPair class.
Compile time type selection.The SelectType class template selects one of the two given types T1 and T...
Definition: SelectType.h:59
Header file for the IsTemporary type trait class.
Namespace of the Blaze C++ math library.
Definition: Blaze.h:57
size_t nonZeros() const
Returns the number of non-zero elements in the sparse vector.
Definition: SVecAbsExpr.h:377
ConstIterator lowerBound(size_t index) const
Returns an iterator to the first index not less then the given index.
Definition: SVecAbsExpr.h:400
ET ElementType
Resulting element type.
Definition: SVecAbsExpr.h:159
const Element * ConstIterator
Iterator over constant elements.
Definition: CompressedMatrix.h:2592
DifferenceType difference_type
Difference between two iterators.
Definition: SVecAbsExpr.h:200
#define BLAZE_THROW_OUT_OF_RANGE(MESSAGE)
Macro for the emission of a std::out_of_range exceptionThis macro encapsulates the default way of Bla...
Definition: Exception.h:331
ConstIterator find(size_t index) const
Searches for a specific vector element.
Definition: SVecAbsExpr.h:388
VT::ElementType ET
Element type of the sparse vector expression.
Definition: SVecAbsExpr.h:104
ValueType value_type
Type of the underlying pointers.
Definition: SVecAbsExpr.h:197
bool canSMPAssign() const
Returns whether the expression can be used in SMP assignments.
Definition: SVecAbsExpr.h:457
Base class for N-dimensional dense vectors.The DenseVector class is a base class for all arbitrarily ...
Definition: DenseVector.h:70
#define BLAZE_CONSTRAINT_MUST_BE_SPARSE_VECTOR_TYPE(T)
Constraint on the data type.In case the given data type T is not a sparse, N-dimensional vector type...
Definition: SparseVector.h:79
bool operator==(const ConstIterator &rhs) const
Equality comparison between two ConstIterator objects.
Definition: SVecAbsExpr.h:270
Header file for the VecAbsExpr base class.
Constraint on the data type.
#define BLAZE_CONSTRAINT_MUST_BE_REFERENCE_TYPE(T)
Constraint on the data type.In case the given data type T is not a reference type, a compilation error is created.
Definition: Reference.h:78
ValueIndexPair< ElementType > Element
Element type of the sparse vector expression.
Definition: SVecAbsExpr.h:184
CompressedMatrix< Type, false > TransposeType
Transpose type for expression template evaluations.
Definition: CompressedMatrix.h:2585
ReturnType at(size_t index) const
Checked access to the vector elements.
Definition: SVecAbsExpr.h:334
ReturnType operator[](size_t index) const
Subscript operator for the direct access to the vector elements.
Definition: SVecAbsExpr.h:320
TT TransposeType
Transpose type for expression template evaluations.
Definition: SVecAbsExpr.h:158
Type ElementType
Type of the sparse matrix elements.
Definition: CompressedMatrix.h:2586
Constraint on the data type.
Header file for the SelectType class template.
Header file for all forward declarations for expression class templates.
Constraint on the data type.
Header file for the EnableIf class template.
Header file for the serial shim.
std::forward_iterator_tag IteratorCategory
The iterator category.
Definition: SVecAbsExpr.h:189
Operand operand() const
Returns the sparse vector operand.
Definition: SVecAbsExpr.h:423
EnableIf< IsDenseMatrix< MT1 > >::Type smpSubAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP subtraction assignment of a matrix to dense matrix.
Definition: DenseMatrix.h:160
Header file for the IsSparseVector type trait.
const Type & ReturnType
Return type for expression template evaluations.
Definition: CompressedMatrix.h:2587
Removal of reference modifiers.The RemoveCV type trait removes any reference modifiers from the given...
Definition: RemoveReference.h:69
Iterator over the elements of the sparse vector absolute value expression.
Definition: SVecAbsExpr.h:179
const SelectType< returnExpr, ExprReturnType, ElementType >::Type ReturnType
Return type for expression template evaluations.
Definition: SVecAbsExpr.h:162
Header file for run time assertion macros.
EnableIf< IsDenseMatrix< MT1 > >::Type smpAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:98
Utility type for generic codes.
Operand sv_
Sparse vector of the absolute value expression.
Definition: SVecAbsExpr.h:464
ConstIterator(IteratorType it)
Constructor for the ConstIterator class.
Definition: SVecAbsExpr.h:206
ptrdiff_t DifferenceType
Difference between two iterators.
Definition: SVecAbsExpr.h:193
VT::CompositeType CT
Composite type of the sparse vector expression.
Definition: SVecAbsExpr.h:102
Substitution Failure Is Not An Error (SFINAE) class.The EnableIf class template is an auxiliary tool ...
Definition: EnableIf.h:184
Element * Iterator
Iterator over non-constant elements.
Definition: CompressedMatrix.h:2591
const ConstIterator * operator->() const
Direct access to the sparse vector element at the current iterator position.
Definition: SVecAbsExpr.h:238
#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
Header file for the RemoveReference type trait.
ReturnType value() const
Access to the current value of the sparse element.
Definition: SVecAbsExpr.h:248
PointerType pointer
Pointer return type.
Definition: SVecAbsExpr.h:198
DifferenceType operator-(const ConstIterator &rhs) const
Calculating the number of elements between two expression iterators.
Definition: SVecAbsExpr.h:292
Index-value-pair for sparse vectors and matrices.The ValueIndexPair class represents a single index-v...
Definition: ValueIndexPair.h:70
bool operator!=(const ConstIterator &rhs) const
Inequality comparison between two ConstIterator objects.
Definition: SVecAbsExpr.h:281
Header file for the IsComputation type trait class.
bool isAliased(const T *alias) const
Returns whether the expression is aliased with the given address alias.
Definition: SVecAbsExpr.h:447
size_t size() const
Returns the current size/dimension of the vector.
Definition: SVecAbsExpr.h:367
RT ResultType
Result type for expression template evaluations.
Definition: SVecAbsExpr.h:157
EnableIf< IsDenseMatrix< MT1 > >::Type smpAddAssign(Matrix< MT1, SO1 > &lhs, const Matrix< MT2, SO2 > &rhs)
Default implementation of the SMP addition assignment of a matrix to a dense matrix.
Definition: DenseMatrix.h:129
Base class for sparse vectors.The SparseVector class is a base class for all arbitrarily sized (N-dim...
Definition: Forward.h:118
#define BLAZE_FUNCTION_TRACE
Function trace macro.This macro can be used to reliably trace function calls. In case function tracin...
Definition: FunctionTrace.h:157
This ResultType
Result type for expression template evaluations.
Definition: CompressedMatrix.h:2583
ReferenceType reference
Reference return type.
Definition: SVecAbsExpr.h:199
Header file for the SubvectorExprTrait class template.
SelectType< IsExpression< VT >::value, const VT, const VT & >::Type Operand
Composite data type of the sparse vector expression.
Definition: SVecAbsExpr.h:168
Header file for exception macros.
Header file for the AbsExprTrait class template.
Header file for the IsColumnVector type trait.
Evaluation of the return type of an absolute value expression.Via this type trait it is possible to e...
Definition: AbsExprTrait.h:88
EnableIf< IsDenseVector< VT1 > >::Type smpMultAssign(Vector< VT1, TF1 > &lhs, const Vector< VT2, TF2 > &rhs)
Default implementation of the SMP multiplication assignment of a vector to a dense vector...
Definition: DenseVector.h:189
Header file for the Size type trait.
#define BLAZE_CONSTRAINT_MUST_BE_VECTOR_WITH_TRANSPOSE_FLAG(T, TF)
Constraint on the data type.In case the given data type T is not a dense or sparse vector type and in...
Definition: TransposeFlag.h:81
#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
Header file for the IsExpression type trait class.
Header file for the FunctionTrace class.