/[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

trunk/escript/src/DataVector.cpp revision 1811 by ksteube, Thu Sep 25 23:11:13 2008 UTC branches/arrexp_trunk2098/escript/src/DataVector.cpp revision 2119 by jfenwick, Tue Dec 2 06:06:04 2008 UTC
# Line 18  Line 18 
18  #include "DataException.h"  #include "DataException.h"
19  #include <boost/python/extract.hpp>  #include <boost/python/extract.hpp>
20  #include "DataTypes.h"  #include "DataTypes.h"
21    #include "WrappedArray.h"
22    
23  #include <cassert>  #include <cassert>
24    
# Line 36  void releaseUnusedMemory() Line 37  void releaseUnusedMemory()
37    
38    
39  DataVector::DataVector() :  DataVector::DataVector() :
   m_array_data(0),  
40    m_size(0),    m_size(0),
41    m_dim(0),    m_dim(0),
42    m_N(0)    m_N(0),
43      m_array_data(0)
44  {  {
45  }  }
46    
47  DataVector::DataVector(const DataVector& other) :  DataVector::DataVector(const DataVector& other) :
   m_array_data(0),  
48    m_size(other.m_size),    m_size(other.m_size),
49    m_dim(other.m_dim),    m_dim(other.m_dim),
50    m_N(other.m_N)    m_N(other.m_N),
51      m_array_data(0)
52  {  {
53    m_array_data = arrayManager.new_array(m_dim,m_N);    m_array_data = arrayManager.new_array(m_dim,m_N);
54    int i;    int i;
# Line 60  DataVector::DataVector(const DataVector& Line 61  DataVector::DataVector(const DataVector&
61  DataVector::DataVector(const DataVector::size_type size,  DataVector::DataVector(const DataVector::size_type size,
62                         const DataVector::value_type val,                         const DataVector::value_type val,
63                         const DataVector::size_type blockSize) :                         const DataVector::size_type blockSize) :
   m_array_data(0),  
64    m_size(size),    m_size(size),
65    m_dim(blockSize)    m_dim(blockSize),
66      m_array_data(0)
67  {  {
68    resize(size, val, blockSize);    resize(size, val, blockSize);
69  }  }
# Line 165  DataVector::operator!=(const DataVector& Line 166  DataVector::operator!=(const DataVector&
166    
167    
168  void  void
169    DataVector::copyFromArray(const WrappedArray& value)
170    {
171      using DataTypes::ValueType;
172      if (m_array_data!=0) {
173        arrayManager.delete_array(m_array_data);
174      }
175      DataTypes::ShapeType tempShape=value.getShape();
176      DataVector::size_type nelements=DataTypes::noValues(tempShape);
177    
178      m_array_data = arrayManager.new_array(1,nelements);
179    
180      int si=0,sj=0,sk=0,sl=0;      // bounds for each dimension of the shape
181    
182    
183      if (value.getRank()==0) {
184         m_array_data[0]=value.getElt();
185      } else if (value.getRank()==1) {
186         si=tempShape[0];
187         for (ValueType::size_type i=0;i<si;i++) {
188            m_array_data[i]=value.getElt(i);
189         }
190      } else if (value.getRank()==2) {
191        si=tempShape[0];
192        sj=tempShape[1];
193            for (ValueType::size_type i=0;i<si;i++) {
194               for (ValueType::size_type j=0;j<sj;j++) {
195                  m_array_data[DataTypes::getRelIndex(tempShape,i,j)]=value.getElt(i,j);
196               }
197            }
198      } else if (value.getRank()==3) {
199        si=tempShape[0];
200        sj=tempShape[1];
201        sk=tempShape[2];
202            for (ValueType::size_type i=0;i<si;i++) {
203               for (ValueType::size_type j=0;j<sj;j++) {
204                  for (ValueType::size_type k=0;k<sk;k++) {
205                     m_array_data[DataTypes::getRelIndex(tempShape,i,j,k)]=value.getElt(i,j,k);
206                  }
207               }
208            }
209      } else if (value.getRank()==4) {
210        si=tempShape[0];
211        sj=tempShape[1];
212        sk=tempShape[2];
213        sl=tempShape[3];
214            for (ValueType::size_type i=0;i<si;i++) {
215               for (ValueType::size_type j=0;j<sj;j++) {
216                  for (ValueType::size_type k=0;k<sk;k++) {
217                     for (ValueType::size_type l=0;l<sl;l++) {
218                        m_array_data[DataTypes::getRelIndex(tempShape,i,j,k,l)]=value.getElt(i,j,k,l);
219                     }
220                  }
221               }
222            }
223       }
224       m_size=nelements;    // total amount of elements
225       m_dim=m_size;        // elements per sample
226       m_N=1;           // number of samples
227    }
228    
229    void
230  DataVector::copyFromNumArray(const boost::python::numeric::array& value)  DataVector::copyFromNumArray(const boost::python::numeric::array& value)
231  {  {
232    using DataTypes::ValueType;    using DataTypes::ValueType;

Legend:
Removed from v.1811  
changed lines
  Added in v.2119

  ViewVC Help
Powered by ViewVC 1.1.26