27 #ifndef MLN_CANVAS_BROWSING_DIAGONAL2D_HH
28 # define MLN_CANVAS_BROWSING_DIAGONAL2D_HH
34 # include <mln/core/concept/browsing.hh>
35 # include <mln/core/concept/image.hh>
89 void operator()(F& f)
const;
94 # ifndef MLN_INCLUDE_ONLY
96 # ifndef MLN_WO_GLOBAL_VARS
100 # endif // ! MLN_WO_GLOBAL_VARS
103 diagonal2d_t::diagonal2d_t()
108 template <
typename F>
111 diagonal2d_t::operator()(F& f)
const
113 trace::entering(
"canvas::browsing::diagonal2d");
115 typedef typename F::I I;
116 typedef mln_deduce(I, psite, delta) dpsite;
117 typedef mln_psite(I) psite;
120 dpsite dp_first(1, 0);
121 dpsite dp_second(0, 1);
122 dpsite dp_diag(-1, 1);
124 mln_deduce(I, psite, delta) diag;
127 pmin = f.input.domain().pmin(),
128 pmax = f.input.domain().pmax();
134 while (f.input.domain().has(f.p))
136 psite start_diag = f.p;
139 while (f.input.domain().has(f.p))
146 f.p = start_diag + dp_first;
148 f.p = f.p - dp_first;
150 f.p = f.p + dp_second;
151 while (f.input.domain().has(f.p))
153 psite start_diag = f.p;
157 while (f.input.domain().has(f.p))
165 f.p = start_diag + dp_second;
169 trace::exiting(
"canvas::browsing::diagonal2d");
172 # endif // ! MLN_INCLUDE_ONLY
180 #endif // ! MLN_CANVAS_BROWSING_DIAGONAL2D_HH