22 #ifndef _BLAZE_MATH_SPARSEMATRIX_H_
23 #define _BLAZE_MATH_SPARSEMATRIX_H_
30 #include <boost/type_traits/remove_reference.hpp>
79 template<
typename T1,
typename T2,
bool SO >
80 inline bool operator==(
const SparseMatrix<T1,false>& lhs,
const SparseMatrix<T2,false>& rhs );
82 template<
typename T1,
typename T2,
bool SO >
83 inline bool operator==(
const SparseMatrix<T1,true>& lhs,
const SparseMatrix<T2,true>& rhs );
85 template<
typename T1,
typename T2,
bool SO >
86 inline bool operator==(
const SparseMatrix<T1,SO>& lhs,
const SparseMatrix<T2,!SO>& rhs );
88 template<
typename T1,
bool SO1,
typename T2,
bool SO2 >
89 inline bool operator!=(
const SparseMatrix<T1,SO1>& lhs,
const SparseMatrix<T2,SO2>& rhs );
102 template<
typename T1
106 typedef typename T1::CompositeType CT1;
107 typedef typename T2::CompositeType CT2;
108 typedef typename boost::remove_reference<CT1>::type::ConstIterator LhsConstIterator;
109 typedef typename boost::remove_reference<CT2>::type::ConstIterator RhsConstIterator;
121 for(
size_t i=0; i<A.rows(); ++i )
123 const LhsConstIterator lend( A.end(i) );
124 const RhsConstIterator rend( B.end(i) );
126 LhsConstIterator lelem( A.begin(i) );
127 RhsConstIterator relem( B.begin(i) );
129 while( lelem < lend && relem < rend ) {
130 if( lelem->index() < relem->index() && !
isDefault( (lelem++)->value() ) )
132 else if( lelem->index() > relem->index() && !
isDefault( (relem++)->value() ) )
134 else if( !
equal( (lelem++)->value(), (relem++)->value() ) )
138 while( lelem < lend ) {
143 while( relem < rend ) {
162 template<
typename T1
166 typedef typename T1::CompositeType CT1;
167 typedef typename T2::CompositeType CT2;
168 typedef typename boost::remove_reference<CT1>::type::ConstIterator LhsConstIterator;
169 typedef typename boost::remove_reference<CT2>::type::ConstIterator RhsConstIterator;
181 for(
size_t j=0; j<A.columns(); ++j )
183 const LhsConstIterator lend( A.end(j) );
184 const RhsConstIterator rend( B.end(j) );
186 LhsConstIterator lelem( A.begin(j) );
187 RhsConstIterator relem( B.begin(j) );
189 while( lelem < lend && relem < rend ) {
190 if( lelem->index() < relem->index() && !
isDefault( (lelem++)->value() ) )
192 else if( lelem->index() > relem->index() && !
isDefault( (relem++)->value() ) )
194 else if( !
equal( (lelem++)->value(), (relem++)->value() ) )
198 while( lelem < lend ) {
203 while( relem < rend ) {
222 template<
typename T1
227 const typename T2::TransposeType tmp( ~rhs );
228 return ( ~lhs == tmp );
241 template<
typename T1
247 return !( lhs == rhs );