44                                                unsigned int subDiags, 
unsigned int superDiags)
 
   51         if( diags != std::numeric_limits<unsigned int>::max() )
 
   55         else if( totalRows > 0 )
 
   71                                                         unsigned int totalColumns,
 
   72                                                         unsigned int row, 
unsigned int column,
 
   73                                                         unsigned int sub, 
unsigned int super)
 
   79             unsigned int elementColumn = column;
 
   85             return std::numeric_limits<unsigned int>::max();
 
   90     boost::tuples::tuple<unsigned int, unsigned int> 
 
   92             const unsigned int curRow, 
const unsigned int curColumn)
 
   94         unsigned int nextRow = curRow;
 
   95         unsigned int nextColumn = curColumn;
 
  117         return boost::tuples::tuple<unsigned int, unsigned int>(nextRow, nextColumn);
 
  128         return curColumn*totalRows + curRow;
 
  132     boost::tuples::tuple<unsigned int, unsigned int> 
 
  134             const unsigned int curRow, 
const unsigned int curColumn)
 
  136         unsigned int nextRow = curRow;
 
  137         unsigned int nextColumn = curColumn;
 
  139         if( nextRow < totalRows )
 
  144         if( nextRow >= totalRows )
 
  150         if( nextColumn >= totalColumns )
 
  152             nextRow = std::numeric_limits<unsigned int>::max();
 
  153             nextColumn = std::numeric_limits<unsigned int>::max();
 
  156         return boost::tuples::tuple<unsigned int, unsigned int>(nextRow, nextColumn);
 
  162         ASSERTL0(rows==columns, 
"Triangular matrices must be square.");
 
  163         return rows*(rows+1)/2;
 
  168         if( curRow <= curColumn )
 
  170             return curRow + curColumn*(curColumn+1)/2;
 
  174             return std::numeric_limits<unsigned int>::max();
 
  178     boost::tuples::tuple<unsigned int, unsigned int> 
 
  180             const unsigned int curRow, 
const unsigned int curColumn)
 
  182         ASSERTL1(totalRows == totalColumns, 
"Triangular matrices must be square.");
 
  183         ASSERTL1(curRow < totalRows, 
"Attemping to iterate through an element on row " +
 
  184             boost::lexical_cast<std::string>(curRow) + 
" of a (" +
 
  185             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  186             boost::lexical_cast<std::string>(totalColumns) + 
" upper triangular matrix.");
 
  187         ASSERTL1(curColumn < totalColumns, 
"Attemping to iterate through an element on row " +
 
  188             boost::lexical_cast<std::string>(curColumn) + 
" of a (" +
 
  189             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  190             boost::lexical_cast<std::string>(totalColumns) + 
" upper triangular matrix.");
 
  191         ASSERTL1(curRow <= curColumn, 
"Attemping to iterate through element (" +
 
  192             boost::lexical_cast<std::string>(curRow) + 
", " +
 
  193             boost::lexical_cast<std::string>(curColumn) + 
") of a (" +
 
  194             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  195             boost::lexical_cast<std::string>(totalColumns) + 
" upper triangular matrix.");
 
  197         unsigned int nextRow = curRow;
 
  198         unsigned int nextColumn = curColumn;
 
  200         if( nextRow <= nextColumn )
 
  205         if( nextRow > nextColumn )
 
  211         if( nextColumn >= totalColumns )
 
  213             nextRow = std::numeric_limits<unsigned int>::max();
 
  214             nextColumn = std::numeric_limits<unsigned int>::max();
 
  217         return boost::tuples::tuple<unsigned int, unsigned int>(nextRow, nextColumn);
 
  223         if( curRow >= curColumn )
 
  225             return curRow + (2*totalColumns - curColumn - 1)*(curColumn)/2;
 
  229             return std::numeric_limits<unsigned int>::max();
 
  233     boost::tuples::tuple<unsigned int, unsigned int> 
 
  235             const unsigned int curRow, 
const unsigned int curColumn,
 
  238         ASSERTL1(totalRows == totalColumns, 
"Triangular matrices must be square.");
 
  239         ASSERTL1(curRow < totalRows, 
"Attemping to iterate through an element on row " +
 
  240             boost::lexical_cast<std::string>(curRow) + 
" of a (" +
 
  241             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  242             boost::lexical_cast<std::string>(totalColumns) + 
" lower triangular matrix.");
 
  243         ASSERTL1(curColumn < totalColumns, 
"Attemping to iterate through an element on row " +
 
  244             boost::lexical_cast<std::string>(curColumn) + 
" of a (" +
 
  245             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  246             boost::lexical_cast<std::string>(totalColumns) + 
" lower triangular matrix.");
 
  247         ASSERTL1(curRow >= curColumn, 
"Attemping to iterate through element (" +
 
  248             boost::lexical_cast<std::string>(curRow) + 
", " +
 
  249             boost::lexical_cast<std::string>(curColumn) + 
") of a (" +
 
  250             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  251             boost::lexical_cast<std::string>(totalColumns) + 
" lower triangular matrix.");
 
  253         if( transpose == 
'T' )
 
  256                 totalColumns, totalRows, curColumn, curRow);
 
  259         unsigned int nextRow = curRow;
 
  260         unsigned int nextColumn = curColumn;
 
  262         if( nextRow < totalRows )
 
  267         if( nextRow >= totalRows )
 
  270             nextRow = nextColumn;
 
  273         if( nextColumn >= totalColumns )
 
  275             nextRow = std::numeric_limits<unsigned int>::max();
 
  276             nextColumn = std::numeric_limits<unsigned int>::max();
 
  279         return boost::tuples::tuple<unsigned int, unsigned int>(nextRow, nextColumn);
 
  285         if( curRow <= curColumn )
 
  287             return curRow + curColumn*(curColumn+1)/2;
 
  291             return curColumn + curRow*(curRow + 1)/2;
 
  295     boost::tuples::tuple<unsigned int, unsigned int> 
 
  297             const unsigned int curRow, 
const unsigned int curColumn)
 
  299         ASSERTL1(totalRows == totalColumns, 
"Symmetric matrices must be square.");
 
  300         ASSERTL1(curRow < totalRows, 
"Attemping to iterate through an element on row " +
 
  301             boost::lexical_cast<std::string>(curRow) + 
" of a (" +
 
  302             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  303             boost::lexical_cast<std::string>(totalColumns) + 
" symmetric matrix.");
 
  304         ASSERTL1(curColumn < totalColumns, 
"Attemping to iterate through an element on row " +
 
  305             boost::lexical_cast<std::string>(curColumn) + 
" of a (" +
 
  306             boost::lexical_cast<std::string>(totalRows) + 
", " +
 
  307             boost::lexical_cast<std::string>(totalColumns) + 
" symmetric matrix.");
 
  309         unsigned int nextRow = curRow;
 
  310         unsigned int nextColumn = curColumn;
 
  312         if( nextRow < totalRows )
 
  317         if( nextRow >= totalRows )
 
  323         if( nextColumn >= totalColumns )
 
  325             nextRow = std::numeric_limits<unsigned int>::max();
 
  326             nextColumn = std::numeric_limits<unsigned int>::max();
 
  329         return boost::tuples::tuple<unsigned int, unsigned int>(nextRow, nextColumn);
 
  332     boost::tuples::tuple<unsigned int, unsigned int> 
 
  334             const unsigned int curRow, 
const unsigned int curColumn)
 
  336         ASSERTL0(curRow == curColumn, 
"Iteration of a diagonal matrix is only valid along the diagonal.");
 
  338         unsigned int nextRow = curRow;
 
  339         unsigned int nextColumn = curColumn;
 
  341         if( nextRow < totalRows )
 
  347         if( nextRow >= totalRows )
 
  349             nextRow = std::numeric_limits<unsigned int>::max();
 
  350             nextColumn = std::numeric_limits<unsigned int>::max();
 
  353         return boost::tuples::tuple<unsigned int, unsigned int>(nextRow, nextColumn);
 
  358         ASSERTL0(rows==columns, 
"Diagonal matrices must be square.");
 
  370             return std::numeric_limits<unsigned int>::max();
 
  375                                                                      unsigned int nSubSuperDiags)
 
  377         ASSERTL0(rows==columns, 
"Triangular matrices must be square.");
 
  378         return (nSubSuperDiags+1)*columns;
 
  382                                                             unsigned int nSuperDiags)
 
  384         if( curRow <= curColumn )
 
  386             if( (curColumn - curRow) <= nSuperDiags )
 
  388                 unsigned int elementRow = nSuperDiags - (curColumn - curRow);
 
  389                 unsigned int elementColumn = curColumn;
 
  391                 return elementRow + elementColumn*(nSuperDiags+1);
 
  395                 return std::numeric_limits<unsigned int>::max();
 
#define ASSERTL0(condition, msg)
 
static unsigned int CalculateIndex(unsigned int totalRows, unsigned int totalColumns, unsigned int row, unsigned int column, unsigned int sub, unsigned int super)
 
static unsigned int CalculateIndex(unsigned int curRow, unsigned int curColumn, unsigned int nSuperDiags)
 
static unsigned int CalculateIndex(unsigned int curRow, unsigned int curColumn)
 
static unsigned int CalculateNumberOfDiags(unsigned int totalRows, unsigned int diags)
 
static unsigned int GetRequiredStorageSize(unsigned int rows, unsigned int columns)
 
static unsigned int CalculateIndex(unsigned int totalColumns, unsigned int curRow, unsigned int curColumn)
 
static unsigned int GetRequiredStorageSize(unsigned int rows, unsigned int columns)
 
static boost::tuples::tuple< unsigned int, unsigned int > Advance(const unsigned int totalRows, const unsigned int totalColumns, const unsigned int curRow, const unsigned int curColumn)
 
static boost::tuples::tuple< unsigned int, unsigned int > Advance(const unsigned int totalRows, const unsigned int totalColumns, const unsigned int curRow, const unsigned int curColumn)
 
static unsigned int GetRequiredStorageSize(unsigned int rows, unsigned int columns, unsigned int nSubSuperDiags)
 
static unsigned int CalculateIndex(unsigned int curRow, unsigned int curColumn)
 
static unsigned int GetRequiredStorageSize(unsigned int rows, unsigned int columns)
 
static unsigned int CalculateIndex(unsigned int row, unsigned int col)
 
static boost::tuples::tuple< unsigned int, unsigned int > Advance(const unsigned int totalRows, const unsigned int totalColumns, const unsigned int curRow, const unsigned int curColumn, char transpose= 'N')
 
static unsigned int CalculateIndex(unsigned int totalRows, unsigned int totalColumns, unsigned int curRow, unsigned int curColumn)
 
static boost::tuples::tuple< unsigned int, unsigned int > Advance(const unsigned int totalRows, const unsigned int totalColumns, const unsigned int curRow, const unsigned int curColumn)
 
static boost::tuples::tuple< unsigned int, unsigned int > Advance(const unsigned int totalRows, const unsigned int totalColumns, const unsigned int curRow, const unsigned int curColumn)
 
#define ASSERTL1(condition, msg)
Assert Level 1 – Debugging which is used whether in FULLDEBUG or DEBUG compilation mode...
 
static unsigned int CalculateNumberOfRows(unsigned int totalRows, unsigned int subDiags, unsigned int superDiags)
 
static boost::tuples::tuple< unsigned int, unsigned int > Advance(const unsigned int totalRows, const unsigned int totalColumns, const unsigned int curRow, const unsigned int curColumn)
 
static unsigned int GetRequiredStorageSize(unsigned int totalRows, unsigned int totalColumns, unsigned int subDiags, unsigned int superDiags)
Calculates and returns the storage size required.