22 #ifndef _BLAZE_MATH_DENSEVECTOR_H_
23 #define _BLAZE_MATH_DENSEVECTOR_H_
75 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
76 inline bool operator==(
const DenseVector<T1,TF1>& lhs,
const DenseVector<T2,TF2>& rhs );
78 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
79 inline bool operator==(
const DenseVector<T1,TF1>& lhs,
const SparseVector<T2,TF2>& rhs );
81 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
82 inline bool operator==(
const SparseVector<T1,TF1>& lhs,
const DenseVector<T2,TF2>& rhs );
84 template<
typename T1,
typename T2,
bool TF >
85 inline typename EnableIf< IsNumeric<T2>,
bool >::Type
86 operator==(
const DenseVector<T1,TF>& vec, T2 scalar );
88 template<
typename T1,
typename T2,
bool TF >
89 inline typename EnableIf< IsNumeric<T1>,
bool >::Type
90 operator==( T1 scalar,
const DenseVector<T2,TF>& vec );
92 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
93 inline bool operator!=(
const DenseVector<T1,TF1>& lhs,
const DenseVector<T2,TF2>& rhs );
95 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
96 inline bool operator!=(
const DenseVector<T1,TF1>& lhs,
const SparseVector<T2,TF2>& rhs );
98 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
99 inline bool operator!=(
const SparseVector<T1,TF1>& lhs,
const DenseVector<T2,TF2>& rhs );
101 template<
typename T1,
typename T2,
bool TF >
102 inline typename EnableIf< IsNumeric<T2>,
bool >::Type
103 operator!=(
const DenseVector<T1,TF>& vec, T2 scalar );
105 template<
typename T1,
typename T2,
bool TF >
106 inline typename EnableIf< IsNumeric<T1>,
bool >::Type
107 operator!=( T1 scalar,
const DenseVector<T2,TF>& vec );
120 template<
typename T1
126 typedef typename T1::CompositeType CT1;
127 typedef typename T2::CompositeType CT2;
130 if( (~lhs).size() != (~rhs).size() )
return false;
138 for(
size_t i=0; i<a.size(); ++i )
139 if( !
equal( a[i], b[i] ) )
return false;
153 template<
typename T1
159 typedef typename T1::CompositeType CT1;
160 typedef typename T2::CompositeType CT2;
164 if( (~lhs).size() != (~rhs).size() )
return false;
174 for( ConstIterator element=b.begin(); element!=b.end(); ++element, ++i ) {
175 for( ; i<element->index(); ++i ) {
178 if( !
equal( element->value(), a[i] ) )
return false;
180 for( ; i<a.size(); ++i ) {
197 template<
typename T1
203 return ( rhs == lhs );
220 template<
typename T1
223 inline typename EnableIf< IsNumeric<T2>,
bool >::Type
226 typedef typename T1::CompositeType CT1;
233 for(
size_t i=0; i<a.size(); ++i )
234 if( !
equal( a[i], scalar ) )
return false;
252 template<
typename T1
255 inline typename EnableIf< IsNumeric<T1>,
bool >::Type
258 return ( vec == scalar );
271 template<
typename T1
277 return !( lhs == rhs );
290 template<
typename T1
296 return !( lhs == rhs );
309 template<
typename T1
315 return !( rhs == lhs );
332 template<
typename T1
335 inline typename EnableIf< IsNumeric<T2>,
bool >::Type
338 return !( vec == scalar );
355 template<
typename T1
358 inline typename EnableIf< IsNumeric<T1>,
bool >::Type
361 return !( vec == scalar );
377 template<
typename VT,
bool TF >
378 inline typename CMathTrait<typename VT::ElementType>::Type
length(
const DenseVector<VT,TF>& dv );
380 template<
typename VT,
bool TF >
381 inline const typename VT::ElementType
sqrLength(
const DenseVector<VT,TF>& dv );
383 template<
typename VT,
bool TF >
384 inline const typename VT::ElementType
min(
const DenseVector<VT,TF>& dv );
386 template<
typename VT,
bool TF >
387 inline const typename VT::ElementType
max(
const DenseVector<VT,TF>& dv );
424 template<
typename VT
428 typedef typename VT::ElementType ElementType;
434 for(
size_t i=0UL; i<(~dv).size(); ++i )
435 sum +=
sq( (~dv)[i] );
436 return std::sqrt( sum );
453 template<
typename VT
457 typedef typename VT::ElementType ElementType;
461 ElementType
sum( 0 );
462 for(
size_t i=0UL; i<(~dv).size(); ++i )
463 sum +=
sq( (~dv)[i] );
480 template<
typename VT
486 typedef typename VT::ElementType ET;
488 if( (~dv).size() == 0 )
return ET();
490 ET minimum( (~dv)[0] );
491 for(
size_t i=1; i<(~dv).size(); ++i )
492 minimum =
min( minimum, (~dv)[i] );
509 template<
typename VT
515 typedef typename VT::ElementType ET;
517 if( (~dv).size() == 0 )
return ET();
519 ET maximum( (~dv)[0] );
520 for(
size_t i=1; i<(~dv).size(); ++i )
521 maximum =
max( maximum, (~dv)[i] );