Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)

toolbox/coeffIterator.hh
Go to the documentation of this file.
00001 /* iterator over array of coefficients
00002  */
00003 
00004 #ifndef coeffIterator_hh
00005 #define coeffIterator_hh
00006 
00007 #include "basics/typedefs.hh"
00008 #include "basics/exceptions.hh"
00009 #include "basics/vectorsMatrices.hh"
00010 #include "basics/debug.hh"
00011 
00012 // debugging
00013 #define CoeffItIncrOp_D 0
00014 
00015 namespace concepts {
00016 
00017   // ********************************************************* CoeffIterator **
00018 
00035   template<typename F, typename Coeff>
00036   class CoeffIterator;
00037 
00043   template<typename F>
00044   class CoeffIterator<F, F> {
00045   public:
00046     CoeffIterator(const F* data) : data_(data) {}
00047     const F* operator++() { return ++data_; }
00048     inline const F* operator++(int) { return data_++; }
00049   private:
00050     const F* data_;
00051   };
00052 
00058   template<typename F, int dim>
00059   class CoeffIterator<F, Point<F,dim> >
00060   {
00061   public:
00063     CoeffIterator(const Point<F,dim>* data, int i = 0) : data_(data), i_(i) {}
00065     inline const F* operator++();
00067     inline const F* operator++(int);
00069     inline const F* data();
00070   private:
00072     const Point<F,dim>* data_;    
00074     const int i_;
00075   };
00076 
00077   template<typename F, int dim>
00078   const F* CoeffIterator<F, Point<F,dim> >::operator++()
00079   {
00080     ++data_;
00081     DEBUGL(CoeffItIncrOp_D, '(' << i_ << ") is "
00082            << *this->data() << " at " << this->data());
00083     return this->data();
00084   }
00085 
00086   template<typename F, int dim>
00087   const F* CoeffIterator<F, Point<F,dim> >::operator++(int)
00088   {
00089     const F* tmp = this->data();
00090     ++data_;
00091     return tmp;
00092   }
00093 
00094   template<typename F, int dim>
00095   const F* CoeffIterator<F, Point<F,dim> >::data()
00096   {
00097     return &(data_->operator[](i_));
00098   }
00099 
00105   template<typename F, int dim>
00106   class CoeffIterator<F, Mapping<F,dim> >
00107  {
00108   public:
00110     CoeffIterator(const Mapping<F,dim>* data, uint i = 0, uint j = 0) :
00111       data_(data), i_(i), j_(j) {}
00113     inline const F* operator++();
00115     inline const F* operator++(int);
00117     inline const F* data();
00118   private:
00120     const Mapping<F,dim>* data_;
00121     const uint i_;
00122     const uint j_;
00123   };
00124 
00125   template<typename F, int dim>
00126   const F* CoeffIterator<F, Mapping<F,dim> >::operator++()
00127   {
00128     ++data_;
00129     DEBUGL(CoeffItIncrOp_D, '(' << i_ << ", " << j_ << ") is "
00130            << *this->data() << " at " << this->data());
00131     return this->data();
00132   }
00133 
00134   template<typename F, int dim>
00135   const F* CoeffIterator<F, Mapping<F,dim> >::operator++(int)
00136   {
00137     const F* tmp = this->data();
00138     ++data_;
00139     return tmp;
00140   }
00141 
00142   template<typename F, int dim>
00143   const F* CoeffIterator<F, Mapping<F,dim> >::data()
00144   {
00145     return &(data_->operator()(i_, j_));
00146   }
00147 
00148 } // namespace
00149 
00150 #endif // coeffIterator_hh

Home | Doxygen Documentation | Tutorials | Developer Tools (restricted)