27 #ifndef MLN_CORE_IMAGE_COMPLEX_WINDOW_PITER_HH
28 # define MLN_CORE_IMAGE_COMPLEX_WINDOW_PITER_HH
33 # include <mln/core/concept/window.hh>
34 # include <mln/core/internal/site_relative_iterator_base.hh>
56 template <
typename I,
typename G,
typename W>
59 complex_window_fwd_piter<I, G, W> >
74 template <typename Pref>
75 complex_window_fwd_piter(const
Window<W>& win, const Pref& p_ref);
80 template <typename Pref>
81 void init_(const
Window<W>& win, const Pref& p_ref);
96 template <typename Pref>
106 const iter_type&
iter() const;
117 template <typename I, typename G, typename W>
119 operator<<(std::ostream& ostr,
120 const complex_window_fwd_piter<I, G, W>&
p);
131 template <typename I, typename G, typename W>
141 typedef mln_psite(W) psite;
143 typedef typename W::complex_bkd_iter iter_type;
149 template <typename Pref>
150 complex_window_bkd_piter(const
Window<W>& win, const Pref& p_ref);
155 template <typename Pref>
156 void init_(const
Window<W>& win, const Pref& p_ref);
171 template <typename Pref>
181 const iter_type& iter() const;
192 template <typename I, typename G, typename W>
194 operator<<(std::ostream& ostr,
195 const complex_window_bkd_piter<I, G, W>& p);
199 # ifndef MLN_INCLUDE_ONLY
205 template <
typename I,
typename G,
typename W>
211 template <
typename I,
typename G,
typename W>
212 template <
typename Pref>
220 template <
typename I,
typename G,
typename W>
221 template <
typename Pref>
229 mln_postcondition(!this->
is_valid());
233 template <
typename I,
typename G,
typename W>
238 return iter_.is_valid();
241 template <
typename I,
typename G,
typename W>
249 template <
typename I,
typename G,
typename W>
257 template <
typename I,
typename G,
typename W>
265 template <
typename I,
typename G,
typename W>
266 template <
typename Pref>
271 iter_.center_at(this->
center().face());
274 template <
typename I,
typename G,
typename W>
277 complex_window_fwd_piter<I, G, W>::
compute_p_()
const
282 template <
typename I,
typename G,
typename W>
284 const typename W::complex_fwd_iter&
290 template <
typename I,
typename G,
typename W>
292 typename W::complex_fwd_iter&
299 template <
typename I,
typename G,
typename W>
303 const complex_window_fwd_piter<I, G, W>& p)
305 return ostr << p.unproxy_();
313 template <
typename I,
typename G,
typename W>
315 complex_window_bkd_piter<I, G, W>::complex_window_bkd_piter()
319 template <
typename I,
typename G,
typename W>
320 template <
typename Pref>
322 complex_window_bkd_piter<I, G, W>::complex_window_bkd_piter(
const Window<W>& win,
328 template <
typename I,
typename G,
typename W>
329 template <
typename Pref>
337 mln_postcondition(!this->
is_valid());
341 template <
typename I,
typename G,
typename W>
346 return iter_.is_valid();
349 template <
typename I,
typename G,
typename W>
357 template <
typename I,
typename G,
typename W>
365 template <
typename I,
typename G,
typename W>
373 template <
typename I,
typename G,
typename W>
374 template <
typename Pref>
381 iter_.center_at(this->
center().face());
384 template <
typename I,
typename G,
typename W>
387 complex_window_bkd_piter<I, G, W>::compute_p_()
const
392 template <
typename I,
typename G,
typename W>
394 const typename W::complex_bkd_iter&
400 template <
typename I,
typename G,
typename W>
402 typename W::complex_bkd_iter&
409 template <
typename I,
typename G,
typename W>
413 const complex_window_bkd_piter<I, G, W>& p)
415 return ostr << p.unproxy_();
418 # endif // ! MLN_INCLUDE_ONLY
422 #endif // ! MLN_CORE_IMAGE_COMPLEX_WINDOW_PITER_HH