Skip to content
Snippets Groups Projects
Commit e0412d21 authored by Jesper Andersson's avatar Jesper Andersson
Browse files

Added a read-only column iterator

parent 1771a4e0
No related branches found
No related tags found
No related merge requests found
...@@ -53,7 +53,6 @@ class Preconditioner; ...@@ -53,7 +53,6 @@ class Preconditioner;
template<class T> template<class T>
class Accumulator; class Accumulator;
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// //
// Class SpMat: // Class SpMat:
...@@ -147,6 +146,39 @@ public: ...@@ -147,6 +146,39 @@ public:
friend class Accumulator<T>; friend class Accumulator<T>;
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
//
// Class ColumnIterator
//
// This implements a const forward iterator for a given column
//
//@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
// template<class TT>
class ColumnIterator
{
public:
ColumnIterator(const SpMat<T>& mat, unsigned int col, bool end=false) {
if (end) { _ri_it = mat._ri[col-1].end(); _val_it = mat._val[col-1].end(); }
else { _ri_it = mat._ri[col-1].begin(); _val_it = mat._val[col-1].begin(); }
}
~ColumnIterator() {}
T operator*() const { return(*_val_it); }
unsigned int Row() const { return(*_ri_it); }
bool operator==(const ColumnIterator& rhs) const { return(_val_it == rhs._val_it); }
bool operator!=(const ColumnIterator& rhs) const { return(!(*this == rhs)); }
// Prefix increment. Use whenever possible
ColumnIterator& operator++() { ++_ri_it; ++_val_it; return(*this); }
// Postfix increment. Avoid.
ColumnIterator& operator++(int dummy) { ColumnIterator clone(*this); ++_ri_it; ++_val_it; return(clone); }
private:
typename std::vector<T>::const_iterator _val_it;
std::vector<unsigned int>::const_iterator _ri_it;
};
ColumnIterator begin(unsigned int col) const { if (col>_n) throw SpMatException("ColumnIterator: col out of range"); return(ColumnIterator(*this,col)); }
ColumnIterator end(unsigned int col) const { if (col>_n) throw SpMatException("ColumnIterator: col out of range"); return(ColumnIterator(*this,col,true)); }
template<class TT> template<class TT>
friend const SpMat<TT> operator*(const SpMat<TT>& lh, const SpMat<TT>& rh); // Multiplication of two sparse matrices friend const SpMat<TT> operator*(const SpMat<TT>& lh, const SpMat<TT>& rh); // Multiplication of two sparse matrices
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment