Amesos2 - Direct Sparse Solver Interfaces Version of the Day
Amesos2::AbstractConcreteMatrixAdapter< Abstract, Matrix > Class Template Reference

#include <Amesos2_AbstractConcreteMatrixAdapter.hpp>

Inheritance diagram for Amesos2::AbstractConcreteMatrixAdapter< Abstract, Matrix >:
Inheritance graph
[legend]

Detailed Description

template<class Abstract, class Matrix>
class Amesos2::AbstractConcreteMatrixAdapter< Abstract, Matrix >

This class provides a statically polymorphic abstract base class for concrete matrix adapters.

If a matrix M inherits from another matrix class A, it's adapter should inherit from::

   AbstractConcreteMatrixAdapter<A,M>

and the common functionality for matrices inheritting from A should reside in a specialization of AbstractConcreteMatrixAdapter

For example, Epetra_CrsMatrix and Epetra_VbrMatrix both inherit from Epetra_RowMatrix. There is much functionality which is common, but some details, such as object construction is specific to each, so the get_impl function, which must create new instances should be adapted differently for each.

 template < typename M > 
 AbstractConcreteMatrixAdapter<Epetra_RowMatrix, M>
   : MatrixAdapter<M> {

   // < ...common functions... >

   RCP<MatrixAdapter<M> > get_impl(){
     return static_cast<ConcreteMatrixAdapter<M>*>(this)->get_impl();
   }
 }

So now the ConcreteMatrixAdapter specializations for Epetra_CrsMatrix and Epetra_VbrMatrix must only provide the get_impl function.


The documentation for this class was generated from the following file: