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_WORLD_INTER_PIXEL_IS_SEPARATOR_HH
00027 # define MLN_WORLD_INTER_PIXEL_IS_SEPARATOR_HH
00028 
00034 
00035 # include <mln/core/concept/function.hh>
00036 # include <mln/core/image/dmorph/image_if.hh>
00037 # include <mln/core/point.hh>
00038 
00039 
00040 namespace mln
00041 {
00042 
00043   namespace world
00044   {
00045 
00046     namespace inter_pixel
00047     {
00048 
00049 
00052       struct is_separator : public Function_v2b< is_separator >
00053       {
00054 
00055         typedef bool result;
00056 
00057         template <typename P>
00058         bool operator()(const Gpoint<P>& p) const;
00059 
00060         template <typename P>
00061         bool operator()(const Site_Proxy<P>& p) const;
00062 
00063       };
00064 
00065 
00066 # ifndef MLN_INCLUDE_ONLY
00067 
00068       template <typename P>
00069       inline
00070       bool
00071       is_separator::operator()(const Gpoint<P>& p_) const
00072       {
00073         const P& p = exact(p_);
00074         return p.row() % 2 + p.col() % 2 == 1;
00075       }
00076 
00077       template <typename P>
00078       inline
00079       bool
00080       is_separator::operator()(const Site_Proxy<P>& p) const
00081       {
00082         mlc_is_a(mln_site(P), Gpoint)::check();
00083         return this->operator()(exact(p).to_site());
00084       }
00085 
00086 # endif // ! MLN_INCLUDE_ONLY
00087 
00088     } 
00089 
00090   } 
00091 
00092 } 
00093 
00094 #endif // ! MLN_WORLD_INTER_PIXEL_IS_SEPARATOR_HH