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 #ifndef MLN_MAKE_DOUBLE_NEIGHB2D_HH
00027 # define MLN_MAKE_DOUBLE_NEIGHB2D_HH
00028
00034
00035 # include <mln/convert/to.hh>
00036 # include <mln/core/alias/window2d.hh>
00037 # include <mln/win/multiple.hh>
00038 # include <mln/core/neighb.hh>
00039
00040
00041 namespace mln
00042 {
00043
00044 namespace make
00045 {
00046
00047 template <typename A, unsigned St, unsigned Sf>
00048 neighb< win::multiple<window2d, bool(*)(A)> >
00049 double_neighb2d(bool (*test)(A),
00050 bool const (&when_true) [St],
00051 bool const (&when_false)[Sf]);
00052
00053 template <typename F, unsigned St, unsigned Sf>
00054 neighb< win::multiple<window2d, F> >
00055 double_neighb2d(const F& test,
00056 bool const (&when_true) [St],
00057 bool const (&when_false)[Sf]);
00058
00059
00060 # ifndef MLN_INCLUDE_ONLY
00061
00062 template <typename A, unsigned St, unsigned Sf>
00063 inline
00064 neighb< win::multiple<window2d, bool(*)(A)> >
00065 double_neighb2d(bool (*test)(A),
00066 bool const (&when_true) [St],
00067 bool const (&when_false)[Sf])
00068 {
00069 typedef win::multiple<window2d, bool(*)(A)> W;
00070 W wm(test);
00071 wm.set_window(false, convert::to<window2d>(when_false));
00072 wm.set_window(true, convert::to<window2d>(when_true) );
00073 neighb<W> tmp(wm);
00074 return tmp;
00075 }
00076
00077 template <typename F, unsigned St, unsigned Sf>
00078 inline
00079 neighb< win::multiple<window2d, F> >
00080 double_neighb2d(const F& test,
00081 bool const (&when_true) [St],
00082 bool const (&when_false)[Sf])
00083 {
00084 typedef win::multiple<window2d, F> W;
00085 W wm(test);
00086 wm.set_window(false, convert::to<window2d>(when_false));
00087 wm.set_window(true, convert::to<window2d>(when_true) );
00088 neighb<W> tmp(wm);
00089 return tmp;
00090 }
00091
00092 # endif // ! MLN_INCLUDE_ONLY
00093
00094 }
00095
00096 }
00097
00098
00099 #endif // ! MLN_MAKE_DOUBLE_NEIGHB2D_HH