/[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 2111 by jfenwick, Mon Dec 1 01:16:18 2008 UTC revision 2124 by jfenwick, Wed Dec 3 03:33:34 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 163  DataVector::operator!=(const DataVector& Line 164  DataVector::operator!=(const DataVector&
164    return !(*this==other);    return !(*this==other);
165  }  }
166    
167    void
168    DataVector::copyFromArrayToOffset(const WrappedArray& value, size_type offset)
169    {
170      using DataTypes::ValueType;
171      const DataTypes::ShapeType& tempShape=value.getShape();
172      size_type len=DataTypes::noValues(tempShape);
173      if (offset+len>size())
174      {
175    cerr << "offset=" << offset << " len=" << len << " >= " << size() << endl;
176         throw DataException("Error - not enough room for that DataPoint at that offset.");
177      }
178      size_t si=0,sj=0,sk=0,sl=0;
179      switch (value.getRank())
180      {
181      case 0:
182        m_array_data[offset]=value.getElt();
183        break;
184      case 1:
185        for (size_t i=0;i<tempShape[0];++i)
186        {
187          m_array_data[offset+i]=value.getElt(i);
188        }
189        break;
190      case 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[offset+DataTypes::getRelIndex(tempShape,i,j)]=value.getElt(i,j);
196               }
197            }
198        break;
199      case 3:
200        si=tempShape[0];
201        sj=tempShape[1];
202        sk=tempShape[2];
203            for (ValueType::size_type i=0;i<si;i++) {
204               for (ValueType::size_type j=0;j<sj;j++) {
205                  for (ValueType::size_type k=0;k<sk;k++) {
206                     m_array_data[offset+DataTypes::getRelIndex(tempShape,i,j,k)]=value.getElt(i,j,k);
207                  }
208               }
209            }
210        break;
211      case 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[offset+DataTypes::getRelIndex(tempShape,i,j,k,l)]=value.getElt(i,j,k,l);
221                     }
222                  }
223               }
224            }
225        break;
226      default:
227        ostringstream oss;
228        oss << "Error - unknown rank. Rank=" << value.getRank();
229        throw DataException(oss.str());
230      }
231    }
232    
233    
234    void
235    DataVector::copyFromArray(const WrappedArray& value)
236    {
237      using DataTypes::ValueType;
238      if (m_array_data!=0) {
239        arrayManager.delete_array(m_array_data);
240      }
241      DataTypes::ShapeType tempShape=value.getShape();
242      DataVector::size_type nelements=DataTypes::noValues(tempShape);
243      m_array_data = arrayManager.new_array(1,nelements);
244      m_size=nelements; // total amount of elements
245      m_dim=m_size;     // elements per sample
246      m_N=1;            // number of samples
247      copyFromArrayToOffset(value,0);
248    }
249    
250  void  void
251  DataVector::copyFromNumArray(const boost::python::numeric::array& value)  DataVector::copyFromNumArray(const boost::python::numeric::array& value)

Legend:
Removed from v.2111  
changed lines
  Added in v.2124

  ViewVC Help
Powered by ViewVC 1.1.26