9 #ifndef CSparseMatrixTemplate_H    10 #define CSparseMatrixTemplate_H    75                         else return it->second;
    81 #if defined(_DEBUG) || (MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)    91 #if defined(_DEBUG) || (MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)   115                 void getRow(
size_t nRow,std::vector<T> &vec)
 const      {
   116 #if defined(_DEBUG) || (MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)   117                         if (nRow>=
mRows) 
throw std::logic_error(
"Out of range");
   122                                 const std::pair<size_t,size_t> &
index=it->first;
   123                                 if (
index.first<nRow) 
continue;
   124                                 else if (
index.first==nRow)     {
   125                                         for (
size_t i=nextIndex;i<
index.second;i++) vec[i]=T();
   126                                         vec[
index.second]=it->second;
   127                                         nextIndex=
index.second+1;
   129                                         for (
size_t i=nextIndex;i<
mColumns;i++) vec[i]=T();
   140 #if defined(_DEBUG) || (MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)   141                         if (nCol>=
mColumns) 
throw std::logic_error(
"Out of range");
   146                                 const std::pair<size_t,size_t> &
index=it->first;
   147                                 if (
index.second==nCol) {
   148                                         for (
size_t i=nextIndex;i<
index.first;i++) vec[i]=T();
   149                                         vec[
index.first]=it->second;
   150                                         nextIndex=
index.first+1;
   153                         for (
size_t i=nextIndex;i<
mRows;i++) vec[i]=T();
   164                 template <
class MATRIX_LIKE>
   167                         for (
size_t nr=0;nr<mat.getRowCount();nr++)
   168                                 for (
size_t nc=0;nc<mat.getColCount();nc++)
   206                 void setRow(
size_t nRow,
const std::vector<T> &vec,
const T& nullObject=T())      {
   207 #if defined(_DEBUG) || (MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)   208                         if (nRow>=
mRows) 
throw std::logic_error(
"Out of range");
   211                         if (N!=
mColumns) 
throw std::logic_error(
"Wrong-sized vector");
   212                         for (
size_t i=0;i<N;i++)        {
   214                                 std::pair<size_t,size_t> 
index=std::make_pair(nRow,i);
   224                 void setColumn(
size_t nCol,
const std::vector<T> &vec,
const T& nullObject=T())   {
   225 #if defined(_DEBUG) || (MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)   226                         if (nCol>=
mColumns) 
throw std::logic_error(
"Out of range");
   229                         if (N!=
mRows) 
throw std::logic_error(
"Wrong-sized vector");
   230                         for (
size_t i=0;i<N;i++)        {
   232                                 std::pair<size_t,size_t> 
index=std::make_pair(i,nCol);
   245                         std::vector<std::pair<size_t,size_t> > toErase;
   247                                 const std::pair<size_t,size_t> &i=it->first;
   248                                 if (i.first>=nRows||i.second>=nCols) toErase.push_back(it->first);
   250                         for (std::vector<std::pair<size_t,size_t> >::
const_iterator it=toErase.begin();it!=toErase.end();++it) 
objectList.erase(*it);
   258 #if defined(_DEBUG) || (MRPT_ALWAYS_CHECKS_DEBUG_MATRICES)   259                         if (lastRow>=
mRows||lastColumn>=
mColumns) 
throw std::logic_error(
"Out of range");
   260                         if (firstRow>lastRow||firstColumn>lastColumn) 
throw std::logic_error(
"Invalid size");
   264                                 const std::pair<size_t,size_t> &i=it->first;
   265                                 if (i.first>=firstRow&&i.first<=lastRow&&i.second>=firstColumn&&i.second<=lastColumn) 
res(i.first-firstRow,i.second-firstColumn)=it->second;
   302                 inline bool isNull(
size_t nRow,
size_t nCol)
 const       {
   303                         if (nRow>=
mRows||nCol>=
mColumns) 
throw std::logic_error(
"Out of range");
   304                         return objectList.count(std::make_pair(nRow,nCol))==0;
   311                         if (nRow>=
mRows||nCol>=
mColumns) 
throw std::logic_error(
"Out of range");
   312                         return objectList.count(std::make_pair(nRow,nCol))>0;
   324                         std::vector<std::pair<size_t,size_t> > nulls;
   326                         for (std::vector<std::pair<size_t,size_t> >::
const_iterator it=nulls.begin();it!=nulls.end();++it) 
objectList.erase(*it);
   348                         if (
c<
r) std::swap(
r,
c); 
   351                         else return it->second;
   354                         if (
c<
r) std::swap(
r,
c); 
 void insertMatrix(size_t row, size_t column, const MATRIX_LIKE &mat)
Inserts submatrix at a given location. 
 
const_iterator begin() const
Returns an iterator which points to the starting point of the matrix. 
 
bool isNotNull(size_t nRow, size_t nCol) const
Checks whether an element of the matrix is not the default object. 
 
size_t getNullElements() const
Gets the amount of null elements inside the matrix. 
 
size_t getNonNullElements() const
Gets the amount of non-null elements inside the matrix. 
 
size_t getColCount() const
Returns the amount of columns in this matrix. 
 
void setColumn(size_t nCol, const std::vector< T > &vec, const T &nullObject=T())
Inserts a full column into the matrix. 
 
void insert(size_t row, size_t column, const T &obj)
Inserts an element into the matrix. 
 
const Scalar * const_iterator
 
SparseMatrixMap::const_iterator const_iterator
Const iterator to move through the matrix. 
 
T & operator()(size_t r, size_t c)
Reference access operator. 
 
GLsizei GLsizei GLuint * obj
 
CSparseSymmetricalMatrix(const CSparseSymmetricalMatrix &o)
 
A sparse matrix container (with cells of any type), with iterators. 
 
bool empty() const
Are there no elements set to !=0 ? 
 
void purge(T nullObject=T())
Checks each non-null elements against the basic objects, erasing unnecesary references to it...
 
size_t getRowCount() const
Returns the amount of rows in this matrix. 
 
CSparseMatrixTemplate(size_t nR, size_t nC)
Constructor with default size. 
 
T operator()(size_t r, size_t c) const
Element access operator. 
 
virtual ~CSparseSymmetricalMatrix()
 
SparseMatrixMap::const_reverse_iterator const_reverse_iterator
Const reverse iterator to move through the matrix. 
 
void getColumn(size_t nCol, std::vector< T > &vec) const
Extracts a full column from the matrix. 
 
CSparseMatrixTemplate()
Basic constructor with no data. 
 
size_t mRows
Size of the matrix. 
 
const_reverse_iterator rend() const
Returns an iterator which points to the starting point of the matrix, although it's the upper limit o...
 
void clear()
Completely removes all elements, although maintaining the matrix's size. 
 
CSparseSymmetricalMatrix(const CSparseMatrixTemplate< T > &o)
 
This is the global namespace for all Mobile Robot Programming Toolkit (MRPT) libraries. 
 
const_iterator end() const
Returns an iterator which points to the end of the matrix. 
 
bool isNull(size_t nRow, size_t nCol) const
Checks whether an element of the matrix is the default object. 
 
CSparseSymmetricalMatrix()
 
GLdouble GLdouble GLdouble r
 
T operator()(size_t r, size_t c) const
 
CSparseMatrixTemplate< T > operator()(size_t firstRow, size_t lastRow, size_t firstColumn, size_t lastColumn) const
Extracts a submatrix form the matrix. 
 
SparseMatrixMap objectList
Actual matrix. 
 
GLenum GLenum GLvoid * row
 
void resize(size_t nRows, size_t nCols)
Changes the size of the matrix. 
 
bool exists(size_t r, size_t c) const
Element access operator. 
 
std::map< std::pair< size_t, size_t >, T > SparseMatrixMap
Internal map type, used to store the actual matrix. 
 
void resize(size_t matrixSize)
 
const_reverse_iterator rbegin() const
Returns an iterator which points to the end of the matrix, and can be used to move backwards...
 
void getAsVector(std::vector< T > &vec) const
Gets a vector containing all the elements of the matrix, ignoring their position. ...
 
GLenum GLenum GLvoid GLvoid * column
 
void getRow(size_t nRow, std::vector< T > &vec) const
Extracts a full row from the matrix. 
 
void setRow(size_t nRow, const std::vector< T > &vec, const T &nullObject=T())
Inserts a full row into the matrix. 
 
T & operator()(size_t r, size_t c)
 
A sparse matrix container for square symmetrical content around the main diagonal.