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/core/image/image3d.hh>
00028 #include <mln/canvas/browsing/hyper_directional.hh>
00029 #include <mln/fun/p2v/iota.hh>
00030 #include <mln/debug/println.hh>
00031 #include <mln/data/fill.hh>
00032
00033
00034 template <typename I_, typename F>
00035 struct assign_browsing_functor
00036 {
00037 typedef I_ I;
00038 typedef mln_site(I) S;
00039 enum { dim = S::dim };
00040
00041
00042 I input;
00043 F f;
00044 int dir;
00045
00046 assign_browsing_functor(I& input, F f = F(), int dir_ = 0)
00047 : input(input),
00048 f(f),
00049 dir(dir_)
00050 {}
00051
00052 mln_psite(I) p;
00053
00054 void init() {}
00055 void final() {}
00056 void next()
00057 {
00058 input(p) = f(p);
00059
00060 mln_assertion(p[dir] == 0);
00061 }
00062 void fwd() { next(); }
00063 void bkd() { next(); }
00064 void down() { next(); }
00065 };
00066
00067 namespace mln
00068 {
00069
00070 template <typename I, typename F, typename B>
00071 void my_test(Image<I>& ima_,
00072 const Function_v2v<F>& f_,
00073 const Browsing<B>& browse_,
00074 int dir = 0)
00075 {
00076 I& ima = exact(ima_);
00077 const F& f = exact(f_);
00078 const B& browse = exact(browse_);
00079
00080 assign_browsing_functor<I, F> fun(ima, f, dir);
00081 browse(fun);
00082 }
00083
00084 }
00085
00086
00087 int main()
00088 {
00089 using namespace mln;
00090 image2d<unsigned> ima2(3, 3);
00091 image3d<unsigned> ima3(3, 3, 3);
00092
00093 data::fill(ima2, 0);
00094 my_test(ima2, fun::p2v::iota(), canvas::browsing::hyper_directional, 0);
00095 debug::println(ima2);
00096
00097 data::fill(ima2, 0);
00098 my_test(ima2, fun::p2v::iota(), canvas::browsing::hyper_directional, 1);
00099 debug::println(ima2);
00100
00101
00102 data::fill(ima3, 0);
00103 my_test(ima3, fun::p2v::iota(), canvas::browsing::hyper_directional, 0);
00104 debug::println(ima3);
00105
00106 data::fill(ima3, 0);
00107 my_test(ima3, fun::p2v::iota(), canvas::browsing::hyper_directional, 1);
00108 debug::println(ima3);
00109
00110 data::fill(ima3, 0);
00111 my_test(ima3, fun::p2v::iota(), canvas::browsing::hyper_directional, 2);
00112 debug::println(ima3);
00113 }