00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef MLN_CORE_DPSITES_PITER_HH
00027 # define MLN_CORE_DPSITES_PITER_HH
00028
00033
00034 # include <vector>
00035 # include <mln/core/internal/site_relative_iterator_base.hh>
00036
00037
00038 namespace mln
00039 {
00040
00046 template <typename V>
00047 class dpsites_fwd_piter
00048 : public internal::site_relative_iterator_base< V, dpsites_fwd_piter<V> >
00049 {
00050 public:
00051
00056 template <typename P>
00057 dpsites_fwd_piter(const V& v, const P& c);
00058
00060 dpsites_fwd_piter();
00061
00063 bool is_valid_() const;
00064
00066 void invalidate_();
00067
00069 void do_start_();
00070
00072 void do_next_();
00073
00075 mln_psite(V) compute_p_() const;
00076
00077 protected:
00078
00079 unsigned i_;
00080 };
00081
00082
00088 template <typename V>
00089 class dpsites_bkd_piter :
00090 public internal::site_relative_iterator_base< V, dpsites_bkd_piter<V> >
00091 {
00092 public:
00093
00098 template <typename P>
00099 dpsites_bkd_piter(const V& v, const P& c);
00100
00102 dpsites_bkd_piter();
00103
00105 bool is_valid_() const;
00106
00108 void invalidate_();
00109
00111 void do_start_();
00112
00114 void do_next_();
00115
00117 mln_psite(V) compute_p_() const;
00118
00119 protected:
00120
00121 int i_;
00122 };
00123
00124
00125
00126 # ifndef MLN_INCLUDE_ONLY
00127
00128
00129
00130
00131 template <typename V>
00132 inline
00133 dpsites_fwd_piter<V>::dpsites_fwd_piter()
00134 {
00135 }
00136
00137 template <typename V>
00138 template <typename P>
00139 inline
00140 dpsites_fwd_piter<V>::dpsites_fwd_piter(const V& v, const P& c)
00141 {
00142 this->change_target(v);
00143 this->center_at(c);
00144 }
00145
00146 template <typename V>
00147 inline
00148 bool
00149 dpsites_fwd_piter<V>::is_valid_() const
00150 {
00151 return i_ != this->s_->std_vector().size();
00152 }
00153
00154 template <typename V>
00155 inline
00156 void
00157 dpsites_fwd_piter<V>::invalidate_()
00158 {
00159 i_ = this->s_->std_vector().size();
00160 }
00161
00162 template <typename V>
00163 inline
00164 void
00165 dpsites_fwd_piter<V>::do_start_()
00166 {
00167 i_ = 0;
00168 }
00169
00170 template <typename V>
00171 inline
00172 void
00173 dpsites_fwd_piter<V>::do_next_()
00174 {
00175 ++i_;
00176 }
00177
00178 template <typename V>
00179 inline
00180 mln_psite(V)
00181 dpsites_fwd_piter<V>::compute_p_() const
00182 {
00183 return *this->c_ + this->s_->std_vector()[i_];
00184 }
00185
00186
00187
00188
00189 template <typename V>
00190 inline
00191 dpsites_bkd_piter<V>::dpsites_bkd_piter()
00192 {
00193 }
00194
00195 template <typename V>
00196 template <typename P>
00197 inline
00198 dpsites_bkd_piter<V>::dpsites_bkd_piter(const V& v, const P& c)
00199 {
00200 this->change_target(v);
00201 this->center_at(c);
00202 }
00203
00204 template <typename V>
00205 inline
00206 bool
00207 dpsites_bkd_piter<V>::is_valid_() const
00208 {
00209 return i_ != -1;
00210 }
00211
00212 template <typename V>
00213 inline
00214 void
00215 dpsites_bkd_piter<V>::invalidate_()
00216 {
00217 i_ = -1;
00218 }
00219
00220 template <typename V>
00221 inline
00222 void
00223 dpsites_bkd_piter<V>::do_start_()
00224 {
00225 i_ = this->s_->std_vector().size() - 1;
00226 }
00227
00228 template <typename V>
00229 inline
00230 void
00231 dpsites_bkd_piter<V>::do_next_()
00232 {
00233 --i_;
00234 }
00235
00236 template <typename V>
00237 inline
00238 mln_psite(V)
00239 dpsites_bkd_piter<V>::compute_p_() const
00240 {
00241 return *this->c_ + this->s_->std_vector()[i_];
00242 }
00243
00244 # endif // ! MLN_INCLUDE_ONLY
00245
00246 }
00247
00248
00249 #endif // ! MLN_CORE_DPSITES_PITER_HH