• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List

lemmings.hh

00001 // Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory (LRDE)
00002 //
00003 // This file is part of Olena.
00004 //
00005 // Olena is free software: you can redistribute it and/or modify it under
00006 // the terms of the GNU General Public License as published by the Free
00007 // Software Foundation, version 2 of the License.
00008 //
00009 // Olena is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with Olena.  If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 // As a special exception, you may use this file as part of a free
00018 // software project without restriction.  Specifically, if other files
00019 // instantiate templates or use macros or inline functions from this
00020 // file, or you compile this file and link it with other files to produce
00021 // an executable, this file does not by itself cause the resulting
00022 // executable to be covered by the GNU General Public License.  This
00023 // exception does not however invalidate any other reasons why the
00024 // executable file might be covered by the GNU General Public License.
00025 
00026 #ifndef MLN_UTIL_LEMMINGS_HH
00027 # define MLN_UTIL_LEMMINGS_HH
00028 
00032 
00033 # include <mln/core/concept/image.hh>
00034 
00035 
00036 namespace mln
00037 {
00038 
00039   namespace util
00040   {
00041 
00045     template <typename I>
00046     struct lemmings_ : public Object< lemmings_<I> >
00047     {
00048       lemmings_(const Image<I>& ima, const mln_psite(I)& pt,
00049                 const mln_deduce(I, psite, delta)& dpt, const mln_value(I)& val);
00050 
00051       mln_psite(I) operator()();
00052 
00053       const I& ima_;
00054       mln_psite(I) pt_;
00055       const mln_deduce(I, psite, delta)& dpt_;
00056       const mln_value(I)& val_;
00057     };
00058 
00072     template <typename I>
00073     mln_psite(I)
00074     lemmings(const Image<I>& ima, const mln_psite(I)& pt,
00075              const mln_deduce(I, psite, delta)& dpt, const mln_value(I)& val);
00076 
00077 
00078 # ifndef MLN_INCLUDE_ONLY
00079 
00080     // lemmings
00081 
00082     template <typename I>
00083     inline
00084     lemmings_<I>::lemmings_(const Image<I>& ima, const mln_psite(I)& pt,
00085                             const mln_deduce(I, psite, delta)& dpt, const mln_value(I)& val)
00086       : ima_(exact(ima)),
00087         pt_(pt),
00088         dpt_(dpt),
00089         val_(val)
00090     {
00091     }
00092 
00093     template <typename I>
00094     mln_psite(I)
00095     lemmings_<I>::operator()()
00096     {
00097       while (ima_.domain().has(pt_) && ima_(pt_) == val_)
00098         pt_ += dpt_;
00099       return pt_;
00100     }
00101 
00102     template <typename I>
00103     mln_psite(I)
00104     lemmings(const Image<I>& ima, const mln_psite(I)& pt,
00105              const mln_deduce(I, psite, delta)& dpt, const mln_value(I)& val)
00106     {
00107       lemmings_<I> lm(ima, pt, dpt, val);
00108       return lm();
00109     }
00110 
00111 # endif // ! MLN_INCLUDE_ONLY
00112 
00113   } // end of namespace mln::util
00114 
00115 } // end of namespace mln
00116 
00117 
00118 #endif // ! MLN_UTIL_LEMMINGS_HH

Generated on Fri Sep 16 2011 16:33:41 for Milena (Olena) by  doxygen 1.7.1