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/backdiagonal2d.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 typedef assign_browsing_functor<I, F> self;
00040 typedef mln_deduce(I, psite, delta) dpsite;
00041 typedef void (assign_browsing_functor<I,F>::*move_fun)();
00042
00043 I input;
00044 F f;
00045
00046 assign_browsing_functor(I& input, F f = F())
00047 : input(input),
00048 f(f)
00049 {
00050 }
00051
00052 mln_psite(I) p;
00053
00054 void init() { std::cout << "init" << std::endl; }
00055 void final() { std::cout << "final" << std::endl; }
00056
00057 void next_()
00058 {
00059 input(p) = f(p);
00060 }
00061 void next() { std::cout << "next : " << p << std::endl; next_(); }
00062 void init_diag() { std::cout << "init_diag: " << p << std::endl; }
00063 };
00064
00065 namespace mln
00066 {
00067
00068 template <typename I, typename F, typename B>
00069 void my_test(Image<I>& ima_,
00070 const Function_v2v<F>& f_,
00071 const Browsing<B>& browse_)
00072 {
00073 I& ima = exact(ima_);
00074 const F& f = exact(f_);
00075 const B& browse = exact(browse_);
00076
00077 assign_browsing_functor<I, F> fun(ima, f);
00078 browse(fun);
00079 }
00080
00081 }
00082
00083
00084 int main()
00085 {
00086 using namespace mln;
00087 image2d<unsigned> ima2(10, 10);
00088
00089 std::cout << ima2.bbox() << std::endl;
00090 my_test(ima2, fun::p2v::iota(), canvas::browsing::backdiagonal2d);
00091 debug::println(ima2);
00092 }