27 #ifndef MLN_CANVAS_BROWSING_BACKDIAGONAL2D_HH
28 # define MLN_CANVAS_BROWSING_BACKDIAGONAL2D_HH
34 # include <mln/core/concept/browsing.hh>
35 # include <mln/core/concept/image.hh>
90 void operator()(F& f)
const;
97 # ifndef MLN_INCLUDE_ONLY
99 # ifndef MLN_WO_GLOBAL_VARS
103 # endif // ! MLN_WO_GLOBAL_VARS
106 backdiagonal2d_t::backdiagonal2d_t()
110 template <
typename F>
113 backdiagonal2d_t::operator()(F& f)
const
115 trace::entering(
"canvas::browsing::backdiagonal2d");
117 typedef typename F::I I;
118 typedef mln_deduce(I, psite, delta) dpsite;
119 typedef mln_psite(I) psite;
122 dpsite dp_first(-1, 0);
123 dpsite dp_second(0, 1);
124 dpsite dp_diag(1, 1);
126 mln_deduce(I, psite, delta) diag;
129 pmin = f.input.domain().pmin(),
130 pmax = f.input.domain().pmax();
138 while (f.input.domain().has(f.p))
140 psite start_diag = f.p;
143 while (f.input.domain().has(f.p))
150 f.p = start_diag + dp_first;
152 f.p = f.p - dp_first;
154 f.p = f.p + dp_second;
155 while (f.input.domain().has(f.p))
157 psite start_diag = f.p;
161 while (f.input.domain().has(f.p))
169 f.p = start_diag + dp_second;
173 trace::exiting(
"canvas::browsing::backdiagonal2d");
176 # endif // ! MLN_INCLUDE_ONLY
184 #endif // ! MLN_CANVAS_BROWSING_BACKDIAGONAL2D_HH