/[escript]/branches/arrexp_2137_win_merge/escript/src/DataVector.cpp
ViewVC logotype

Diff of /branches/arrexp_2137_win_merge/escript/src/DataVector.cpp

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

revision 1388 by trankine, Fri Jan 11 07:45:58 2008 UTC revision 1796 by jfenwick, Wed Sep 17 01:45:46 2008 UTC
# Line 17  Line 17 
17    
18  #include "Taipan.h"  #include "Taipan.h"
19  #include "DataException.h"  #include "DataException.h"
20    #include <boost/python/extract.hpp>
21    #include "DataTypes.h"
22    
23  #include <cassert>  #include <cassert>
24    
25  using namespace std;  using namespace std;
26  using namespace escript;  using namespace escript;
27    using namespace boost::python;
28    
29  namespace escript {  namespace escript {
30    
# Line 161  DataVector::operator!=(const DataVector& Line 164  DataVector::operator!=(const DataVector&
164    return !(*this==other);    return !(*this==other);
165  }  }
166    
 int  
 DataVector::archiveData(ofstream& archiveFile,  
                         const size_type noValues) const  
 {  
   //  
   // Check number of values expected to be written matches number in this object  
   if (noValues != size()) {  
     return 2;  
   }  
   
   //  
   // Write all values in this object out to archiveFile  
   for (int i=0; i<size(); i++) {  
     archiveFile.write(reinterpret_cast<char *>(&m_array_data[i]),sizeof(double));  
   }  
   
   //  
   // Check no errors were encountered before returning  
   if (!archiveFile.good()) {  
     return 1;  
   }  
   
   return 0;  
 }  
167    
168  int  void
169  DataVector::extractData(ifstream& archiveFile,  DataVector::copyFromNumArray(const boost::python::numeric::array& value)
                         const size_type noValues)  
170  {  {
171    //    using DataTypes::ValueType;
172    // Check number of values expected to be read matches number in this object    if (m_array_data!=0) {
173    if (noValues != size()) {      arrayManager.delete_array(m_array_data);
     return 2;  
174    }    }
175    
   //  
   // Read all values in archiveFile back to this object  
   for (int i=0; i<size(); i++) {  
     archiveFile.read(reinterpret_cast<char *>(&m_array_data[i]),sizeof(double));  
   }  
176    
177    //    m_array_data = arrayManager.new_array(1,value.nelements());
   // Check no errors were encountered before returning  
   if (!archiveFile.good()) {  
     return 1;  
   }  
178    
179    return 0;    int si=0,sj=0,sk=0,sl=0;      // bounds for each dimension of the shape
180      DataTypes::ShapeType tempShape;    
181      for (int i=0; i<value.getrank(); i++) {
182         tempShape.push_back(extract<int>(value.getshape()[i]));
183      }
184    
185      if (value.getrank()==0) {
186         m_array_data[0]=extract<double>(value[value.getshape()]);
187      } else if (value.getrank()==1) {
188         si=tempShape[0];
189         for (ValueType::size_type i=0;i<si;i++) {
190            m_array_data[i]=extract<double>(value[i]);
191         }
192      } else if (value.getrank()==2) {
193        si=tempShape[0];
194        sj=tempShape[1];
195            for (ValueType::size_type i=0;i<si;i++) {
196               for (ValueType::size_type j=0;j<sj;j++) {
197                  m_array_data[DataTypes::getRelIndex(tempShape,i,j)]=extract<double>(value[i][j]);
198               }
199            }
200      } else if (value.getrank()==3) {
201        si=tempShape[0];
202        sj=tempShape[1];
203        sk=tempShape[2];
204            for (ValueType::size_type i=0;i<si;i++) {
205               for (ValueType::size_type j=0;j<sj;j++) {
206                  for (ValueType::size_type k=0;k<sk;k++) {
207                     m_array_data[DataTypes::getRelIndex(tempShape,i,j,k)]=extract<double>(value[i][j][k]);
208                  }
209               }
210            }
211      } else if (value.getrank()==4) {
212        si=tempShape[0];
213        sj=tempShape[1];
214        sk=tempShape[2];
215        sl=tempShape[3];
216            for (ValueType::size_type i=0;i<si;i++) {
217               for (ValueType::size_type j=0;j<sj;j++) {
218                  for (ValueType::size_type k=0;k<sk;k++) {
219                     for (ValueType::size_type l=0;l<sl;l++) {
220                        m_array_data[DataTypes::getRelIndex(tempShape,i,j,k,l)]=extract<double>(value[i][j][k][l]);
221                     }
222                  }
223               }
224            }
225       }
226       m_size=value.nelements();    // total amount of elements
227       m_dim=m_size;        // elements per sample
228       m_N=1;           // number of samples
229  }  }
230    
231    
232    
233  } // end of namespace  } // end of namespace

Legend:
Removed from v.1388  
changed lines
  Added in v.1796

  ViewVC Help
Powered by ViewVC 1.1.26