00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <mln/core/image/image2d.hh>
00027 #include <mln/canvas/browsing/fwd.hh>
00028 #include <mln/fun/p2v/iota.hh>
00029 #include <mln/debug/println.hh>
00030
00031
00032 template <typename I_, typename F>
00033 struct assign_browsing_functor
00034 {
00035 typedef I_ I;
00036 typedef mln_site(I) S;
00037 enum { dim = S::dim };
00038
00039 I input;
00040 F f;
00041
00042 assign_browsing_functor(I& input, F f = F())
00043 : input(input),
00044 f(f)
00045 {}
00046
00047 mln_psite(I) p;
00048
00049 void init() {}
00050 void final() {}
00051 void next()
00052 {
00053 input(p) = f(p);
00054 mln_assertion(input(p) - 1 == p[0] * input.domain().ncols() + p[1]);
00055 }
00056 };
00057
00058 namespace mln
00059 {
00060
00061 template <typename I, typename F, typename B>
00062 void my_test(Image<I>& ima_,
00063 const Function_v2v<F>& f_,
00064 const Browsing<B>& browse_)
00065 {
00066 I& ima = exact(ima_);
00067 const F& f = exact(f_);
00068 const B& browse = exact(browse_);
00069
00070 assign_browsing_functor<I, F> fun(ima, f);
00071 browse(fun);
00072 }
00073
00074 }
00075
00076
00077 int main()
00078 {
00079 using namespace mln;
00080 image2d<unsigned> ima2(3, 3);
00081
00082 my_test(ima2, fun::p2v::iota(), canvas::browsing::fwd);
00083 }