27 #ifndef MLN_CORE_IMAGE_COMPLEX_NEIGHBORHOOD_PITER_HH
28 # define MLN_CORE_IMAGE_COMPLEX_NEIGHBORHOOD_PITER_HH
33 # include <mln/core/concept/neighborhood.hh>
34 # include <mln/core/internal/site_relative_iterator_base.hh>
56 template <
typename I,
typename G,
typename N>
59 complex_neighborhood_fwd_piter<I, G, N> >
74 template <typename Pref>
75 complex_neighborhood_fwd_piter(const
Neighborhood<N>& nbh,
81 template <typename Pref>
97 template <typename Pref>
107 const iter_type&
iter() const;
118 template <typename I, typename G, typename N>
120 operator<<(std::ostream& ostr,
121 const complex_neighborhood_fwd_piter<I, G, N>&
p);
132 template <typename I, typename G, typename N>
142 typedef mln_psite(N) psite;
144 typedef typename N::complex_bkd_iter iter_type;
150 template <typename Pref>
151 complex_neighborhood_bkd_piter(const
Neighborhood<N>& nbh,
157 template <typename Pref>
173 template <typename Pref>
183 const iter_type& iter() const;
194 template <typename I, typename G, typename N>
196 operator<<(std::ostream& ostr,
197 const complex_neighborhood_bkd_piter<I, G, N>& p);
201 # ifndef MLN_INCLUDE_ONLY
207 template <
typename I,
typename G,
typename N>
213 template <
typename I,
typename G,
typename N>
214 template <
typename Pref>
222 template <
typename I,
typename G,
typename N>
223 template <
typename Pref>
231 mln_postcondition(!this->
is_valid());
234 template <
typename I,
typename G,
typename N>
239 return iter_.is_valid();
242 template <
typename I,
typename G,
typename N>
250 template <
typename I,
typename G,
typename N>
258 template <
typename I,
typename G,
typename N>
266 template <
typename I,
typename G,
typename N>
267 template <
typename Pref>
272 iter_.center_at(this->
center().face());
275 template <
typename I,
typename G,
typename N>
278 complex_neighborhood_fwd_piter<I, G, N>::
compute_p_()
const
283 template <
typename I,
typename G,
typename N>
285 const typename N::complex_fwd_iter&
291 template <
typename I,
typename G,
typename N>
293 typename N::complex_fwd_iter&
300 template <
typename I,
typename G,
typename N>
304 const complex_neighborhood_fwd_piter<I, G, N>& p)
306 return ostr << p.unproxy_();
314 template <
typename I,
typename G,
typename N>
316 complex_neighborhood_bkd_piter<I, G, N>::complex_neighborhood_bkd_piter()
320 template <
typename I,
typename G,
typename N>
321 template <
typename Pref>
323 complex_neighborhood_bkd_piter<I, G, N>::complex_neighborhood_bkd_piter(
const Neighborhood<N>& nbh,
329 template <
typename I,
typename G,
typename N>
330 template <
typename Pref>
338 mln_postcondition(!this->
is_valid());
341 template <
typename I,
typename G,
typename N>
346 return iter_.is_valid();
349 template <
typename I,
typename G,
typename N>
357 template <
typename I,
typename G,
typename N>
365 template <
typename I,
typename G,
typename N>
373 template <
typename I,
typename G,
typename N>
374 template <
typename Pref>
379 iter_.center_at(this->
center().face());
382 template <
typename I,
typename G,
typename N>
385 complex_neighborhood_bkd_piter<I, G, N>::compute_p_()
const
390 template <
typename I,
typename G,
typename N>
392 const typename N::complex_bkd_iter&
398 template <
typename I,
typename G,
typename N>
400 typename N::complex_bkd_iter&
407 template <
typename I,
typename G,
typename N>
411 const complex_neighborhood_bkd_piter<I, G, N>& p)
413 return ostr << p.unproxy_();
416 # endif // ! MLN_INCLUDE_ONLY
420 #endif // ! MLN_CORE_IMAGE_COMPLEX_NEIGHBORHOOD_PITER_HH