42#ifndef TEUCHOS_TWODARRAY_HPP
43#define TEUCHOS_TWODARRAY_HPP
89 _data(
Array<
T>(numCols*numRows, value)),
96 _numRows(0),_numCols(0),_data(
Array<
T>()),_symmetrical(
false){}
129 return _data[(
i*_numCols)+
j];
134 return _data[(
i*_numCols)+
j];
144 inline bool isEmpty(){
145 return _numRows == 0 &&
263template<
class T>
inline
265 return _data.view(_numCols*
i, _numCols);
268template<
class T>
inline
270 return _data.view(_numCols*
i, _numCols);
307 array.getDataArray().toString();
323 size_t numRows, numCols;
330 if(curPos != std::string::npos){
340 "Error: You've specified an TwoDArray as having the dimensions of "
341 << numRows <<
"x" << numCols <<
". This means you should have " <<
342 (numRows*numCols) <<
" entries specified in your array. However you "
343 "only specified " <<
array.size() <<
" entries."
364template<
class T>
inline
365std::ostream& operator<<(std::ostream& os,
const TwoDArray<T>& array){
366 return os << TwoDArray<T>::toString(array);
370namespace TwoDDetails {
382 if(a1.getNumRows() !=
a2.getNumRows() ||
383 a1.getNumRows() !=
a2.getNumRows())
389 for(
ST i=0;
i<a1.getNumRows(); ++
i){
390 for(
ST j=0;
j<a1.getNumCols()-a1.getNumRows()+
i; ++
j){
418bool operator==(
const TwoDArray<T> &a1,
const TwoDArray<T> &a2 ){
419 if(a1.isSymmetrical() != a2.isSymmetrical()){
422 if(a1.isSymmetrical()){
423 return TwoDDetails::symmetricCompare(a1,a2);
426 return a1.getDataArray() == a2.getDataArray() &&
427 a1.getNumRows() == a2.getNumRows() &&
428 a1.getNumCols() == a2.getNumCols();
443 return "TwoDArray(*)";
450 static std::string name(){
451 std::string
formatString = getTwoDArrayTypeNameTraitsFormat();
Templated array class derived from the STL std::vector.
bool symmetricCompare(const TwoDArray< T > &a1, const TwoDArray< T > &a2)
A function for comparing symmetrical arrarys.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
Smart reference counting pointer class for automatic garbage collection.
RCP(ENull null_arg=null)
Initialize RCP<T> to NULL.
A thin wrapper around the Array class which causes it to be interpreted as a 2D Array.
void resizeRows(size_type numberOfRows)
Changes the number of rows in the matrix.
const T & operator()(size_type i, size_type j) const
Returns the element located at i,j.
size_type getNumCols() const
returns the number of columns in the TwoDArray.
static const std::string & getDimensionsDelimiter()
returns the string used as the dimension dilimeter when convering the TwoDArray to a string.
T & operator()(size_type i, size_type j)
Returns the element located at i,j.
void resizeCols(size_type numberOfCols)
Changes the number of rows in the matrix.
void clear()
delets all the entries from the TwoDArray
size_type getNumRows() const
returns the number of rows in the TwoDArray.
std::string getTwoDArrayTypeNameTraitsFormat()
Get the format that is used for the specialization of the TypeName traits class for TwoDArray.
static const std::string & getMetaSeperator()
returns the string used to seperate meta information from actual data information when converting a T...
TwoDArray()
Constructs an empty TwoDArray.
static TwoDArray< T > fromString(const std::string &string)
Converts a valid string to it's corresponding TwoDArray.
const Array< T > & getDataArray() const
Returns the 1D array that is backing this TwoDArray.
bool isSymmetrical() const
A simple flag indicating whether or not this TwoDArray should be interpurted as symmetrical.
void setSymmetrical(bool symmetrical)
Sets whether or not the the TwoDArray should be interpurted as symetric.
static std::string toString(const TwoDArray< T > array)
Converts a given TwoDArray to a valid string representation.
TwoDArray(size_type numRows, size_type numCols, T value=T())
Constructs a TwoDArray with the given number of rows and columns with each entry being populated with...
ArrayView< T > operator[](size_type i)
Returns an ArrayView containing the contents of row i.
Default traits class that just returns typeid(T).name().
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...