36 #ifndef NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLOCK_MATRIX_HPP 
   37 #define NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLOCK_MATRIX_HPP 
   46 #include <boost/shared_ptr.hpp> 
   47 #include <boost/foreach.hpp> 
   51     template<
typename DataType, 
typename InnerMatrixType>
 
   67             template<
typename MatrixType>
 
   84                         m_curRow(
std::numeric_limits<unsigned int>::max()),
 
   85                         m_curColumn(
std::numeric_limits<unsigned int>::max())
 
   90                         m_matrix(rhs.m_matrix),
 
   91                         m_curRow(rhs.m_curRow),
 
   92                         m_curColumn(rhs.m_curColumn)
 
   98                         if( m_curRow != std::numeric_limits<unsigned int>::max() )
 
  100                             boost::tie(m_curRow, m_curColumn) = StoragePolicy::Advance(
 
  101                                 m_matrix.GetRows(), m_matrix.GetColumns(), m_curRow, m_curColumn);
 
  107                         return m_matrix(m_curRow, m_curColumn);
 
  112                         return m_curRow == rhs.m_curRow && m_curColumn == rhs.m_curColumn;
 
  117                         return !(*
this == rhs);
 
  121                     iterator_base<MatrixType>& operator=(
const iterator_base<MatrixType>& rhs);
 
  137                       unsigned int rowsPerBlock, 
unsigned int columnsPerBlock,
 
  141                       const unsigned int* rowsPerBlock, 
const unsigned int* columnsPerBlock,
 
  156             LIB_UTILITIES_EXPORT unsigned int CalculateBlockIndex(
unsigned int row, 
unsigned int column) 
const;
 
  160             LIB_UTILITIES_EXPORT boost::shared_ptr<const InnerType> GetBlock(
unsigned int row, 
unsigned int column) 
const;
 
  162             LIB_UTILITIES_EXPORT boost::shared_ptr<InnerType>& GetBlock(
unsigned int row, 
unsigned int column);
 
  164             LIB_UTILITIES_EXPORT void SetBlock(
unsigned int row, 
unsigned int column, boost::shared_ptr<InnerType>& m);
 
  188             LIB_UTILITIES_EXPORT static boost::shared_ptr<ThisType> CreateWrapper(
const boost::shared_ptr<ThisType>& rhs);
 
  194             LIB_UTILITIES_EXPORT void Initialize(
const unsigned int* rowsPerBlock, 
const unsigned int* columnsPerBlock);
 
  196             LIB_UTILITIES_EXPORT virtual typename boost::call_traits<NumberType>::value_type v_GetValue(
unsigned int row, 
unsigned int column) 
const;
 
  215     template<
typename DataType, 
typename InnerMatrixType>
 
  219     template<
typename InnerMatrixType>
 
  230 #endif //NEKTAR_LIB_UTILITIES_LINEAR_ALGEBRA_BLOCK_MATRIX_HPP 
static NumberType m_zeroElement
bool operator!=(const iterator_base< MatrixType > &rhs)
InnerType::NumberType NumberType
FullMatrixFuncs StoragePolicy
iterator_base< ThisType > iterator
Array< OneD, boost::shared_ptr< InnerType > > m_data
Array< OneD, unsigned int > m_rowSizes
#define LIB_UTILITIES_EXPORT
InnerType::ConstGetValueType ConstGetValueType
bool operator==(const iterator_base< MatrixType > &rhs)
NekMatrix< InnerMatrixType, BlockMatrixTag > Transpose(NekMatrix< InnerMatrixType, BlockMatrixTag > &rhs)
NekMatrix< DataType, InnerMatrixType > InnerType
MatrixStorage m_storageType
unsigned int m_numberOfBlockRows
MatrixType::InnerType IteratorInnerType
iterator_base(MatrixType &m)
NekMatrix< InnerType, BlockMatrixTag > ThisType
iterator_base(const iterator_base< MatrixType > &rhs)
Array< OneD, unsigned int > m_columnSizes
InnerType::GetValueType GetValueType
iterator_base< const ThisType > const_iterator
iterator_base(MatrixType &m, unsigned int curRow, unsigned int curCol)
boost::shared_ptr< InnerType > m_nullBlockPtr
ConstMatrix< NumberType > BaseType
unsigned int m_storageSize
unsigned int m_numberOfBlockColumns