2360: Update graph neighborhood piters.

* mln/core/image/graph_neighborhood_piter.hh (mln::graph_neighborhood_fwd_piter<P, N>) (mln::graph_neighborhood_bkd_piter<P, N>): Adjust to the new interface of internal::graph_vicinity_piter_. (mln::graph_neighborhood_fwd_piter<P, N>::super_) (mln::graph_neighborhood_bkd_piter<P, N>::super_): Adjust. (mln::graph_neighborhood_fwd_piter<P, N>::psite) (mln::graph_neighborhood_bkd_piter<P, N>::psite): New typedefs. (mln::graph_neighborhood_fwd_piter<P, N>::graph_neighborhood_fwd_piter) (mln::graph_neighborhood_bkd_piter<P, N>::graph_neighborhood_bkd_piter): New default ctors. (graph_neighborhood_fwd_piter(const Neighborhood<N>&, const Point_Site<Pref>&)) (graph_neighborhood_bkd_piter(const Neighborhood<N>&, const Point_Site<Pref>&)): Turn ctors into... (graph_neighborhood_fwd_piter(const Neighborhood<N>&, const Pref&)) (graph_neighborhood_bkd_piter(const Neighborhood<N>&, const Pref&)): ...these. Adjust. (mln::graph_neighborhood_fwd_piter<P, N>::is_valid) (mln::graph_neighborhood_fwd_piter<P, N>::invalidate) (mln::graph_neighborhood_fwd_piter<P, N>::start) (mln::graph_neighborhood_fwd_piter<P, N>::next_) (mln::graph_neighborhood_bkd_piter<P, N>::is_valid) (mln::graph_neighborhood_bkd_piter<P, N>::invalidate) (mln::graph_neighborhood_bkd_piter<P, N>::start) (mln::graph_neighborhood_bkd_piter<P, N>::next_): Catch up with the new interface of internal::graph_vicinity_piter_. Rename as... (mln::graph_neighborhood_fwd_piter<P, N>::is_valid_) (mln::graph_neighborhood_fwd_piter<P, N>::invalidate_) (mln::graph_neighborhood_fwd_piter<P, N>::do_start_) (mln::graph_neighborhood_fwd_piter<P, N>::do_next_) (mln::graph_neighborhood_bkd_piter<P, N>::is_valid_) (mln::graph_neighborhood_bkd_piter<P, N>::invalidate_) (mln::graph_neighborhood_bkd_piter<P, N>::do_start_) (mln::graph_neighborhood_bkd_piter<P, N>::do_next_): ...these. (mln::graph_neighborhood_fwd_piter<P, N>::compute_sites_) (mln::graph_neighborhood_bkd_piter<P, N>::compute_sites_): New methods. (mln::graph_neighborhood_fwd_piter<P, N>::nbh_) (mln::graph_neighborhood_bkd_piter<P, N>::nbh_): Remove attributes. --- milena/ChangeLog | 51 +++++++ milena/mln/core/image/graph_neighborhood_piter.hh | 166 +++++++++------------ 2 files changed, 119 insertions(+), 98 deletions(-) diff --git a/milena/ChangeLog b/milena/ChangeLog index 5ef0f52..a2e7ce6 100644 --- a/milena/ChangeLog +++ b/milena/ChangeLog @@ -1,5 +1,56 @@ 2008-09-22 Roland Levillain <roland@lrde.epita.fr> + Update graph neighborhood piters. + + * mln/core/image/graph_neighborhood_piter.hh + (mln::graph_neighborhood_fwd_piter<P, N>) + (mln::graph_neighborhood_bkd_piter<P, N>): + Adjust to the new interface of internal::graph_vicinity_piter_. + (mln::graph_neighborhood_fwd_piter<P, N>::super_) + (mln::graph_neighborhood_bkd_piter<P, N>::super_): + Adjust. + (mln::graph_neighborhood_fwd_piter<P, N>::psite) + (mln::graph_neighborhood_bkd_piter<P, N>::psite): + New typedefs. + (mln::graph_neighborhood_fwd_piter<P, N>::graph_neighborhood_fwd_piter) + (mln::graph_neighborhood_bkd_piter<P, N>::graph_neighborhood_bkd_piter): + New default ctors. + (graph_neighborhood_fwd_piter(const Neighborhood<N>&, const Point_Site<Pref>&)) + (graph_neighborhood_bkd_piter(const Neighborhood<N>&, const Point_Site<Pref>&)): + Turn ctors into... + (graph_neighborhood_fwd_piter(const Neighborhood<N>&, const Pref&)) + (graph_neighborhood_bkd_piter(const Neighborhood<N>&, const Pref&)): + ...these. + Adjust. + (mln::graph_neighborhood_fwd_piter<P, N>::is_valid) + (mln::graph_neighborhood_fwd_piter<P, N>::invalidate) + (mln::graph_neighborhood_fwd_piter<P, N>::start) + (mln::graph_neighborhood_fwd_piter<P, N>::next_) + (mln::graph_neighborhood_bkd_piter<P, N>::is_valid) + (mln::graph_neighborhood_bkd_piter<P, N>::invalidate) + (mln::graph_neighborhood_bkd_piter<P, N>::start) + (mln::graph_neighborhood_bkd_piter<P, N>::next_): + Catch up with the new interface of + internal::graph_vicinity_piter_. + Rename as... + (mln::graph_neighborhood_fwd_piter<P, N>::is_valid_) + (mln::graph_neighborhood_fwd_piter<P, N>::invalidate_) + (mln::graph_neighborhood_fwd_piter<P, N>::do_start_) + (mln::graph_neighborhood_fwd_piter<P, N>::do_next_) + (mln::graph_neighborhood_bkd_piter<P, N>::is_valid_) + (mln::graph_neighborhood_bkd_piter<P, N>::invalidate_) + (mln::graph_neighborhood_bkd_piter<P, N>::do_start_) + (mln::graph_neighborhood_bkd_piter<P, N>::do_next_): + ...these. + (mln::graph_neighborhood_fwd_piter<P, N>::compute_sites_) + (mln::graph_neighborhood_bkd_piter<P, N>::compute_sites_): + New methods. + (mln::graph_neighborhood_fwd_piter<P, N>::nbh_) + (mln::graph_neighborhood_bkd_piter<P, N>::nbh_): + Remove attributes. + +2008-09-22 Roland Levillain <roland@lrde.epita.fr> + Update graph window piters. * mln/core/image/graph_window_piter.hh diff --git a/milena/mln/core/image/graph_neighborhood_piter.hh b/milena/mln/core/image/graph_neighborhood_piter.hh index b83099a..a39128f 100644 --- a/milena/mln/core/image/graph_neighborhood_piter.hh +++ b/milena/mln/core/image/graph_neighborhood_piter.hh @@ -46,39 +46,42 @@ namespace mln template <typename P, typename N> class graph_neighborhood_fwd_piter : - public internal::graph_vicinity_piter_< P, + public internal::graph_vicinity_piter_< P, N, graph_neighborhood_fwd_piter<P, N> > { typedef graph_neighborhood_fwd_piter<P, N> self_; - typedef internal::graph_vicinity_piter_<P, self_> super_; + typedef internal::graph_vicinity_piter_<P, N, self_> super_; + + public: + /// The Point_Site type. + typedef mln_psite(N) psite; public: /// Construction. /// \{ + graph_neighborhood_fwd_piter(); template <typename Pref> graph_neighborhood_fwd_piter(const Neighborhood<N>& nbh, - const Point_Site<Pref>& p_ref); + const Pref& p_ref); /// \} /// Manipulation. /// \{ /// Test if the iterator is valid. - bool is_valid() const; + bool is_valid_() const; /// Invalidate the iterator. - void invalidate(); - /// Start an iteration. - void start(); + void invalidate_(); + /// Start an iteration. + void do_start_(); /// Go to the next point. - void next_(); - /// Update the internal data of the iterator. - void update_(); + void do_next_(); + + /// Compute the current psite. + psite compute_p_() const; /// \} private: - /// The neighborhood. - const N& nbh_; - /// An iterator on the set of adjacent edges. typename super_::sites_t::const_iterator i_; }; @@ -90,39 +93,41 @@ namespace mln template <typename P, typename N> class graph_neighborhood_bkd_piter : - public internal::graph_vicinity_piter_< P, + public internal::graph_vicinity_piter_< P, N, graph_neighborhood_bkd_piter<P, N> > { typedef graph_neighborhood_bkd_piter<P, N> self_; - typedef internal::graph_vicinity_piter_<P, self_> super_; + typedef internal::graph_vicinity_piter_<P, N, self_> super_; + + /// The Point_Site type. + typedef mln_psite(N) psite; public: /// Construction. /// \{ + graph_neighborhood_bkd_piter(); template <typename Pref> graph_neighborhood_bkd_piter(const Neighborhood<N>& nbh, - const Point_Site<Pref>& p_ref); + const Pref& p_ref); /// \} /// Manipulation. /// \{ /// Test if the iterator is valid. - bool is_valid() const; + bool is_valid_() const; /// Invalidate the iterator. - void invalidate(); - /// Start an iteration. - void start(); + void invalidate_(); + /// Start an iteration. + void do_start_(); /// Go to the next point. - void next_(); - /// Update the internal data of the iterator. - void update_(); + void do_next_(); + + /// Compute the current psite. + psite compute_p_() const; /// \} private: - /// The neighborhood. - const N& nbh_; - /// An iterator on the set of adjacent edges. typename super_::sites_t::const_reverse_iterator i_; }; @@ -136,36 +141,33 @@ namespace mln `-------------------------------------*/ template <typename P, typename N> + inline + graph_neighborhood_fwd_piter<P, N>::graph_neighborhood_fwd_piter() + { + } + + template <typename P, typename N> template <typename Pref> inline graph_neighborhood_fwd_piter<P, N>::graph_neighborhood_fwd_piter(const Neighborhood<N>& nbh, - const Point_Site<Pref>& p_ref) - : super_(p_ref), - nbh_(exact(nbh)) + const Pref& p_ref) + : super_(p_ref) { - // Invalidate i_. - invalidate(); + this->change_target(exact(nbh)); } template <typename P, typename N> inline bool - graph_neighborhood_fwd_piter<P, N>::is_valid() const + graph_neighborhood_fwd_piter<P, N>::is_valid_() const { - return - // The reference point must be valid... - this->p_ref_.is_valid() - // ...and must not have changed since the neighborhood has been - // computed... - && this->p_ref_ == this->saved_p_ref_ - // ...and the iterator i_ must point a valid value. - && i_ != this->sites_.end(); + return i_ != this->sites_.end(); } template <typename P, typename N> inline void - graph_neighborhood_fwd_piter<P, N>::invalidate() + graph_neighborhood_fwd_piter<P, N>::invalidate_() { i_ = this->sites_.end(); } @@ -173,41 +175,26 @@ namespace mln template <typename P, typename N> inline void - graph_neighborhood_fwd_piter<P, N>::start() + graph_neighborhood_fwd_piter<P, N>::do_start_() { - mln_precondition(this->p_ref_.is_valid()); - // Update the neighbors, if needed. - if (!this->saved_p_ref_.is_valid() || this->p_ref_ != this->saved_p_ref_) - { - this->saved_p_ref_ = this->p_ref_; - nbh_.compute_sites_(*this); - } + this->site_set().compute_sites_(*this); i_ = this->sites_.begin(); - // FIXME: We might move the is_valid condition within update_. - if (is_valid()) - update_(); } template <typename P, typename N> inline void - graph_neighborhood_fwd_piter<P, N>::next_() + graph_neighborhood_fwd_piter<P, N>::do_next_() { - // Ensure the p_ref_ has not changed. - mln_precondition(this->p_ref_ == this->saved_p_ref_); ++i_; - // FIXME: We might move the is_valid condition within update_. - if (is_valid()) - update_(); } template <typename P, typename N> inline - void - graph_neighborhood_fwd_piter<P, N>::update_() + mln_psite(N) + graph_neighborhood_fwd_piter<P, N>::compute_p_() const { - // Update psite_. - this->psite_ = graph_psite<P>(this->pg(), *i_); + return graph_psite<P>(this->center().site_set(), *i_); } @@ -216,36 +203,33 @@ namespace mln `-------------------------------------*/ template <typename P, typename N> + inline + graph_neighborhood_bkd_piter<P, N>::graph_neighborhood_bkd_piter() + { + } + + template <typename P, typename N> template <typename Pref> inline graph_neighborhood_bkd_piter<P, N>::graph_neighborhood_bkd_piter(const Neighborhood<N>& nbh, - const Point_Site<Pref>& p_ref) - : super_(p_ref), - nbh_(exact(nbh)) + const Pref& p_ref) + : super_(p_ref) { - // Invalidate i_. - invalidate(); + this->change_target(exact(nbh)); } template <typename P, typename N> inline bool - graph_neighborhood_bkd_piter<P, N>::is_valid() const + graph_neighborhood_bkd_piter<P, N>::is_valid_() const { - return - // The reference point must be valid... - this->p_ref_.is_valid() - // ...and must not have changed since the neighborhood has been - // computed... - && this->p_ref_ == this->saved_p_ref_ - // ...and the iterator i_ must point a valid value. - && i_ != this->sites_.rend(); + return i_ != this->sites_.rend(); } template <typename P, typename N> inline void - graph_neighborhood_bkd_piter<P, N>::invalidate() + graph_neighborhood_bkd_piter<P, N>::invalidate_() { i_ = this->sites_.rend(); } @@ -253,43 +237,29 @@ namespace mln template <typename P, typename N> inline void - graph_neighborhood_bkd_piter<P, N>::start() + graph_neighborhood_bkd_piter<P, N>::do_start_() { - mln_precondition(this->p_ref_.is_valid()); - // Update the neighbors, if needed. - if (!this->saved_p_ref_.is_valid() || this->p_ref_ != this->saved_p_ref_) - { - this->saved_p_ref_ = this->p_ref_; - nbh_.compute_sites_(*this); - } + this->site_set().compute_sites_(*this); i_ = this->sites_.rbegin(); - // FIXME: We might move the is_valid condition within update_. - if (is_valid()) - update_(); } template <typename P, typename N> inline void - graph_neighborhood_bkd_piter<P, N>::next_() + graph_neighborhood_bkd_piter<P, N>::do_next_() { - // Ensure the p_ref_ has not changed. - mln_precondition(this->p_ref_ == this->saved_p_ref_); ++i_; - // FIXME: We might move the is_valid condition within update_. - if (is_valid()) - update_(); } template <typename P, typename N> inline - void - graph_neighborhood_bkd_piter<P, N>::update_() + mln_psite(N) + graph_neighborhood_bkd_piter<P, N>::compute_p_() const { - // Update psite_. - this->psite_ = graph_psite<P>(this->pg(), *i_); + return graph_psite<P>(this->center().site_set(), *i_); } + # endif // ! MLN_INCLUDE_ONLY } // end of namespace mln -- 1.5.6.5
participants (1)
-
Roland Levillain