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 &&
183 _symmetrical = symmetrical;
230 static const std::string metaSeperator =
":";
231 return metaSeperator;
238 static const std::string dimensionsDelimiter =
"x";
239 return dimensionsDelimiter;
263 template<
class T>
inline
265 return _data.view(_numCols*i, _numCols);
268 template<
class T>
inline
270 return _data.view(_numCols*i, _numCols);
275 _data.resize(_numCols*numberOfRows);
276 _numRows = numberOfRows;
282 Array<T> newData(numberOfCols*_numRows);
283 size_type colLimit = (numberOfCols < _numCols ? numberOfCols : _numCols);
286 newData[i*numberOfCols+j] = _data[i*_numCols+j];
290 _numCols=numberOfCols;
296 std::stringstream numColsStream;
297 std::stringstream numRowsStream;
302 numRowsStream.str() +
304 numColsStream.str() +
312 std::string curString = string_in;
314 size_t curPos = curString.find(metaSeperator);
315 std::string dimString = curString.substr(0, curPos);
316 curString = curString.substr(curPos+1);
321 std::istringstream numRowsStream(dimString.substr(0,dimCharPos));
322 std::istringstream numColsStream(dimString.substr(dimCharPos+1));
323 size_t numRows, numCols;
324 numRowsStream >> numRows;
325 numColsStream >> numCols;
328 bool symmetrical =
false;
329 curPos = curString.find(metaSeperator);
330 if(curPos != std::string::npos){
332 curString = curString.substr(curPos+1);
336 Array<T> array = fromStringToArray<T>(curString);
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."
356 std::istringstream& operator>> (std::istringstream& in,
TwoDArray<T>& array){
364 template<
class T>
inline
365 std::ostream& operator<<(std::ostream& os,
const TwoDArray<T>& array){
366 return os << TwoDArray<T>::toString(array);
370 namespace TwoDDetails {
391 if(a1(i,j) != a2(i,j)){
418 bool 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();
452 size_t starPos = formatString.find(
"*");
453 std::string prefix = formatString.substr(0,starPos);
454 std::string postFix = formatString.substr(starPos+1);
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.
Partial specialization of ArrayView for const T.
Replacement for std::vector that is compatible with the Teuchos Memory Management classes.
Ordinal size_type
The type of Array sizes and capacities.
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.
static const std::string & getDimensionsDelimiter()
returns the string used as the dimension dilimeter when convering the TwoDArray to a string.
size_type getNumCols() const
returns the number of columns in the TwoDArray.
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.
const Array< T > & getDataArray() const
Returns the 1D array that is backing this TwoDArray.
TwoDArray()
Constructs an empty TwoDArray.
static TwoDArray< T > fromString(const std::string &string)
Converts a valid string to it's corresponding 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 const std::string & getMetaSeperator()
returns the string used to seperate meta information from actual data information when converting a T...
const T & operator()(size_type i, size_type j) const
Returns the element located at i,j.
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().
static std::string 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,...