00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00017 #ifndef WrappedArray_20081202_H
00018 #define WrappedArray_20081202_H
00019 #include "system_dep.h"
00020 #include "DataTypes.h"
00021 #include "boost/python/extract.hpp"
00022
00023 namespace escript
00024 {
00025
00026 class WrappedArray
00027 {
00028 public:
00029 WrappedArray(const boost::python::object& obj_in);
00030 unsigned int getRank() const;
00031 const DataTypes::ShapeType& getShape() const;
00032 double getElt() const;
00033 double getElt(unsigned int i) const;
00034 double getElt(unsigned int i, unsigned int j) const;
00035 double getElt(unsigned int i, unsigned int j, unsigned int k) const;
00036 double getElt(unsigned int i, unsigned int j, unsigned int k, unsigned int m) const;
00037 private:
00038 const boost::python::object& obj;
00039 int rank;
00040 escript::DataTypes::ShapeType shape;
00041 double m_scalar;
00042 };
00043
00044 inline unsigned int
00045 WrappedArray::getRank() const
00046 {
00047 return rank;
00048 }
00049
00050 inline const DataTypes::ShapeType&
00051 WrappedArray::getShape() const
00052 {
00053 return shape;
00054 }
00055
00056 inline double
00057 WrappedArray::getElt() const
00058 {
00059 return m_scalar;
00060 }
00061
00062
00063 inline double
00064 WrappedArray::getElt(unsigned int i) const
00065 {
00066 return boost::python::extract<double>(obj[i].attr("__float__")());
00067 }
00068
00069 inline
00070 double
00071 WrappedArray::getElt(unsigned int i, unsigned int j) const
00072 {
00073 return boost::python::extract<double>(obj[i][j].attr("__float__")());
00074 }
00075
00076 inline
00077 double
00078 WrappedArray::getElt(unsigned int i, unsigned int j, unsigned int k) const
00079 {
00080 return boost::python::extract<double>(obj[i][j][k].attr("__float__")());
00081 }
00082
00083 inline
00084 double
00085 WrappedArray::getElt(unsigned int i, unsigned int j, unsigned int k, unsigned int m) const
00086 {
00087 return boost::python::extract<double>(obj[i][j][k][m].attr("__float__")());
00088 }
00089
00090 }
00091
00092 #endif
00093