22 #ifndef _BLAZE_MATH_SPARSEVECTOR_H_
23 #define _BLAZE_MATH_SPARSEVECTOR_H_
30 #include <boost/type_traits/remove_reference.hpp>
65 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
68 template<
typename T1,
bool TF1,
typename T2,
bool TF2 >
88 typedef typename T1::CompositeType CT1;
89 typedef typename T2::CompositeType CT2;
90 typedef typename boost::remove_reference<CT1>::type::ConstIterator LhsConstIterator;
91 typedef typename boost::remove_reference<CT2>::type::ConstIterator RhsConstIterator;
94 if( (~lhs).size() != (~rhs).size() )
return false;
102 const LhsConstIterator lend( a.end() );
103 const RhsConstIterator rend( b.end() );
105 LhsConstIterator lelem( a.begin() );
106 RhsConstIterator relem( b.begin() );
108 while( lelem < lend && relem < rend )
110 if(
isDefault( lelem->value() ) ) { ++lelem;
continue; }
111 if(
isDefault( relem->value() ) ) { ++relem;
continue; }
113 if( lelem->index() != relem->index() || !
equal( lelem->value(), relem->value() ) ) {
122 while( lelem < lend ) {
128 while( relem < rend ) {
147 template<
typename T1
153 return !( lhs == rhs );
169 template<
typename VT,
bool TF >
172 template<
typename VT,
bool TF >
198 template<
typename VT
202 using boost::remove_reference;
205 typedef typename VT::ElementType ET;
206 typedef typename VT::CompositeType SV;
207 typedef typename remove_reference<SV>::type::ConstIterator ConstIterator;
211 const ConstIterator end( a.end() );
212 ConstIterator element( a.begin() );
214 if( element == end ) {
217 else if( a.nonZeros() == a.size() ) {
218 ET minimum( element->value() );
220 for( ; element!=end; ++element )
221 minimum =
min( minimum, element->value() );
226 for( ; element!=end; ++element )
227 minimum =
min( minimum, element->value() );
254 template<
typename VT
258 using boost::remove_reference;
261 typedef typename VT::ElementType ET;
262 typedef typename VT::CompositeType SV;
263 typedef typename remove_reference<SV>::type::ConstIterator ConstIterator;
267 const ConstIterator end( a.end() );
268 ConstIterator element( a.begin() );
270 if( element == end ) {
273 else if( a.nonZeros() == a.size() ) {
274 ET maximum( element->value() );
276 for( ; element!=end; ++element )
277 maximum =
max( maximum, element->value() );
282 for( ; element!=end; ++element )
283 maximum =
max( maximum, element->value() );