Classes | |
class | ExcAccessToNonlocalRow |
class | ExcBeyondEndOfMatrix |
Public Member Functions | |
Accessor (const MatrixBase *matrix, const unsigned int row, const unsigned int index) | |
unsigned int | row () const |
unsigned int | index () const |
unsigned int | column () const |
PetscScalar | value () const |
Private Member Functions | |
void | visit_present_row () |
Private Attributes | |
MatrixBase * | matrix |
unsigned int | a_row |
unsigned int | a_index |
std_cxx1x::shared_ptr< const std::vector< unsigned int > > | colnum_cache |
std_cxx1x::shared_ptr< const std::vector< PetscScalar > > | value_cache |
Friends | |
class | const_iterator |
Accessor class for iterators
PETScWrappers::MatrixIterators::const_iterator::Accessor::Accessor | ( | const MatrixBase * | matrix, | |
const unsigned int | row, | |||
const unsigned int | index | |||
) |
Constructor. Since we use accessors only for read access, a const matrix pointer is sufficient.
Row number of the element represented by this object.
Index in row of the element represented by this object.
Column number of the element represented by this object.
PetscScalar PETScWrappers::MatrixIterators::const_iterator::Accessor::value | ( | ) | const |
Value of this matrix entry.
void PETScWrappers::MatrixIterators::const_iterator::Accessor::visit_present_row | ( | ) | [private] |
Discard the old row caches (they may still be used by other accessors) and generate new ones for the row pointed to presently by this accessor.
friend class const_iterator [friend] |
Make enclosing class a friend.
MatrixBase* PETScWrappers::MatrixIterators::const_iterator::Accessor::matrix [mutable, private] |
The matrix accessed.
Current row number.
Current index in row.
std_cxx1x::shared_ptr<const std::vector<unsigned int> > PETScWrappers::MatrixIterators::const_iterator::Accessor::colnum_cache [private] |
Cache where we store the column indices of the present row. This is necessary, since PETSc makes access to the elements of its matrices rather hard, and it is much more efficient to copy all column entries of a row once when we enter it than repeatedly asking PETSc for individual ones. This also makes some sense since it is likely that we will access them sequentially anyway.
In order to make copying of iterators/accessor of acceptable performance, we keep a shared pointer to these entries so that more than one accessor can access this data if necessary.
std_cxx1x::shared_ptr<const std::vector<PetscScalar> > PETScWrappers::MatrixIterators::const_iterator::Accessor::value_cache [private] |
Similar cache for the values of this row.