Go to the documentation of this file.00001
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
00013 #define CoeffItIncrOp_D 0
00014
00015 namespace concepts {
00016
00017
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 }
00149
00150 #endif // coeffIterator_hh