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 
00027 #ifndef MLN_GEOM_MIN_ROW_HH
00028 # define MLN_GEOM_MIN_ROW_HH
00029 
00033 
00034 # include <mln/core/concept/image.hh>
00035 # include <mln/geom/bbox.hh>
00036 
00037 # include <mln/metal/bexpr.hh>
00038 # include <mln/metal/int.hh>
00039 # include <mln/metal/equal.hh>
00040 
00041 namespace mln
00042 {
00043 
00044   namespace geom
00045   {
00046 
00048     template <typename I>
00049     mln_deduce(I, site, coord) min_row(const Image<I>& ima);
00050 
00052     template <typename B>
00053     mln_deduce(B, site, coord) min_row(const Box<B>& b);
00054 
00055 
00056 # ifndef MLN_INCLUDE_ONLY
00057 
00058     template <typename I>
00059     inline
00060     mln_deduce(I, site, coord) min_row(const Image<I>& ima)
00061     {
00062       mln_precondition(exact(ima).is_valid());
00063       mln_deduce(I, site, coord) minrow = geom::bbox(ima).pmin().row();
00064 
00065       return minrow;
00066     }
00067 
00068 
00069     template <typename B>
00070     inline
00071     mln_deduce(B, site, coord) min_row(const Box<B>& b)
00072     {
00073       metal::not_<metal::equal<metal::int_<B::dim>, metal::int_<1> > >::check();
00074       mln_deduce(B, site, coord) minrow = exact(b).pmin().row();
00075 
00076       return minrow;
00077     }
00078 
00079 # endif // ! MLN_INCLUDE_ONLY
00080 
00081   } 
00082 
00083 } 
00084 
00085 
00086 #endif // ! MLN_GEOM_MIN_ROW_HH