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."
348 toReturn.setSymmetrical(symmetrical);
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);
464 #endif // TEUCHOS_TWODARRAY_H