/[escript]/trunk/escript/src/DataTypes.cpp
ViewVC logotype

Diff of /trunk/escript/src/DataTypes.cpp

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1734 by jfenwick, Thu Aug 28 06:11:56 2008 UTC revision 1773 by jfenwick, Tue Sep 9 02:52:26 2008 UTC
# Line 223  namespace DataTypes Line 223  namespace DataTypes
223                              ValueType::size_type otherOffset,                              ValueType::size_type otherOffset,
224                              const RegionLoopRangeType& region)                              const RegionLoopRangeType& region)
225     {     {
   
226        //        //
227        // Make sure views are not empty        // Make sure views are not empty
228    
# Line 235  namespace DataTypes Line 234  namespace DataTypes
234        //        //
235        // Check the view to be sliced from is compatible with the region to be sliced,        // Check the view to be sliced from is compatible with the region to be sliced,
236        // and that the region to be sliced is compatible with this view:        // and that the region to be sliced is compatible with this view:
   
237        EsysAssert(checkOffset(thisOffset,left.size(),noValues(leftShape)),        EsysAssert(checkOffset(thisOffset,left.size(),noValues(leftShape)),
238                   "Error - offset incompatible with this view.");                   "Error - offset incompatible with this view.");
239        EsysAssert(otherOffset+noValues(leftShape)<=other.size(),        EsysAssert(otherOffset+noValues(leftShape)<=other.size(),
# Line 319  namespace DataTypes Line 317  namespace DataTypes
317                                  ValueType::size_type otherOffset,                                  ValueType::size_type otherOffset,
318                                  const RegionLoopRangeType& region)                                  const RegionLoopRangeType& region)
319     {     {
   
320        //        //
321        // Make sure views are not empty        // Make sure views are not empty
322    
# Line 463  namespace DataTypes Line 460  namespace DataTypes
460    
461     }     }
462    
463       std::string
464       pointToString(const ValueType& data,const ShapeType& shape, int offset, const std::string& suffix)
465       {
466          using namespace std;
467          EsysAssert(data.size()>0,"Error - Data object is empty.");
468          stringstream temp;
469          string finalSuffix=suffix;
470          if (suffix.length() > 0) {
471             finalSuffix+=" ";
472          }
473          switch (getRank(shape)) {
474          case 0:
475             temp << finalSuffix << data[0];
476             break;
477          case 1:
478             for (int i=0;i<shape[0];i++) {
479                temp << finalSuffix << "(" << i <<  ") " << data[i+offset];
480                if (i!=(shape[0]-1)) {
481                   temp << endl;
482                }
483             }
484             break;
485          case 2:
486             for (int i=0;i<shape[0];i++) {
487                for (int j=0;j<shape[1];j++) {
488                   temp << finalSuffix << "(" << i << "," << j << ") " << data[offset+getRelIndex(shape,i,j)];
489                   if (!(i==(shape[0]-1) && j==(shape[1]-1))) {
490                      temp << endl;
491                   }
492                }
493             }
494             break;
495          case 3:
496             for (int i=0;i<shape[0];i++) {
497                for (int j=0;j<shape[1];j++) {
498                   for (int k=0;k<shape[2];k++) {
499                      temp << finalSuffix << "(" << i << "," << j << "," << k << ") " << data[offset+getRelIndex(shape,i,j,k)];
500                      if (!(i==(shape[0]-1) && j==(shape[1]-1) && k==(shape[2]-1))) {
501                         temp << endl;
502                      }
503                   }
504                }
505             }
506             break;
507          case 4:
508             for (int i=0;i<shape[0];i++) {
509                for (int j=0;j<shape[1];j++) {
510                   for (int k=0;k<shape[2];k++) {
511                      for (int l=0;l<shape[3];l++) {
512                         temp << finalSuffix << "(" << i << "," << j << "," << k << "," << l << ") " << data[offset+getRelIndex(shape,i,j,k,l)];
513                         if (!(i==(shape[0]-1) && j==(shape[1]-1) && k==(shape[2]-1) && l==(shape[3]-1))) {
514                            temp << endl;
515                         }
516                      }
517                   }
518                }
519             }
520             break;
521          default:
522             stringstream mess;
523             mess << "Error - (toString) Invalid rank: " << getRank(shape);
524             throw DataException(mess.str());
525          }
526          return temp.str();
527       }
528    
529    
530       void copyPoint(ValueType& dest, ValueType::size_type doffset, ValueType::size_type nvals, const ValueType& src, ValueType::size_type soffset)
531       {
532          EsysAssert((dest.size()>0&&src.size()>0&&checkOffset(doffset,dest.size(),nvals)),
533                     "Error - Couldn't copy due to insufficient storage.");
534    //       EsysAssert((checkShape(other.getShape())),
535    //                  createShapeErrorMessage("Error - Couldn't copy due to shape mismatch.",other.getShape(),m_shape));
536          if (checkOffset(doffset,dest.size(),nvals) && checkOffset(soffset,src.size(),nvals)) {
537             memcpy(&dest[doffset],&src[soffset],sizeof(double)*nvals);
538          } else {
539             throw DataException("Error - invalid offset specified.");
540          }
541    
542    
543    
544       }
545    
546  }   // end namespace DataTypes  }   // end namespace DataTypes
547  }   // end namespace escript  }   // end namespace escript

Legend:
Removed from v.1734  
changed lines
  Added in v.1773

  ViewVC Help
Powered by ViewVC 1.1.26