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/snake_vert.hh>
00028 #include <mln/fun/p2v/iota.hh>
00029 #include <mln/debug/println.hh>
00030
00031
00032 unsigned res[2][7] = { { 1, 4, 5, 8, 9, 12, 13 },
00033 { 2, 3, 6, 7, 10, 11, 14 } };
00034
00035
00036 template <typename I, typename F>
00037 struct assign_browsing_functor
00038 {
00039 typedef mln_site(I) S;
00040 enum { dim = S::dim };
00041
00042 I input;
00043 F f;
00044
00045 assign_browsing_functor(I& input, F f = F())
00046 : input(input),
00047 f(f)
00048 {}
00049
00050 mln_psite(I) p;
00051
00052 void init() {}
00053 void final() {}
00054 void next()
00055 {
00056 input(p) = f(p);
00057 mln_assertion(input(p) == res[p.row()][p.col()]);
00058 }
00059 void fwd() { next(); }
00060 void up() { next(); }
00061 void down() { next(); }
00062 };
00063
00064 namespace mln
00065 {
00066
00067 template <typename I, typename F, typename B>
00068 void my_test(Image<I>& ima_,
00069 const Function_v2v<F>& f_,
00070 const Browsing<B>& browse_)
00071 {
00072 I& ima = exact(ima_);
00073 const F& f = exact(f_);
00074 const B& browse = exact(browse_);
00075
00076 assign_browsing_functor<I, F> fun(ima, f);
00077 browse(fun);
00078 }
00079
00080 }
00081
00082
00083 int main()
00084 {
00085 using namespace mln;
00086 image2d<unsigned> ima2(2, 7);
00087
00088 my_test(ima2, fun::p2v::iota(), canvas::browsing::snake_vert);
00089 }