Olena-patches
  Threads by month 
                
            - ----- 2025 -----
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2024 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2023 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2022 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2021 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2020 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2019 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2018 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2017 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2016 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2015 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2014 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2013 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2012 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2011 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2010 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2009 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2008 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2007 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2006 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2005 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 - February
 - January
 - ----- 2004 -----
 - December
 - November
 - October
 - September
 - August
 - July
 - June
 - May
 - April
 - March
 
- 9625 discussions
 
12 Dec '07
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
The generation of documentation is split in two part: user and internal.
For the user documentation a directory user is created with the
subdirectory html, which contains all namespace without internal and impl.
Idem for internal documentation in the directory internal with all
namespace.
In milena/doc:
make user-doc -> generation of user documentation.
make internal-doc -> generation of internal documentation.
make doc has the same enhancement of make internal-doc.
ChangeLog:
2007-12-12  Guillaume Duhamel  <guillaume.duhamel(a)lrde.epita.fr>
	Clean handle of generation of documentation.
	* doc/Makefile.am: New handle of generation of documentation,
	Doxyfile_user and Doxyfile_internal files are the template for
	Doxygen. They are generated from Doxygen.in
	* doc/Doxyfile_user.in: Remove (useless now).
---
 Doxyfile.in |    2 +-
 Makefile.am |   35 +++++++++++++++++++++++------------
 2 files changed, 24 insertions(+), 13 deletions(-)
Index: trunk/milena/doc/Doxyfile_user.in (deleted)
===================================================================
Index: trunk/milena/doc/Doxyfile.in
===================================================================
--- trunk/milena/doc/Doxyfile.in	(revision 1611)
+++ trunk/milena/doc/Doxyfile.in	(revision 1612)
@@ -5,7 +5,7 @@
 #---------------------------------------------------------------------------
 PROJECT_NAME           = "Milena (@PACKAGE_NAME@)"
 PROJECT_NUMBER         = "@PACKAGE_VERSION@ @ID@"
-OUTPUT_DIRECTORY       = .
+OUTPUT_DIRECTORY       = ./internal/
 CREATE_SUBDIRS         = YES
 OUTPUT_LANGUAGE        = English
 BRIEF_MEMBER_DESC      = YES
Index: trunk/milena/doc/Makefile.am
===================================================================
--- trunk/milena/doc/Makefile.am	(revision 1611)
+++ trunk/milena/doc/Makefile.am	(revision 1612)
@@ -10,10 +10,10 @@
 
 
 html-local: Doxyfile
-	$(DOXYGEN)
+	$(DOXYGEN) $(srcdir)/Doxyfile_internal
 
-html_user: Doxyfile_user
-	$(DOXYGEN)
+html_user:: Doxyfile
+	$(DOXYGEN) $(srcdir)/Doxyfile_user
 
 
 edit = sed -e "s|@ID@|$$Id|" \
@@ -22,21 +22,32 @@
 	   -e 's,@top_builddir\@,$(top_builddir),g' \
 	   -e 's,@top_srcdir\@,$(top_srcdir),g'
 
-EXTRA_DIST = Doxyfile.in \
-             Doxyfile_user.in
-CLEANFILES = Doxyfile
+edit_user = sed -e 's,OUTPUT_DIRECTORY       = ./internal/,OUTPUT_DIRECTORY       = ./user/,g' 	\
+		-e 's,EXTRACT_ALL            = YES,EXTRACT_ALL            = NO,g'	\
+		-e 's,EXTRACT_PRIVATE        = YES,EXTRACT_PRIVATE        = NO,g'	\
+		-e 's,EXTRACT_STATIC         = YES,EXTRACT_STATIC         = NO,g'	\
+		-e 's,EXTRACT_LOCAL_CLASSES  = YES,EXTRACT_LOCAL_CLASSES  = NO,g'	\
+		-e 's,HIDE_UNDOC_MEMBERS     = NO,HIDE_UNDOC_MEMBERS     = YES,g'	\
+		-e 's,HIDE_UNDOC_CLASSES     = NO,HIDE_UNDOC_CLASSES     = YES,g'	\
+		-e 's,HIDE_FRIEND_COMPOUNDS  = NO,HIDE_FRIEND_COMPOUNDS  = YES,g'	\
+		-e 's,HIDE_IN_BODY_DOCS      = NO,HIDE_IN_BODY_DOCS      = YES,g'	\
+		-e 's,INTERNAL_DOCS          = YES,INTERNAL_DOCS          = NO,g'	\
+		-e 's,PROJECT_NUMBER         = \",PROJECT_NUMBER         = \"User documentation ,g'
+
+EXTRA_DIST = Doxyfile.in
+
+CLEANFILES = Doxyfile_internal \
+	     Doxyfile_user
+
 # Sed is used to generate Doxyfile from Doxyfile.in instead of
 # configure, because the former is way faster than the latter.
 # Moreover, this file is updated whenever ChangeLog is touched: using
 # sed instead of configure saves us a lot of time.
 Doxyfile: $(top_srcdir)/ChangeLog $(srcdir)/Doxyfile.in
 	Id=`grep '^\$$Id' $(top_srcdir)/ChangeLog`; \
-	$(edit) $(srcdir)/Doxyfile.in >Doxyfile
-
-Doxyfile_user: $(top_srcdir)/ChangeLog $(srcdir)/Doxyfile_user.in
-	Id=`grep '^\$$Id' $(top_srcdir)/ChangeLog`; \
-	$(edit) $(srcdir)/Doxyfile_user.in >Doxyfile
+	   $(edit) $(srcdir)/Doxyfile.in >Doxyfile_internal; \
+	   $(edit_user) $(srcdir)/Doxyfile_internal >Doxyfile_user
 
 clean-local:
-	rm -rf html latex user
+	rm -rf internal user
 
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    12 Dec '07
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2007-12-12  Guillaume Duhamel  <guillaume.duhamel(a)lrde.epita.fr>
	Update documentation for internal namespace.
	
	* mln/histo/all.hh,
	* mln/labeling/all.hh,
	* mln/metal/all.hh,
	* mln/morpho/all.hh,
	* mln/morpho/closing.hh,
	* mln/norm/all.hh,
	* mln/trait/all.hh,
	* mln/util/all.hh,
	* mln/util/pix.hh: Update doc for internal namespace.
---
 histo/all.hh    |    8 +++++++-
 labeling/all.hh |    8 +++++++-
 metal/all.hh    |    3 +++
 morpho/all.hh   |   18 ++++++++++++------
 norm/all.hh     |    7 ++++++-
 trait/all.hh    |   13 ++++++++++++-
 util/all.hh     |    7 ++++++-
 util/pix.hh     |    1 +
 8 files changed, 54 insertions(+), 11 deletions(-)
Index: trunk/milena/mln/trait/all.hh
===================================================================
--- trunk/milena/mln/trait/all.hh	(revision 1609)
+++ trunk/milena/mln/trait/all.hh	(revision 1610)
@@ -41,7 +41,18 @@
 
   /// Namespace where traits are defined.
   namespace trait
-  {}
+  {
+
+    /// \internal Image namespace of trait namespace.
+    namespace image {}
+
+    /// \internal Implementation namespace of trait namespace.
+    namespace impl {}
+
+    /// \internal Internal namespace of trait namespace.
+    namespace internal {}
+
+  }
 
 } // end of namespace mln
 
Index: trunk/milena/mln/histo/all.hh
===================================================================
--- trunk/milena/mln/histo/all.hh	(revision 1609)
+++ trunk/milena/mln/histo/all.hh	(revision 1610)
@@ -41,7 +41,13 @@
   namespace histo
   {
     /// \internal Implementation namespace of histo namespace.
-    namespace impl {}
+    namespace impl {
+
+      /// \internal Generic implementation namespace of histo namespace.
+      namespace generic {}
+
+    }
+
   }
 
 }
Index: trunk/milena/mln/metal/all.hh
===================================================================
--- trunk/milena/mln/metal/all.hh	(revision 1609)
+++ trunk/milena/mln/metal/all.hh	(revision 1610)
@@ -42,6 +42,9 @@
     /// \internal Implementation namespace of metal namespace.
     namespace impl {}
 
+    /// \internal Internal namespace of metal namespace.
+    namespace internal {}
+
   }
 
 } // end of namespace mln
Index: trunk/milena/mln/morpho/closing.hh
===================================================================
Index: trunk/milena/mln/morpho/all.hh
===================================================================
--- trunk/milena/mln/morpho/all.hh	(revision 1609)
+++ trunk/milena/mln/morpho/all.hh	(revision 1610)
@@ -41,18 +41,24 @@
   namespace morpho
   {
 
-    /// \internal Namespace of morphological image processing routines
-    /// implementation details.
+    /*!
+     * \internal Namespace of morphological image processing routines
+     * implementation details.
+     *
+     */
     namespace impl
     {
 
-      /// \internal Namespace of morphological image processing routines
-      /// generic implementations.
+      /*!
+       * \internal Namespace of morphological image processing routines
+       * implementation generic implementations.
+       *
+       */
       namespace generic
-      {
-      }
+      {}
 
     }
+
   }
 
 }
Index: trunk/milena/mln/norm/all.hh
===================================================================
--- trunk/milena/mln/norm/all.hh	(revision 1609)
+++ trunk/milena/mln/norm/all.hh	(revision 1610)
@@ -38,7 +38,12 @@
 {
 
   /// Namespace of norms.
-  namespace norm {}
+  namespace norm {
+
+    /// \internal Implementation namespace of norm namespace.
+    namespace impl {}
+
+  }
 
 }
 
Index: trunk/milena/mln/util/pix.hh
===================================================================
--- trunk/milena/mln/util/pix.hh	(revision 1609)
+++ trunk/milena/mln/util/pix.hh	(revision 1610)
@@ -39,6 +39,7 @@
 namespace mln
 {
 
+  /// \brief Select namespace (FIXME doc).
   namespace select
   {
 
Index: trunk/milena/mln/util/all.hh
===================================================================
--- trunk/milena/mln/util/all.hh	(revision 1609)
+++ trunk/milena/mln/util/all.hh	(revision 1610)
@@ -38,7 +38,12 @@
 {
 
   /// Namespace of tools using for more complex algorithm.
-  namespace util {}
+  namespace util {
+
+    /// \internal Implementation namespace of util namespace.
+    namespace impl {}
+
+  }
 
 }
 
Index: trunk/milena/mln/labeling/all.hh
===================================================================
--- trunk/milena/mln/labeling/all.hh	(revision 1609)
+++ trunk/milena/mln/labeling/all.hh	(revision 1610)
@@ -41,7 +41,13 @@
   namespace labeling
   {
     /// \internal Implementation namespace of labeling namespace.
-    namespace impl {}
+    namespace impl {
+
+      /// \internal Generic implementation namespace of labeling namespace.
+      namespace generic {}
+
+    }
+
   }
 
 }
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2007-12-12  Simon Nivault  <simon.nivault(a)lrde.epita.fr>
	.
	* mln/core/internal/run_image.hh: Add `has' and `point_at'
        method.
	* mln/core/mono_obased_rle_image.hh,
	* mln/core/mono_rle_image.hh,
	* mln/core/obased_rle_image.hh,
	* mln/core/p_runs.hh,
	* mln/core/rle_image.hh,
	* mln/core/sparse_image.hh: Use the new methods above.
	* tests/core/p_runs.cc: Fix test.
---
 mln/core/internal/run_image.hh    |   40 ++++++++++++++++++++++++++++++++++++++
 mln/core/mono_obased_rle_image.hh |    6 +----
 mln/core/mono_rle_image.hh        |   15 ++++++--------
 mln/core/obased_rle_image.hh      |    6 +----
 mln/core/p_runs.hh                |   13 +++++-------
 mln/core/rle_image.hh             |    6 +----
 mln/core/sparse_image.hh          |    8 +------
 tests/core/p_runs.cc              |    5 ++--
 8 files changed, 64 insertions(+), 35 deletions(-)
Index: trunk/milena/tests/core/p_runs.cc
===================================================================
--- trunk/milena/tests/core/p_runs.cc	(revision 1608)
+++ trunk/milena/tests/core/p_runs.cc	(revision 1609)
@@ -58,6 +58,7 @@
 
   // Pset test
   p_runs_<point2d> ps;
+  p_runs_<point2d> ps2;
 
   ps.insert(p_run<point2d>(p, 7));
   mln_assertion(ps.npoints() == 7);
@@ -71,10 +72,10 @@
 
   // Psite declaration
   runs_psite<point2d>  site(ps, 5, 0);
-  runs_psite<point2d>  site2(ps, 6, 1);
+  runs_psite<point2d>  site2(ps, 5, 1);
 
   mln_assertion(ps.has(site));
-  mln_assertion(!ps.has(site2));
+  mln_assertion(!ps2.has(site2));
 
 
   parc(ps);
Index: trunk/milena/mln/core/internal/run_image.hh
===================================================================
--- trunk/milena/mln/core/internal/run_image.hh	(revision 1608)
+++ trunk/milena/mln/core/internal/run_image.hh	(revision 1609)
@@ -71,6 +71,21 @@
        *  actually an lighter image. So it improves compression.
        */
       void finalize();
+
+      /*! \brief Give the point represented by the point-site.
+       *
+       * Use the coordinate of the psite to see what point it corresponds
+       * with the domain of the image.
+       *
+       * \return The corresponding point.
+       */
+      P point_at(const runs_psite<P>& ps) const;
+
+      /*! \brief Tell if the image has the given point site.
+       *
+       * \return True if the image has the point site, else false.
+       */
+      bool has(const runs_psite<P>& ps) const;
     };
 
 # ifndef MLN_INCLUDE_ONLY
@@ -98,6 +113,31 @@
       exact(this)->data_->finalize();
     }
 
+    template <typename T, typename P, typename E>
+    inline
+    P
+    run_image_<T, P, E>::point_at(const runs_psite<P>& ps) const
+    {
+      const E* ima = exact(this);
+      mln_precondition(ps.p_of_run() < ima->data_->domain_.nruns());
+      mln_precondition(ps.p_in_run() < ima->data_->domain_[ps.p_of_run()].length());
+      return ima->data_->domain_[ps.p_of_run()][ps.p_in_run()];
+    }
+
+    template <typename T, typename P, typename E>
+    inline
+    bool
+    run_image_<T, P, E>::has(const runs_psite<P>& ps) const
+    {
+      const E* ima = exact(this);
+      if (!ima->has_data())
+	return false;
+      else
+	return (ps.p_of_run() < ima->data_->domain_.nruns()
+		&& ps.p_in_run() < ima->data_->domain_[ps.p_of_run()].length()
+		&& ima->data_->domain_[ps.p_of_run()][ps.p_in_run()] == ps);
+    }
+
 # endif // ! MLN_INCLUDE_ONLY
 
   } // end of namespace internal
Index: trunk/milena/mln/core/rle_image.hh
===================================================================
--- trunk/milena/mln/core/rle_image.hh	(revision 1608)
+++ trunk/milena/mln/core/rle_image.hh	(revision 1609)
@@ -212,8 +212,7 @@
   rle_image<P, T>::operator() (const typename rle_image<P, T>::psite& site)
     const
   {
-    mln_precondition(this->has_data() &&
-		     site.p_of_run() < this->data_->values_.size());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()];
   }
 
@@ -222,8 +221,7 @@
   typename rle_image<P, T>::lvalue
   rle_image<P, T>::operator() (const typename rle_image<P, T>::psite& site)
   {
-    mln_precondition(this->has_data() &&
-		     site.p_of_run() < this->data_->values_.size());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()];
   }
 
Index: trunk/milena/mln/core/mono_rle_image.hh
===================================================================
--- trunk/milena/mln/core/mono_rle_image.hh	(revision 1608)
+++ trunk/milena/mln/core/mono_rle_image.hh	(revision 1609)
@@ -211,27 +211,26 @@
   template <typename P, typename T>
   inline
   typename mono_rle_image<P, T>::rvalue
-  mono_rle_image<P, T>::operator() (const typename mono_rle_image<P, T>::psite& site)
-    const
+  mono_rle_image<P, T>::operator() (const typename mono_rle_image<P, T>::psite& site) const
   {
-    mln_precondition(site.p_of_run() < this->data_->domain_.nruns());
+    mln_precondition(this->has(site));
     return this->data_->value_;
   }
 
   template <typename P, typename T>
   inline
-  typename mono_rle_image<P, T>::rvalue
-  mono_rle_image<P, T>::get_value() const
+  typename mono_rle_image<P, T>::lvalue
+  mono_rle_image<P, T>::operator() (const typename mono_rle_image<P, T>::psite& site)
   {
+    mln_precondition(this->has(site));
     return this->data_->value_;
   }
 
   template <typename P, typename T>
   inline
-  typename mono_rle_image<P, T>::lvalue
-  mono_rle_image<P, T>::operator() (const typename mono_rle_image<P, T>::psite& site)
+  typename mono_rle_image<P, T>::rvalue
+  mono_rle_image<P, T>::get_value() const
   {
-    mln_precondition(site.p_of_run() < this->data_->domain_.nruns());
     return this->data_->value_;
   }
 
Index: trunk/milena/mln/core/obased_rle_image.hh
===================================================================
--- trunk/milena/mln/core/obased_rle_image.hh	(revision 1608)
+++ trunk/milena/mln/core/obased_rle_image.hh	(revision 1609)
@@ -240,8 +240,7 @@
   obased_rle_image<P, T>::operator() (const typename obased_rle_image<P, T>::psite& site)
     const
   {
-    mln_precondition(this->has_data() &&
-		     site.p_of_run() < this->data_->domain_.nruns());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()];
   }
 
@@ -250,8 +249,7 @@
   typename obased_rle_image<P, T>::lvalue
   obased_rle_image<P, T>::operator() (const typename obased_rle_image<P, T>::psite& site)
   {
-    mln_precondition(this->has_data() &&
-		     site.p_of_run() < this->data_->domain_.nruns());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()];
   }
 
Index: trunk/milena/mln/core/mono_obased_rle_image.hh
===================================================================
--- trunk/milena/mln/core/mono_obased_rle_image.hh	(revision 1608)
+++ trunk/milena/mln/core/mono_obased_rle_image.hh	(revision 1609)
@@ -228,8 +228,7 @@
   mono_obased_rle_image<P, T>::operator() (const typename mono_obased_rle_image<P, T>::psite& site)
     const
   {
-    mln_precondition(this->has_data() &&
-		     site.p_of_run() < this->data_->domain_.nruns());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()];
   }
 
@@ -238,8 +237,7 @@
   typename mono_obased_rle_image<P, T>::lvalue
   mono_obased_rle_image<P, T>::operator() (const typename mono_obased_rle_image<P, T>::psite& site)
   {
-    mln_precondition(this->has_data() &&
-		     site.p_of_run() < this->data_->domain_.nruns());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()];
   }
 
Index: trunk/milena/mln/core/sparse_image.hh
===================================================================
--- trunk/milena/mln/core/sparse_image.hh	(revision 1608)
+++ trunk/milena/mln/core/sparse_image.hh	(revision 1609)
@@ -212,9 +212,7 @@
   sparse_image<P, T>::operator() (const typename sparse_image<P, T>::psite& site)
     const
   {
-    mln_precondition(this->has_data());
-    mln_precondition(site.p_of_run() < this->data_->values_.size());
-    mln_precondition(site.p_in_run() < this->data_->values_[site.p_of_run()].size());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()][site.p_in_run()];
   }
 
@@ -223,9 +221,7 @@
   typename sparse_image<P, T>::lvalue
   sparse_image<P, T>::operator() (const typename sparse_image<P, T>::psite& site)
   {
-    mln_precondition(this->has_data() &&
-		     site.p_of_run() < this->data_->values_.size() &&
-		     site.p_in_run() < this->data_->values_[site.p_of_run()].size());
+    mln_precondition(this->has(site));
     return this->data_->values_[site.p_of_run()][site.p_in_run()];
   }
 
Index: trunk/milena/mln/core/p_runs.hh
===================================================================
--- trunk/milena/mln/core/p_runs.hh	(revision 1608)
+++ trunk/milena/mln/core/p_runs.hh	(revision 1609)
@@ -70,7 +70,7 @@
     p_runs_();
 
     /// Test is \p p belongs to this point set.
-    bool has(const runs_psite<P>& p) const;
+    bool has(const runs_psite<P>& ps) const;
 
     /// Give the exact bounding box.
     const box_<P>& bbox() const;
@@ -123,13 +123,12 @@
   template <typename P>
   inline
   bool
-  p_runs_<P>::has(const runs_psite<P>& p) const
+  p_runs_<P>::has(const runs_psite<P>& ps) const
   {
-    for (unsigned i = 0; i < con_.nelements(); ++i)
-    {
-      if (con_[i].first() == p.range_start_() && con_[i].length() > p.p_in_run())
-	return true;
-    }
+    if (ps.p_of_run() < nruns()
+	&& ps.p_in_run() < con_[ps.p_of_run()].length())
+      return (ps == con_[ps.p_of_run()][ps.p_in_run()]);
+    else
     return false;
   }
 
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        https://svn.lrde.epita.fr/svn/oln/trunk/milena
Index: ChangeLog
from  Thierry Geraud  <thierry.geraud(a)lrde.epita.fr>
	Add labeling in tests.
	* tests/Makefile.am (SUBDIRS): Add labeling.
	* img/tiny.pgm: New.
 img/tiny.pgm      |    4 ++++
 tests/Makefile.am |   11 +----------
 2 files changed, 5 insertions(+), 10 deletions(-)
Index: tests/Makefile.am
--- tests/Makefile.am	(revision 1607)
+++ tests/Makefile.am	(working copy)
@@ -14,6 +14,7 @@
   fun						\
   geom						\
   histo						\
+  labeling					\
   level						\
   logical					\
   norm						\
@@ -69,11 +70,6 @@
   image_if_value				\
   interpolated					\
 						\
-  labeling_algo					\
-  labeling_estimate				\
-  labeling_foreground				\
-  labeling_level_fast				\
-  labeling_regional_maxima			\
   level_sort_points				\
   linear_convolve				\
   linear_gaussian				\
@@ -187,11 +183,6 @@
 image_if_value_SOURCES = image_if_value.cc
 interpolated_SOURCES = interpolated.cc
 
-labeling_algo_SOURCES = labeling_algo.cc
-labeling_estimate_SOURCES = labeling_estimate.cc
-labeling_foreground_SOURCES = labeling_foreground.cc
-labeling_level_fast_SOURCES = labeling_level_fast.cc
-labeling_regional_maxima_SOURCES = labeling_regional_maxima.cc
 level_sort_points_SOURCES = level_sort_points.cc
 linear_convolve_SOURCES = linear_convolve.cc
 linear_gaussian_SOURCES = linear_gaussian.cc
Index: img/tiny.pgm
--- img/tiny.pgm	(revision 0)
+++ img/tiny.pgm	(revision 0)
@@ -0,0 +1,4 @@
+P5
+16 16
+255
+hsz¤wZeq~w§`2{bnxz²¾}v9Jjapt|µÈÁrKDoavz¬´»¶·²Gura{x~«¼®qSrasnMK·j=t¡ndrqF?~°KEgilS@_mJ_XlYEQfzNy¡ÄYdR\aK|]S¶ÒT\SrM9b?\ÂÇ`RKgL5W zb°qqI;W[@i¤À¢_rH6LFMy¼¤onY~D@JAb±jpXR
\ No newline at end of file
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2007-12-12  Guillaume Duhamel  <guillaume.duhamel(a)lrde.epita.fr>
	Fix bug for saturate.
	* mln/fun/v2v/saturate.hh: Fix needs_update in mutable.
---
 saturate.hh |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
Index: trunk/milena/mln/fun/v2v/saturate.hh
===================================================================
--- trunk/milena/mln/fun/v2v/saturate.hh	(revision 1606)
+++ trunk/milena/mln/fun/v2v/saturate.hh	(revision 1607)
@@ -62,7 +62,7 @@
 
       protected:
 	V min_, max_;
-	bool needs_update_;
+	mutable bool needs_update_;
       };
 
 
@@ -101,7 +101,6 @@
 	  {
 	    min_W = mln::value::cast<W>(min_);
 	    max_W = mln::value::cast<W>(max_);
-	    // FIXME
  	    needs_update_ = false;
 	  }
 
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2007-12-12  Guillaume Duhamel  <guillaume.duhamel(a)lrde.epita.fr>
	Add generation of user documentation.
	Update creation of documentation.
	* doc/Doxyfile.in,
	* doc/Makefile.am: Update for generation of internal or user documentation.
	* doc/Doxyfile_user.in: New template file for generate the user documentation.
	Update source for distinction between the user and developper documentation.
	* mln/accu/all.hh,
	* mln/accu/internal/base.hh,
	* mln/arith/all.hh,
	* mln/border/all.hh,
	* mln/canvas/all.hh,
	* mln/convert/all.hh,
	* mln/core/cast_image.hh,
	* mln/core/concept/object.hh,
	* mln/core/decorated_image.hh,
	* mln/core/dpoint.hh,
	* mln/core/fi_adaptor.hh,
	* mln/core/image1d.hh,
	* mln/core/image2d.hh,
	* mln/core/image3d.hh,
	* mln/core/image_if.hh,
	* mln/core/image_if_interval.hh,
	* mln/core/image_if_value.hh,
	* mln/core/internal/box_impl.hh,
	* mln/core/internal/check/image_all.hh,
	* mln/core/internal/check/image_fastest.hh,
	* mln/core/internal/coord_impl.hh,
	* mln/core/internal/dpoints_base.hh,
	* mln/core/internal/fixme.hh,
	* mln/core/internal/force_exact.hh,
	* mln/core/internal/image_base.hh,
	* mln/core/internal/image_domain_morpher.hh,
	* mln/core/internal/image_identity.hh,
	* mln/core/internal/image_if_base.hh,
	* mln/core/internal/image_morpher.hh,
	* mln/core/internal/image_primary.hh,
	* mln/core/internal/image_value_morpher.hh,
	* mln/core/internal/piter_adaptor.hh,
	* mln/core/internal/pixel_impl.hh,
	* mln/core/internal/pixel_iterator_base.hh,
	* mln/core/internal/point_iterator_base.hh,
	* mln/core/internal/point_set_base.hh,
	* mln/core/internal/run_image.hh,
	* mln/core/internal/set_of.hh,
	* mln/core/t_image.hh,
	* mln/debug/all.hh,
	* mln/display/all.hh,
	* mln/fun/all.hh,
	* mln/fun/x2x/all.hh,
	* mln/fun/x2x/composed.hh,
	* mln/geom/all.hh,
	* mln/geom/chamfer.hh,
	* mln/histo/all.hh,
	* mln/io/all.hh,
	* mln/io/pbm/all.hh,
	* mln/io/pfm/all.hh,
	* mln/io/pnm/all.hh,
	* mln/labeling/all.hh,
	* mln/level/all.hh,
	* mln/level/approx/all.hh,
	* mln/level/naive/all.hh,
	* mln/level/naive/median.hh,
	* mln/linear/all.hh,
	* mln/logical/all.hh,
	* mln/metal/all.hh,
	* mln/metal/math/all.hh,
	* mln/morpho/all.hh,
	* mln/morpho/minus.hh,
	* mln/morpho/plus.hh,
	* mln/pw/image.hh,
	* mln/test/all.hh,
	* mln/value/all.hh,
	* mln/value/float01_.hh,
	* mln/value/graylevel.hh,
	* mln/value/internal/convert.hh,
	* mln/value/internal/encoding.hh,
	* mln/value/internal/iterable_set.hh,
	* mln/value/internal/value_like.hh,
	* mln/value/label.hh,
	* mln/value/stack.hh: Update (add command internal in Doxygen comment).
---
 doc/Doxyfile.in                           | 1054 ------------------------------
 doc/Doxyfile_user.in                      |  252 +++++++
 doc/Makefile.am                           |   21 
 mln/accu/all.hh                           |    4 
 mln/accu/internal/base.hh                 |    3 
 mln/arith/all.hh                          |    4 
 mln/border/all.hh                         |    4 
 mln/canvas/all.hh                         |    2 
 mln/convert/all.hh                        |    2 
 mln/core/cast_image.hh                    |    2 
 mln/core/concept/object.hh                |    6 
 mln/core/decorated_image.hh               |    8 
 mln/core/fi_adaptor.hh                    |    1 
 mln/core/image1d.hh                       |    4 
 mln/core/image2d.hh                       |    3 
 mln/core/image3d.hh                       |    1 
 mln/core/image_if.hh                      |    8 
 mln/core/image_if_interval.hh             |    7 
 mln/core/image_if_value.hh                |    6 
 mln/core/internal/box_impl.hh             |   16 
 mln/core/internal/check/image_all.hh      |    4 
 mln/core/internal/check/image_fastest.hh  |    3 
 mln/core/internal/coord_impl.hh           |   32 
 mln/core/internal/dpoints_base.hh         |    4 
 mln/core/internal/fixme.hh                |    3 
 mln/core/internal/force_exact.hh          |   17 
 mln/core/internal/image_base.hh           |   13 
 mln/core/internal/image_domain_morpher.hh |    4 
 mln/core/internal/image_identity.hh       |    4 
 mln/core/internal/image_if_base.hh        |   12 
 mln/core/internal/image_morpher.hh        |    7 
 mln/core/internal/image_primary.hh        |    3 
 mln/core/internal/image_value_morpher.hh  |    4 
 mln/core/internal/piter_adaptor.hh        |    3 
 mln/core/internal/pixel_impl.hh           |    6 
 mln/core/internal/pixel_iterator_base.hh  |    2 
 mln/core/internal/point_iterator_base.hh  |    4 
 mln/core/internal/point_set_base.hh       |    4 
 mln/core/internal/run_image.hh            |    3 
 mln/core/internal/set_of.hh               |   10 
 mln/core/t_image.hh                       |    2 
 mln/debug/all.hh                          |    2 
 mln/display/all.hh                        |    4 
 mln/fun/all.hh                            |    2 
 mln/fun/x2x/all.hh                        |    2 
 mln/fun/x2x/composed.hh                   |   17 
 mln/geom/all.hh                           |    2 
 mln/geom/chamfer.hh                       |    4 
 mln/histo/all.hh                          |    2 
 mln/io/all.hh                             |    2 
 mln/io/pbm/all.hh                         |    4 
 mln/io/pfm/all.hh                         |    4 
 mln/io/pnm/all.hh                         |    2 
 mln/labeling/all.hh                       |    2 
 mln/level/all.hh                          |    4 
 mln/level/approx/all.hh                   |   12 
 mln/level/naive/all.hh                    |    4 
 mln/level/naive/median.hh                 |    2 
 mln/linear/all.hh                         |    4 
 mln/logical/all.hh                        |    4 
 mln/metal/all.hh                          |    2 
 mln/metal/math/all.hh                     |    2 
 mln/morpho/all.hh                         |   14 
 mln/morpho/minus.hh                       |   15 
 mln/morpho/plus.hh                        |   15 
 mln/pw/image.hh                           |    2 
 mln/test/all.hh                           |    2 
 mln/value/all.hh                          |    2 
 mln/value/float01_.hh                     |    1 
 mln/value/graylevel.hh                    |    4 
 mln/value/internal/convert.hh             |    3 
 mln/value/internal/encoding.hh            |    2 
 mln/value/internal/iterable_set.hh        |    3 
 mln/value/internal/value_like.hh          |   16 
 mln/value/label.hh                        |    1 
 mln/value/stack.hh                        |    2 
 76 files changed, 442 insertions(+), 1275 deletions(-)
Index: trunk/milena/doc/Doxyfile_user.in
===================================================================
--- trunk/milena/doc/Doxyfile_user.in	(revision 0)
+++ trunk/milena/doc/Doxyfile_user.in	(revision 1606)
@@ -0,0 +1,252 @@
+# Doxyfile 1.5.1
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = "Milena (@PACKAGE_NAME@)"
+PROJECT_NUMBER         = "@PACKAGE_VERSION@ @ID@ User Doc"
+OUTPUT_DIRECTORY       = ./user/
+CREATE_SUBDIRS         = YES
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       = 
+ALWAYS_DETAILED_SEC    = YES
+INLINE_INHERITED_MEMB  = YES
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = @top_srcdir@/milena \
+                         @top_builddir@/milena
+STRIP_FROM_INC_PATH    = 
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = NO
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = 
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+BUILTIN_STL_SUPPORT    = YES
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = NO
+EXTRACT_PRIVATE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+HIDE_UNDOC_MEMBERS     = YES
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = YES
+HIDE_IN_BODY_DOCS      = YES
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       = 
+MAX_INITIALIZER_LINES  = 30
+SHOW_USED_FILES        = YES
+SHOW_DIRECTORIES       = YES
+FILE_VERSION_FILTER    = 
+#---------------------------------------------------------------------------
+# configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = YES
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = 
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = @top_srcdir@/milena \
+                         @top_builddir@/milena
+FILE_PATTERNS          = *.cc \
+                         *.hh \
+                         *.hxx \
+                         *.hcc
+RECURSIVE              = YES
+EXCLUDE                = @top_srcdir@/milena/sandbox
+EXCLUDE_SYMLINKS       = YES
+EXCLUDE_PATTERNS       = *spe.hh
+EXAMPLE_PATH           = 
+EXAMPLE_PATTERNS       = 
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = 
+INPUT_FILTER           = 
+FILTER_PATTERNS        = 
+FILTER_SOURCE_FILES    = NO
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+REFERENCES_LINK_SOURCE = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 5
+IGNORE_PREFIX          = 
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            = 
+HTML_FOOTER            = 
+HTML_STYLESHEET        = 
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               = 
+HHC_LOCATION           = 
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = YES
+TREEVIEW_WIDTH         = 250
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         = 
+LATEX_HEADER           = 
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = YES
+LATEX_HIDE_INDICES     = NO
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    = 
+RTF_EXTENSIONS_FILE    = 
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             = 
+XML_DTD                = 
+XML_PROGRAMLISTING     = YES
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX = 
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor   
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = YES
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = 
+INCLUDE_FILE_PATTERNS  = 
+PREDEFINED             = "mlc_unqualif(T)=typename mln::metal::unqualif<T>::ret" \
+                         "mln_piter(T)=typename T::piter" \
+                         "mln_fwd_piter(T)=typename T::fwd_piter" \
+                         "mln_bkd_piter(T)=typename T::bkd_piter" \
+                         "mln_qiter(T)=typename T::qiter" \
+                         "mln_fwd_qiter(T)=typename T::fwd_qiter" \
+                         "mln_bkd_qiter(T)=typename T::bkd_qiter" \
+                         "mln_niter(T)=typename T::niter" \
+                         "mln_fwd_niter(T)=typename T::fwd_niter" \
+                         "mln_bkd_niter(T)=typename T::bkd_niter" \
+                         "mln_viter(T)=typename T::viter" \
+                         "mln_fwd_viter(T)=typename T::fwd_viter" \
+                         "mln_bkd_viter(T)=typename T::bkd_viter" \
+                         "mln_result(T)=typename T::result" \
+                         "mln_enc(T)=typename T::enc" \
+                         "mln_value(T)=typename T::value" \
+                         "mln_qlf_value(T)=typename T::qlf_value" \
+                         "mln_pset(T)=typename T::pset" \
+                         "mln_sum(T)=typename mln::value::props<T>::sum" \
+                         "mln_vset(T)=typename T::vset" \
+                         "mln_rvalue(T)=typename T::rvalue" \
+                         "mln_lvalue(T)=typename T::lvalue" \
+                         "mln_mesh(T)=typename T::mesh" \
+                         "mln_coord(T)=typename T::coord" \
+                         "mln_point(T)=typename T::point" \
+                         "mln_dpoint(T)=typename T::dpoint"
+EXPAND_AS_DEFINED      = 
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references   
+#---------------------------------------------------------------------------
+TAGFILES               = 
+GENERATE_TAGFILE       = 
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool   
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = YES
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = YES
+GROUP_GRAPHS           = YES
+UML_LOOK               = NO
+TEMPLATE_RELATIONS     = YES
+INCLUDE_GRAPH          = YES
+INCLUDED_BY_GRAPH      = YES
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = YES
+DOT_IMAGE_FORMAT       = png
+DOT_PATH               = 
+DOTFILE_DIRS           = 
+MAX_DOT_GRAPH_DEPTH    = 1000
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = NO
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine   
+#---------------------------------------------------------------------------
+SEARCHENGINE           = NO
Index: trunk/milena/doc/Doxyfile.in
===================================================================
--- trunk/milena/doc/Doxyfile.in	(revision 1605)
+++ trunk/milena/doc/Doxyfile.in	(revision 1606)
@@ -1,1048 +1,191 @@
-# Doxyfile 1.5.2					-*- Makefile -*-
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
+# Doxyfile 1.5.1
 
 #---------------------------------------------------------------------------
 # Project related configuration options
 #---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the
-# config file that follow. The default is UTF-8 which is also the
-# encoding used for all text before the first occurrence of this
-# tag. Doxygen uses libiconv (or the iconv built into libc) for the
-# transcoding. See http://www.gnu.org/software/libiconv for the list
-# of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
 PROJECT_NAME           = "Milena (@PACKAGE_NAME@)"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
 PROJECT_NUMBER         = "@PACKAGE_VERSION@ @ID@"
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
 OUTPUT_DIRECTORY       = .
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
 CREATE_SUBDIRS         = YES
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Finnish, French, German, Greek, Hungarian,
-# Italian, Japanese, Japanese-en (Japanese with English messages), Korean,
-# Korean-en, Lithuanian, Norwegian, Polish, Portuguese, Romanian, Russian,
-# Serbian, Slovak, Slovene, Spanish, Swedish, and Ukrainian.
-
 OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
 BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will
-# prepend the brief description of a member or function before the
-# detailed description.  Note: if both HIDE_UNDOC_MEMBERS and
-# BRIEF_MEMBER_DESC are set to NO, the brief descriptions will be
-# completely suppressed.
-
 REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
 ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
 ALWAYS_DETAILED_SEC    = YES
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
 INLINE_INHERITED_MEMB  = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
 FULL_PATH_NAMES        = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
 STRIP_FROM_PATH        = @top_srcdir@/milena \
                          @top_builddir@/milena
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
 STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
 SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like the Qt-style comments (thus requiring an
-# explicit @brief command for a brief description.
-
 JAVADOC_AUTOBRIEF      = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
 MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
 DETAILS_AT_TOP         = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
 INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
 SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
 TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
 ALIASES                =
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
 OPTIMIZE_OUTPUT_FOR_C  = NO
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of
-# Java sources only. Doxygen will then generate output that is more
-# tailored for Java.  For instance, namespaces will be presented as
-# packages, qualified scopes will look different, etc.
-
 OPTIMIZE_OUTPUT_JAVA   = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do
-# not want to include (a tag file for) the STL sources as input, then
-# you should set this tag to YES in order to let doxygen match
-# functions declarations and definitions whose arguments contain STL
-# classes (e.g. func(std::string); v.s.  func(std::string) {}). This
-# also make the inheritance and collaboration diagrams that involve
-# STL classes more complete and accurate.
-
 BUILTIN_STL_SUPPORT    = YES
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
 DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
 SUBGROUPING            = YES
-
 #---------------------------------------------------------------------------
 # Build related configuration options
 #---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
 EXTRACT_ALL            = YES
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
 EXTRACT_PRIVATE        = YES
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
 EXTRACT_STATIC         = YES
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
 EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
 EXTRACT_LOCAL_METHODS  = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
 HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
 HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
 HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
 HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
+INTERNAL_DOCS          = YES
 CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
 HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
 SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
 INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
 SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
 SORT_BRIEF_DOCS        = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
 SORT_BY_SCOPE_NAME     = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
 GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
 GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
 GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
 GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
 ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
 MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
 SHOW_USED_FILES        = YES
-
-# If the sources in your project are distributed over multiple
-# directories then setting the SHOW_DIRECTORIES tag to YES will show
-# the directory hierarchy in the documentation. The default is NO.
-
 SHOW_DIRECTORIES       = YES
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or
-# script that doxygen should invoke to get the current version for
-# each file (typically from the version control system). Doxygen will
-# invoke the program by executing (via popen()) the command <command>
-# <input-file>, where <command> is the value of the
-# FILE_VERSION_FILTER tag, and <input-file> is the name of an input
-# file provided by doxygen. Whatever the program writes to standard
-# output is used as the file version. See the manual for examples.
-
 FILE_VERSION_FILTER    =
-
 #---------------------------------------------------------------------------
 # configuration options related to warning and progress messages
 #---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
 QUIET                  = YES
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
 WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
 WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
 WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
 WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
 WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
 WARN_LOGFILE           =
-
 #---------------------------------------------------------------------------
 # configuration options related to the input files
 #---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories
-# that contain documented source files. You may enter file names like
-# "myfile.cpp" or directories like "/usr/src/myproject". Separate the
-# files or directories with spaces.
-
 INPUT                  = @top_srcdir@/milena \
                          @top_builddir@/milena
-
-# This tag can be used to specify the character encoding of the source
-# files that doxygen parses. Internally doxygen uses the UTF-8
-# encoding, which is also the default input encoding. Doxygen uses
-# libiconv (or the iconv built into libc) for the transcoding.  See
-# http://www.gnu.org/software/libiconv for the list of possible
-# encodings.
-
-INPUT_ENCODING         = ISO-8859-1
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py
-
 FILE_PATTERNS          = *.cc \
                          *.hh \
                          *.hxx \
                          *.hcc
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
 RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
 EXCLUDE                = @top_srcdir@/milena/sandbox
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
 EXCLUDE_SYMLINKS       = YES
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
 EXCLUDE_PATTERNS       = *spe.hh
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol
-# names (namespaces, classes, functions, etc.) that should be excluded
-# from the output.  The symbol name can be a fully qualified name, a
-# word, or if the wildcard * is used, a substring. Examples:
-# ANamespace, AClass, AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
 EXAMPLE_PATH           =
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
 EXAMPLE_PATTERNS       =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
 EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
 IMAGE_PATH             =
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
 INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.  Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.  The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
 FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
 FILTER_SOURCE_FILES    = NO
-
 #---------------------------------------------------------------------------
 # configuration options related to source browsing
 #---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files
-# will be generated. Documented entities will be cross-referenced with
-# these sources.  Note: To get rid of all source code in the generated
-# output, make sure also VERBATIM_HEADERS is set to NO.
-
 SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
 INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
 STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
 REFERENCED_BY_RELATION = YES
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
 REFERENCES_RELATION    = YES
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
-
 REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html) You
-# will need version 4.8.6 or higher.
-
 USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
 VERBATIM_HEADERS       = YES
-
 #---------------------------------------------------------------------------
 # configuration options related to the alphabetical class index
 #---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
 ALPHABETICAL_INDEX     = YES
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
 COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
 IGNORE_PREFIX          =
-
 #---------------------------------------------------------------------------
 # configuration options related to the HTML output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
 GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
 HTML_OUTPUT            = html
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
 HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
 HTML_HEADER            =
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
 HTML_FOOTER            =
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
 HTML_STYLESHEET        =
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
 HTML_ALIGN_MEMBERS     = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compressed HTML help file (.chm)
-# of the generated HTML documentation.
-
 GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
 CHM_FILE               =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
 HHC_LOCATION           =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
 GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
 BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
 TOC_EXPAND             = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
 DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
 ENUM_VALUES_PER_LINE   = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
 GENERATE_TREEVIEW      = YES
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
 TREEVIEW_WIDTH         = 250
-
 #---------------------------------------------------------------------------
 # configuration options related to the LaTeX output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
 GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
 LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
 LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
 MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
 COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
 PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
 EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
 LATEX_HEADER           =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
 PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
 USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
 LATEX_BATCHMODE        = YES
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
 LATEX_HIDE_INDICES     = NO
-
 #---------------------------------------------------------------------------
 # configuration options related to the RTF output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
 GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
 RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
 COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
 RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
 RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
 RTF_EXTENSIONS_FILE    =
-
 #---------------------------------------------------------------------------
 # configuration options related to the man page output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
 GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
 MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
 MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
 MAN_LINKS              = NO
-
 #---------------------------------------------------------------------------
 # configuration options related to the XML output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
 GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
 XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
 XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
 XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
 XML_PROGRAMLISTING     = YES
-
 #---------------------------------------------------------------------------
 # configuration options for the AutoGen Definitions output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
 GENERATE_AUTOGEN_DEF   = NO
-
 #---------------------------------------------------------------------------
 # configuration options related to the Perl module output
 #---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
 GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
 PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
 PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
 PERLMOD_MAKEVAR_PREFIX =
-
 #---------------------------------------------------------------------------
 # Configuration options related to the preprocessor
 #---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
 ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
 MACRO_EXPANSION        = YES
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
 EXPAND_ONLY_PREDEF     = YES
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
 SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
 INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
 INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED             =							\
-			"mlc_unqualif(T)=typename mln::metal::unqualif<T>::ret"	\
+PREDEFINED             = "mlc_unqualif(T)=typename mln::metal::unqualif<T>::ret" \
 			"mln_piter(T)=typename T::piter"			\
 			"mln_fwd_piter(T)=typename T::fwd_piter"		\
 			"mln_bkd_piter(T)=typename T::bkd_piter"		\
@@ -1068,231 +211,42 @@
 			"mln_coord(T)=typename T::coord"			\
 			"mln_point(T)=typename T::point"			\
 			"mln_dpoint(T)=typename T::dpoint"
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES
-# then this tag can be used to specify a list of macro names that
-# should be expanded.  The macro definition that is found in the
-# sources will be used.  Use the PREDEFINED tag if you want to use a
-# different macro definition.
-
 EXPAND_AS_DEFINED      =
-
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
 SKIP_FUNCTION_MACROS   = YES
-
 #---------------------------------------------------------------------------
 # Configuration::additions related to external references
 #---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
 TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
 GENERATE_TAGFILE       =
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
 ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
 EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
 PERL_PATH              = /usr/bin/perl
-
 #---------------------------------------------------------------------------
 # Configuration options related to the dot tool
 #---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
 CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using
-# the \msc command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert
-# it in the documentation. The MSCGEN_PATH tag allows you to specify
-# the directory where the mscgen tool resides. If left empty the tool
-# is assumed to be found in the default search path.
-
-MSCGEN_PATH            =
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
 HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
 HAVE_DOT               = YES
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
 CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
 COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
 GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
 UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
 TEMPLATE_RELATIONS     = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
 INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
 INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a call dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable call graphs for selected
-# functions only using the \callgraph command.
-
 CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then doxygen will
-# generate a caller dependency graph for every global function or class method.
-# Note that enabling this option will significantly increase the time of a run.
-# So in most cases it will be better to enable caller graphs for selected
-# functions only using the \callergraph command.
-
 CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
 GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
 DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
 DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
 DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
 DOTFILE_DIRS           =
-
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen will always
-# show the root nodes and its direct children regardless of this setting.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, which results in a white background.
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-
+MAX_DOT_GRAPH_DEPTH    = 1000
 DOT_TRANSPARENT        = NO
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
 DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
 GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
 DOT_CLEANUP            = YES
-
 #---------------------------------------------------------------------------
 # Configuration::additions related to the search engine
 #---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
 SEARCHENGINE           = NO
Index: trunk/milena/doc/Makefile.am
===================================================================
--- trunk/milena/doc/Makefile.am	(revision 1605)
+++ trunk/milena/doc/Makefile.am	(revision 1606)
@@ -1,19 +1,29 @@
 DOXYGEN = doxygen
 
-.PHONY: doc html
+.PHONY: doc user-doc internal-doc html html_user
 
 doc: html
 
+internal-doc: html
+
+user-doc: html_user
+
+
 html-local: Doxyfile
 	$(DOXYGEN)
 
+html_user: Doxyfile_user
+	$(DOXYGEN)
+
+
 edit = sed -e "s|@ID@|$$Id|" \
 	   -e 's,@PACKAGE_NAME\@,$(PACKAGE_NAME),g' \
 	   -e 's,@PACKAGE_VERSION\@,$(PACKAGE_VERSION),g' \
 	   -e 's,@top_builddir\@,$(top_builddir),g' \
 	   -e 's,@top_srcdir\@,$(top_srcdir),g'
 
-EXTRA_DIST = Doxyfile.in
+EXTRA_DIST = Doxyfile.in \
+             Doxyfile_user.in
 CLEANFILES = Doxyfile
 # Sed is used to generate Doxyfile from Doxyfile.in instead of
 # configure, because the former is way faster than the latter.
@@ -23,5 +33,10 @@
 	Id=`grep '^\$$Id' $(top_srcdir)/ChangeLog`; \
 	$(edit) $(srcdir)/Doxyfile.in >Doxyfile
 
+Doxyfile_user: $(top_srcdir)/ChangeLog $(srcdir)/Doxyfile_user.in
+	Id=`grep '^\$$Id' $(top_srcdir)/ChangeLog`; \
+	$(edit) $(srcdir)/Doxyfile_user.in >Doxyfile
+
 clean-local:
-	rm -rf html latex
+	rm -rf html latex user
+
Index: trunk/milena/mln/histo/all.hh
===================================================================
--- trunk/milena/mln/histo/all.hh	(revision 1605)
+++ trunk/milena/mln/histo/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of histograms.
   namespace histo
   {
-    /// Implementation namespace of histo namespace.
+    /// \internal Implementation namespace of histo namespace.
     namespace impl {}
   }
 
Index: trunk/milena/mln/debug/all.hh
===================================================================
--- trunk/milena/mln/debug/all.hh	(revision 1605)
+++ trunk/milena/mln/debug/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of routines that help to debug.
   namespace debug
   {
-    /// Implementation namespace of debug namespace.
+    /// \internal Implementation namespace of debug namespace.
     namespace impl {}
   }
 
Index: trunk/milena/mln/core/decorated_image.hh
===================================================================
--- trunk/milena/mln/core/decorated_image.hh	(revision 1605)
+++ trunk/milena/mln/core/decorated_image.hh	(revision 1606)
@@ -47,6 +47,7 @@
   namespace internal
   {
 
+    /// \internal
     template <typename I, typename E>
     struct decorated_image_impl_
     {
@@ -54,12 +55,14 @@
       void write_(const mln_psite(I)& p, const mln_value(I)& v);
     };
 
+    /// \internal
     template <typename I, typename E>
     struct decorated_image_impl_< const I, E >
     {
       typedef mln::value::proxy<const E> lvalue;
     };
 
+    /// \internal
     template <typename I, typename D>
     struct data_< decorated_image<I,D> >
     {
@@ -130,8 +133,7 @@
   namespace internal
   {
 
-    // internal::data_< decorated_image<I,S> >
-
+    // \internal internal::data_< decorated_image<I,S> >
     template <typename I, typename D>
     inline
     data_< decorated_image<I,D> >::data_(I& ima, const D& deco)
@@ -170,7 +172,7 @@
 
   namespace internal
   {
-
+    /// \internal
     template <typename I, typename E>
     inline
     void
Index: trunk/milena/mln/core/image_if.hh
===================================================================
--- trunk/milena/mln/core/image_if.hh	(revision 1605)
+++ trunk/milena/mln/core/image_if.hh	(revision 1606)
@@ -49,7 +49,7 @@
   template <typename I, typename F> struct image_if;
 
 
-  // internal::data_.
+  /// \internal internal::data_.
 
   namespace internal
   {
@@ -120,20 +120,20 @@
 
   /// ima | f creates an image_if with the image ima and the function
   /// f.
-  /// {{{
   template <typename I, typename F>
   image_if<I,F>
   operator | (Image<I>& ima, const Function_p2b<F>& f);
 
+  /// ima | f creates an image_if with the image ima and the function
+  /// f.
   template <typename I, typename F>
   image_if<const I,F>
   operator | (const Image<I>& ima, const Function_p2b<F>& f);
-  /// }}}
 
 
 # ifndef MLN_INCLUDE_ONLY
 
-  // internal::data_
+  /// \internal internal::data_
 
   namespace internal
   {
Index: trunk/milena/mln/core/internal/force_exact.hh
===================================================================
--- trunk/milena/mln/core/internal/force_exact.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/force_exact.hh	(revision 1606)
@@ -32,7 +32,6 @@
  *
  * \brief Definition of a violent cast for internal use only.
  *
- * \internal
  */
 
 
@@ -43,16 +42,12 @@
   namespace internal
   {
 
-    /*! \brief Violent cast.
-     *
-     * \internal
-     *
-     * This cast is an alternative to the mln::exact cast.  It is used
-     * for objects than do not derive from mln::Object.
-     *
-     * \warning Do not to use this cast!   
-     *
-     * \see mln::exact
+    /*! \internal Violent cast.
+     * This cast is an alternative to the mln::exact cast.
+     * It is used for objects than do not derive from
+     * mln::Object.
+     * Warning Do not to use this cast!
+     * see mln::exact
      */ 
     template <typename E, typename T>
     E& force_exact(const T& ref)
Index: trunk/milena/mln/core/internal/pixel_iterator_base.hh
===================================================================
--- trunk/milena/mln/core/internal/pixel_iterator_base.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/pixel_iterator_base.hh	(revision 1606)
@@ -45,7 +45,7 @@
   {
 
 
-    /*! \brief A base class for pixel iterators. 
+    /*! \internal A base class for pixel iterators.
      *
      */
     template <typename I, typename E>
Index: trunk/milena/mln/core/internal/image_primary.hh
===================================================================
--- trunk/milena/mln/core/internal/image_primary.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/image_primary.hh	(revision 1606)
@@ -43,9 +43,8 @@
   {
 
 
-    /*! \brief A base class for primary images.
+    /*! \internal A base class for primary images.
      *
-     * \internal
      */
     template <typename S, typename E>
     struct image_primary_ : public image_base_<S, E>
Index: trunk/milena/mln/core/internal/coord_impl.hh
===================================================================
--- trunk/milena/mln/core/internal/coord_impl.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/coord_impl.hh	(revision 1606)
@@ -42,16 +42,18 @@
   namespace internal
   {
 
-    // coord_impl
 
-    /*! \brief Implementation class to equip generalized points with
+    /// \internal coord_impl
+
+
+    /* \internal Implementation class to equip generalized points with
      * explicit access to their coordinates.
      *
-     * \internal
      */
     template <unsigned n, typename C, typename E>
     struct coord_impl_;
 
+    /// \internal
     template <typename C, typename E>
     struct coord_impl_<1, C, E>
     {
@@ -61,6 +63,7 @@
 
     };
 
+    /// \internal
     template <typename C, typename E>
     struct coord_impl_<2, C, E>
     {
@@ -68,6 +71,7 @@
       C col() const;
     };
 
+    /// \internal
     template <typename C, typename E>
     struct coord_impl_<3, C, E>
     {
@@ -77,11 +81,13 @@
     };
 
 
-    // mutable_coord_impl
+    // \internal mutable_coord_impl
 
+    /// \internal
     template <unsigned n, typename C, typename E>
     struct mutable_coord_impl_;
 
+    /// \internal
     template <typename C, typename E>
     struct mutable_coord_impl_<1, C, E>
     {
@@ -89,6 +95,7 @@
       C& ind();
     };
 
+    /// \internal
     template <typename C, typename E>
     struct mutable_coord_impl_<2, C, E>
     {
@@ -98,6 +105,7 @@
       C& col();
     };
 
+    /// \internal
     template <typename C, typename E>
     struct mutable_coord_impl_<3, C, E>
     {
@@ -112,9 +120,9 @@
 
 # ifndef MLN_INCLUDE_ONLY
     
-    // coord_impl
+    // \internal coord_impl
 
-    // 1
+    // \internal 1
 
     template <typename C, typename E>
     inline
@@ -123,7 +131,7 @@
       return internal::force_exact<E>(*this)[0];
     }
 
-    // 2
+    // \internal 2
 
     template <typename C, typename E>
     inline
@@ -139,7 +147,7 @@
       return internal::force_exact<E>(*this)[1];
     }
 
-    // 3
+    // \internal 3
 
     template <typename C, typename E>
     inline
@@ -163,9 +171,9 @@
     }
 
 
-    // mutable_coord_impl
+    // \internal mutable_coord_impl
 
-    // 1
+    // \internal 1
 
     template <typename C, typename E>
     inline
@@ -181,7 +189,7 @@
       return internal::force_exact<E>(*this)[0];
     }
 
-    // 2
+    // \internal 2
 
     template <typename C, typename E>
     inline
@@ -211,7 +219,7 @@
       return internal::force_exact<E>(*this)[1];
     }
 
-    // 3
+    // \internal 3
 
     template <typename C, typename E>
     inline
Index: trunk/milena/mln/core/internal/image_if_base.hh
===================================================================
--- trunk/milena/mln/core/internal/image_if_base.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/image_if_base.hh	(revision 1606)
@@ -46,10 +46,10 @@
   namespace internal
   {
 
-    // Fwd decl.
+    // \internal Fwd decl.
     template <typename I, typename F, typename E> struct image_if_base_;
 
-    // data_.
+    // \internal data_.
 
     template <typename I, typename F, typename E>
     struct data_< image_if_base_<I,F,E> >
@@ -95,7 +95,7 @@
   namespace internal
   {
     
-    /*! \brief An base image class for image_if_'something.
+    /*! \internal An base image class for image_if_'something.
      *
      */
     template <typename I, typename F, typename E>
@@ -123,7 +123,7 @@
     
 # ifndef MLN_INCLUDE_ONLY
     
-//     // init_
+//     // \internal init_
     
 //     template <typename I, typename F, typename E>
 //     void init_(tag::function_t, F& f, const image_if_base_<I,F,E>& model)
@@ -141,7 +141,7 @@
 //       target.init_(ima, f);
 //     }
     
-    // internal::data_< image_if_base_<I,S> >
+    // \internal internal::data_< image_if_base_<I,S> >
 
     template <typename I, typename F, typename E>
     inline
@@ -151,7 +151,7 @@
     {
     }
     
-    // image_if_base_<I,F,E>
+    // \internal image_if_base_<I,F,E>
     
     template <typename I, typename F, typename E>
     inline
Index: trunk/milena/mln/core/internal/image_identity.hh
===================================================================
--- trunk/milena/mln/core/internal/image_identity.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/image_identity.hh	(revision 1606)
@@ -43,11 +43,9 @@
   {
 
 
-    /*! \brief A base class for image morphers w.r.t. identity.
-     *
+    /*! \internal A base class for image morphers w.r.t. identity.
      * Parameter \p S is a point set type.
      *
-     * \internal
      */
     template <typename I, typename S, typename E>
     class image_identity_ : public image_morpher_<I, S, E>
Index: trunk/milena/mln/core/internal/point_iterator_base.hh
===================================================================
--- trunk/milena/mln/core/internal/point_iterator_base.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/point_iterator_base.hh	(revision 1606)
@@ -44,11 +44,9 @@
   {
 
 
-    /*! \brief A base class for point iterators.
-     *
+    /*! \internal A base class for point iterators.
      * Parameter \c P is a point site type.
      *
-     * \internal
      */
     template <typename P, typename E>
     struct point_iterator_base_ : public Point_Iterator<E>
Index: trunk/milena/mln/core/internal/piter_adaptor.hh
===================================================================
--- trunk/milena/mln/core/internal/piter_adaptor.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/piter_adaptor.hh	(revision 1606)
@@ -43,8 +43,7 @@
   namespace internal
   {
 
-    /*! \brief A base class for point iterator adaptors.
-     *
+    /*! \internal A base class for point iterator adaptors.
      * Parameter \c Pi is the type of the point iterator adaptee;
      * parameter E is the exact type.
      */
Index: trunk/milena/mln/core/internal/point_set_base.hh
===================================================================
--- trunk/milena/mln/core/internal/point_set_base.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/point_set_base.hh	(revision 1606)
@@ -43,11 +43,9 @@
   namespace internal
   {
 
-    /*! \brief A base class for point set classes.
-     *
+    /*! \internal A base class for point set classes.
      * \p P is a point site type.
      *
-     * \internal
      */
     template <typename P, typename E>
     struct point_set_base_ : public Point_Set<E>
Index: trunk/milena/mln/core/internal/pixel_impl.hh
===================================================================
--- trunk/milena/mln/core/internal/pixel_impl.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/pixel_impl.hh	(revision 1606)
@@ -43,10 +43,9 @@
   namespace internal
   {
 
-    /*! \brief Implementation class to equip generalized pixel
+    /*! \internal Implementation class to equip generalized pixel
      *  classes based on mutable images.
      *
-     * \internal
      */
     template <typename I, typename E>
     class pixel_impl_
@@ -96,10 +95,9 @@
     };
 
 
-    /*! \brief Implementation class to equip generalized pixel
+    /*! \internal Implementation class to equip generalized pixel
      *  classes based on constant images.
      *
-     * \internal
      */
     template <typename I, typename E>
     class pixel_impl_< const I, E >
Index: trunk/milena/mln/core/internal/image_domain_morpher.hh
===================================================================
--- trunk/milena/mln/core/internal/image_domain_morpher.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/image_domain_morpher.hh	(revision 1606)
@@ -43,11 +43,9 @@
   {
 
 
-    /*! \brief A base class for image morphers w.r.t. domain.
-     *
+    /*! \internal A base class for image morphers w.r.t. domain.
      * Parameter \p S is a point set type.
      *
-     * \internal
      */
     template <typename I, typename S, typename E>
     class image_domain_morpher_ : public image_morpher_<I, S, E>
Index: trunk/milena/mln/core/internal/run_image.hh
===================================================================
--- trunk/milena/mln/core/internal/run_image.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/run_image.hh	(revision 1606)
@@ -43,8 +43,7 @@
   namespace internal
   {
 
-    /*! \brief Factorization class for run_image.
-     *
+    /*! \internal Factorization class for run_image.
      * Parameter \c T is the type of the image value.
      * Parameter \c P is the type of the image point.
      * Parameter \c E is the Exact type of the image.
Index: trunk/milena/mln/core/internal/fixme.hh
===================================================================
--- trunk/milena/mln/core/internal/fixme.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/fixme.hh	(revision 1606)
@@ -40,10 +40,9 @@
   namespace internal
   {
 
-    /*! \brief A FIXME class to make explicit in code that a type is
+    /*! \internal A FIXME class to make explicit in code that a type is
      *  not yet implemented.
      *
-     * \internal
      */
     struct fixme
     {};
Index: trunk/milena/mln/core/internal/box_impl.hh
===================================================================
--- trunk/milena/mln/core/internal/box_impl.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/box_impl.hh	(revision 1606)
@@ -43,16 +43,16 @@
   namespace internal
   {
 
-    // box_impl
+    // \internal box_impl
 
-    /*! \brief Implementation class to equip objects having a bounding
+    /*! \internal Implementation class to equip objects having a bounding
      * box.
      *
-     * \internal
      */
     template <unsigned n, typename C, typename E>
     struct box_impl_;
 
+    /// \internal
     template <typename C, typename E> // FIXME: Add an extra param to replace 'unsigned'.
     struct box_impl_<3, C, E>
     {
@@ -84,6 +84,7 @@
       C max_col() const;
     };
 
+    /// \internal
     template <typename C, typename E> // FIXME: Add an extra param to replace 'unsigned'.
     struct box_impl_<2, C, E>
     {
@@ -106,6 +107,7 @@
       C max_col() const;
     };
 
+    /// \internal
     template <typename C, typename E> // FIXME: Add an extra param to replace 'unsigned'.
     struct box_impl_<1, C, E>
     {
@@ -122,9 +124,9 @@
 
 # ifndef MLN_INCLUDE_ONLY
 
-    // box_impl
+    // \internal box_impl
 
-    // 3
+    // \internal 3
 
     template <typename C, typename E>
     inline
@@ -190,7 +192,7 @@
     }
 
 
-    // 2
+    // \internal 2
 
     template <typename C, typename E>
     inline
@@ -234,7 +236,7 @@
       return internal::force_exact<E>(*this).bbox().pmax()[1];
     }
 
-    // 1
+    // \internal 1
 
     template <typename C, typename E>
     inline
Index: trunk/milena/mln/core/internal/dpoints_base.hh
===================================================================
--- trunk/milena/mln/core/internal/dpoints_base.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/dpoints_base.hh	(revision 1606)
@@ -44,8 +44,8 @@
   namespace internal
   {
  
-
-    /*! \brief FIXME.
+    /*! \internal FIXME.
+     *
      */
     template <typename D, typename E>
     class dpoints_base_ : protected internal::set_of_<D>
Index: trunk/milena/mln/core/internal/image_value_morpher.hh
===================================================================
--- trunk/milena/mln/core/internal/image_value_morpher.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/image_value_morpher.hh	(revision 1606)
@@ -43,11 +43,9 @@
   {
 
 
-    /*! \brief A base class for image morphers w.r.t. value.
-     *
+    /*! \internal A base class for image morphers w.r.t. value.
      * Parameter \p S is a point set type.
      *
-     * \internal
      */
     template <typename I, typename E>
     class image_value_morpher_ : public image_morpher_<I, mln_pset(I), E>
Index: trunk/milena/mln/core/internal/image_base.hh
===================================================================
--- trunk/milena/mln/core/internal/image_base.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/image_base.hh	(revision 1606)
@@ -48,12 +48,12 @@
   namespace internal
   {
 
-    /// Class of image internal data.
+    /// \internal Class of image internal data.
+    /// FIXME: Say more about it!
+
     template <typename I>
     struct data_;
 
-    // FIXME: Say more about it!
-
   } // end of namespace mln::internal
 
 
@@ -61,10 +61,9 @@
   namespace internal
   {
 
-    /*! \brief Return the lvalue type when an image with type \c I is
+    /*! \internal Return the lvalue type when an image with type \c I is
      *  morphed.
      *
-     * \internal
      */
     template <typename I>
     struct morpher_lvalue_
@@ -88,11 +87,9 @@
     };
 
 
-    /*! \brief A base class for images.
-     *
+    /*! \internal A base class for images.
      * Parameter \p S is a point set type.
      *
-     * \internal
      */
     template <typename S, typename E>
     struct image_base_
Index: trunk/milena/mln/core/internal/image_morpher.hh
===================================================================
--- trunk/milena/mln/core/internal/image_morpher.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/image_morpher.hh	(revision 1606)
@@ -44,11 +44,9 @@
   namespace internal
   {
 
-    /*! \brief A base class for images that are morphers.
+    /*! \internal A base class for images that are morphers. Parameter
+     * \c I is the underlying-morphed image type.
      *
-     * Parameter \c I is the underlying-morphed image type.
-     *
-     *  \internal
      */
     template <typename I, typename S, typename E>
     class image_morpher_ : public image_base_<S, E>
@@ -94,6 +92,7 @@
 // FIXME: Lines above have been inactivated because they are either
 // prioritary or ambiguous.
 
+    /// \internal
     template <typename Subject, typename T,
 	      typename J>
     void init_(Subject s, T& target, const Image<J>& model);
Index: trunk/milena/mln/core/internal/set_of.hh
===================================================================
--- trunk/milena/mln/core/internal/set_of.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/set_of.hh	(revision 1606)
@@ -47,17 +47,11 @@
   namespace internal
   {
 
-    /*! \brief An "efficient" mathematical set class.
-     *
-     * \internal
-     *
+    /*! \internal An "efficient" mathematical set class.
      * This set class is designed to store a mathematical set and to
      * present it to the user as a linear array (std::vector).
-     *
      * Elements are stored by copy.  Implementation is lazy.
-     *
      * \invariant \a v_.size() == s_.size()
-     *
      * The parameter \c E is the element type, which shall not be
      * const-qualified.
      *
@@ -171,7 +165,7 @@
     };
 
 
-    /*! \brief Print a set \p s into the output stream \p
+    /*! \internal Print a set \p s into the output stream \p
      *  ostr.
      *
      * \param[in,out] ostr An output stream.
Index: trunk/milena/mln/core/internal/check/image_all.hh
===================================================================
--- trunk/milena/mln/core/internal/check/image_all.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/check/image_all.hh	(revision 1606)
@@ -44,17 +44,17 @@
   namespace internal
   {
 
-    /*! Namespace of all image-related internal checks.
+    /*! \internal Namespace of all image-related internal checks.
      */
     namespace check
     {
 
+      /// \internal
       template <typename E>
       struct image_all_
 	:
 	public image_fastest_< E, typename mlc_equal(mln_trait_image_speed(E),
 						     trait::image::speed::fastest)::eval >
-        // , ...
       {
       };
 
Index: trunk/milena/mln/core/internal/check/image_fastest.hh
===================================================================
--- trunk/milena/mln/core/internal/check/image_fastest.hh	(revision 1605)
+++ trunk/milena/mln/core/internal/check/image_fastest.hh	(revision 1606)
@@ -46,7 +46,7 @@
     namespace check
     {
 
-      /*! \brief FIXME
+      /*! \internal FIXME
        */
       template < typename E, typename B = metal::true_ >
       struct image_fastest_
@@ -70,6 +70,7 @@
       };
 
 
+      /// \internal
       template <typename E>
       struct image_fastest_< E, metal::false_ >
       {
Index: trunk/milena/mln/core/image_if_value.hh
===================================================================
--- trunk/milena/mln/core/image_if_value.hh	(revision 1605)
+++ trunk/milena/mln/core/image_if_value.hh	(revision 1606)
@@ -49,7 +49,7 @@
   template <typename I> struct image_if_value;
 
 
-  // internal::data_.
+  /// \internal internal::data_.
 
   namespace internal
   {
@@ -126,15 +126,15 @@
 
   /// ima | v creates an image_if_value with the image ima and the
   /// value v.
-  /// {{{
   template <typename I>
   image_if_value<I>
   operator | (Image<I>& ima, const mln_value(I)& v);
 
+  /// ima | v creates an image_if_value with the image ima and the
+  /// value v.
   template <typename I>
   image_if_value<const I>
   operator | (const Image<I>& ima, const mln_value(I)& v);
-  /// }}}
 
 
 # ifndef MLN_INCLUDE_ONLY
Index: trunk/milena/mln/core/image_if_interval.hh
===================================================================
--- trunk/milena/mln/core/image_if_interval.hh	(revision 1605)
+++ trunk/milena/mln/core/image_if_interval.hh	(revision 1606)
@@ -57,8 +57,7 @@
   template <typename I> struct image_if_interval;
 
 
-  // internal::data_.
-
+  /// \internal internal::data_.
   namespace internal
   {
 
@@ -111,15 +110,15 @@
 
   /// ima | vv creates an image_if_interval with the image ima and the
   /// interval vv.
-  /// {{{
   template <typename I>
   image_if_interval<I>
   operator | (Image<I>& ima, const value::interval_<mln_value(I)>& vv);
 
+  /// ima | vv creates an image_if_interval with the image ima and the
+  /// interval vv.
   template <typename I>
   image_if_interval<const I>
   operator | (const Image<I>& ima, const value::interval_<mln_value(I)>& vv);
-  /// }}}
 
 
 
Index: trunk/milena/mln/core/cast_image.hh
===================================================================
--- trunk/milena/mln/core/cast_image.hh	(revision 1605)
+++ trunk/milena/mln/core/cast_image.hh	(revision 1606)
@@ -50,7 +50,7 @@
 
   namespace internal
   {
-
+    /// \internal
     template <typename T, typename I>
     struct data_< cast_image_<T,I> >
     {
Index: trunk/milena/mln/core/dpoint.hh
===================================================================
Index: trunk/milena/mln/core/concept/object.hh
===================================================================
--- trunk/milena/mln/core/concept/object.hh	(revision 1605)
+++ trunk/milena/mln/core/concept/object.hh	(revision 1606)
@@ -61,13 +61,13 @@
  */
 namespace mln
 {
-  /// Implementation namespace of mln namespace.
+  /// \internal Implementation namespace of mln namespace.
   namespace impl {}
 
-  /// Internal namespace of mln namespace.
+  /// \internal Internal namespace of mln namespace.
   namespace internal
   {
-    /// FIXME : doc
+    /// \internal FIXME : doc
     namespace check {}
   }
 
Index: trunk/milena/mln/core/t_image.hh
===================================================================
--- trunk/milena/mln/core/t_image.hh	(revision 1605)
+++ trunk/milena/mln/core/t_image.hh	(revision 1606)
@@ -46,7 +46,7 @@
   namespace internal
   {
     
-    /// Data held by a mln::t_image.
+    /// \internal Data held by a mln::t_image.
     template <typename I>
     struct data_< t_image<I> >
     {
Index: trunk/milena/mln/core/image1d.hh
===================================================================
--- trunk/milena/mln/core/image1d.hh	(revision 1605)
+++ trunk/milena/mln/core/image1d.hh	(revision 1606)
@@ -59,7 +59,7 @@
   namespace internal
   {
 
-    /// Data structure for \c mln::image1d<T>.
+    /// \internal Data structure for \c mln::image1d<T>.
     template <typename T>
     struct data_< image1d<T> >
     {
@@ -239,7 +239,7 @@
     target.init_(b, bdr);
   }
 
-  // internal::data_< image1d<T> >
+  // \internal internal::data_< image1d<T> >
 
   namespace internal
   {
Index: trunk/milena/mln/core/image2d.hh
===================================================================
--- trunk/milena/mln/core/image2d.hh	(revision 1605)
+++ trunk/milena/mln/core/image2d.hh	(revision 1606)
@@ -56,9 +56,10 @@
   template <typename T> struct image2d;
 
 
-
   namespace internal
   {
+
+    /// \internal
     template <typename T>
     struct data_< image2d<T> >
     {
Index: trunk/milena/mln/core/fi_adaptor.hh
===================================================================
--- trunk/milena/mln/core/fi_adaptor.hh	(revision 1605)
+++ trunk/milena/mln/core/fi_adaptor.hh	(revision 1606)
@@ -61,6 +61,7 @@
 
   namespace internal
   {
+    /// \internal
     template <typename I>
     struct data_< fi_adaptor<I> >
     {
Index: trunk/milena/mln/core/image3d.hh
===================================================================
--- trunk/milena/mln/core/image3d.hh	(revision 1605)
+++ trunk/milena/mln/core/image3d.hh	(revision 1606)
@@ -60,6 +60,7 @@
   namespace internal
   {
 
+    /// \internal
     template <typename T>
     struct data_< image3d<T> >
     {
Index: trunk/milena/mln/metal/math/all.hh
===================================================================
--- trunk/milena/mln/metal/math/all.hh	(revision 1605)
+++ trunk/milena/mln/metal/math/all.hh	(revision 1606)
@@ -43,7 +43,7 @@
     /// Namespace of static mathematical functions.
     namespace math
     {
-      /// Implementation namespace of metal::math namespace.
+      /// \internal Implementation namespace of metal::math namespace.
       namespace impl {}
     }
 
Index: trunk/milena/mln/metal/all.hh
===================================================================
--- trunk/milena/mln/metal/all.hh	(revision 1605)
+++ trunk/milena/mln/metal/all.hh	(revision 1606)
@@ -39,7 +39,7 @@
   /// Namespace of meta-programming tools.
   namespace metal
   {
-    /// Implementation namespace of metal namespace.
+    /// \internal Implementation namespace of metal namespace.
     namespace impl {}
 
   }
Index: trunk/milena/mln/arith/all.hh
===================================================================
--- trunk/milena/mln/arith/all.hh	(revision 1605)
+++ trunk/milena/mln/arith/all.hh	(revision 1606)
@@ -40,10 +40,10 @@
   /// Namespace of arithmetic.
   namespace arith
   {
-    /// Implementation namespace of arith namespace.
+    /// \internal Implementation namespace of arith namespace.
     namespace impl {
 
-      /// Generic implementation namespace of arith namespace.
+      /// \internal Generic implementation namespace of arith namespace.
       namespace generic {
 
       }
Index: trunk/milena/mln/level/naive/all.hh
===================================================================
--- trunk/milena/mln/level/naive/all.hh	(revision 1605)
+++ trunk/milena/mln/level/naive/all.hh	(revision 1606)
@@ -42,11 +42,11 @@
   namespace level
   {
 
-    /// Namespace of image processing routines related to pixel levels
+    /// \brief Namespace of image processing routines related to pixel levels
     /// with naive approach.
     namespace naive
     {
-      /// Implementation namespace of level::naive namespace.
+      /// \internal Implementation namespace of level::naive namespace.
       namespace impl {}
     }
 
Index: trunk/milena/mln/level/naive/median.hh
===================================================================
--- trunk/milena/mln/level/naive/median.hh	(revision 1605)
+++ trunk/milena/mln/level/naive/median.hh	(revision 1606)
@@ -91,7 +91,7 @@
 	}
 
 
-      } // end of namespace mln::level::impl
+      } // end of namespace mln::level::naive::impl
 
 
 
Index: trunk/milena/mln/level/all.hh
===================================================================
--- trunk/milena/mln/level/all.hh	(revision 1605)
+++ trunk/milena/mln/level/all.hh	(revision 1606)
@@ -41,10 +41,10 @@
   namespace level
   {
 
-    /// Implementation namespace of level namespace.
+    /// \internal Implementation namespace of level namespace.
     namespace impl {
 
-      /// Generic implementation namespace of level namespace.
+      /// \internal Generic implementation namespace of level namespace.
       namespace generic {}
 
     }
Index: trunk/milena/mln/level/approx/all.hh
===================================================================
--- trunk/milena/mln/level/approx/all.hh	(revision 1605)
+++ trunk/milena/mln/level/approx/all.hh	(revision 1606)
@@ -38,22 +38,18 @@
 namespace mln
 {
 
-
   namespace level
   {
 
-    /*! \namespace approx
-     *
-     * \brief Namespace of image processing routines related to pixel
-     * levels with approximation.
-     */
+    /// \brief Namespace of image processing routines related to pixel
+    /// levels with approximation.
     namespace approx
     {
-      /// Implementation namespace of level::approx namespace.
+      /// \internal Implementation namespace of level::approx namespace.
       namespace impl {}
     }
 
-  } // end of namespace level
+  } // end of namespace mln::level
 
 } // end of namespace mln
 
Index: trunk/milena/mln/linear/all.hh
===================================================================
--- trunk/milena/mln/linear/all.hh	(revision 1605)
+++ trunk/milena/mln/linear/all.hh	(revision 1606)
@@ -41,7 +41,7 @@
   namespace linear
   {
 
-    /// Namespace of linear image processing routines implementation details.
+    /// \internal Namespace of linear image processing routines implementation details.
     namespace impl
     {
     }
@@ -50,7 +50,7 @@
     namespace local
     {
 
-      /// Namespace of local linear routines implementation details.
+      /// \internal Namespace of local linear routines implementation details.
       namespace impl
       {
       }
Index: trunk/milena/mln/accu/all.hh
===================================================================
--- trunk/milena/mln/accu/all.hh	(revision 1605)
+++ trunk/milena/mln/accu/all.hh	(revision 1606)
@@ -44,9 +44,9 @@
   /// Namespace of accumulators.
   namespace accu
   {
-    /// Implementation namespace of accumulator namespace.
+    /// \internal Implementation namespace of accumulator namespace.
     namespace impl {}
-    /// Internal namespace of accumulators.
+    /// \internal Internal namespace of accumulators.
     namespace internal {}
   }
 
Index: trunk/milena/mln/accu/internal/base.hh
===================================================================
--- trunk/milena/mln/accu/internal/base.hh	(revision 1605)
+++ trunk/milena/mln/accu/internal/base.hh	(revision 1606)
@@ -48,8 +48,7 @@
     namespace internal
     {
 
-      /*! Generic min accumulator class.
-       *
+      /*! \internal Generic min accumulator class.
        * Base class for implementation of accumulator classes.
        */
       template <typename R, typename E>
Index: trunk/milena/mln/value/graylevel.hh
===================================================================
--- trunk/milena/mln/value/graylevel.hh	(revision 1605)
+++ trunk/milena/mln/value/graylevel.hh	(revision 1606)
@@ -248,10 +248,10 @@
 
     namespace internal
     {
-      // Fwd decl;
+      // \internal Fwd decl;
       template <typename T> struct convert_;
 
-      // convert for graylevel
+      // \internal convert for graylevel
       template <unsigned n>
       struct convert_< graylevel<n> >
       {
Index: trunk/milena/mln/value/float01_.hh
===================================================================
--- trunk/milena/mln/value/float01_.hh	(revision 1605)
+++ trunk/milena/mln/value/float01_.hh	(revision 1606)
@@ -118,6 +118,7 @@
     namespace internal
     {
 
+      /// \internal
       template <unsigned n>
       struct convert_< float01_<n> >
       {
Index: trunk/milena/mln/value/all.hh
===================================================================
--- trunk/milena/mln/value/all.hh	(revision 1605)
+++ trunk/milena/mln/value/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of materials related to pixel value types.
   namespace value
   {
-    /// Implementation namespace of value namespace.
+    /// \internal Implementation namespace of value namespace.
     namespace impl {}
   }
 
Index: trunk/milena/mln/value/internal/iterable_set.hh
===================================================================
--- trunk/milena/mln/value/internal/iterable_set.hh	(revision 1605)
+++ trunk/milena/mln/value/internal/iterable_set.hh	(revision 1606)
@@ -53,8 +53,7 @@
     namespace internal
     {
 
-      /*! Class that defines the set of values of type \c T.
-       *
+      /*! \internal Class that defines the set of values of type \c T.
        * This is the exhaustive iterable_set of values obtainable from type \c T.
        */
       template <typename T, typename E>
Index: trunk/milena/mln/value/internal/encoding.hh
===================================================================
--- trunk/milena/mln/value/internal/encoding.hh	(revision 1605)
+++ trunk/milena/mln/value/internal/encoding.hh	(revision 1606)
@@ -40,9 +40,11 @@
   namespace value
   {
 
+    /// \internal
     namespace internal
     {
 
+
       template <unsigned n> struct encoding_unsigned_;
 
       template <> struct encoding_unsigned_<8>  { typedef unsigned char  ret; };
Index: trunk/milena/mln/value/internal/value_like.hh
===================================================================
--- trunk/milena/mln/value/internal/value_like.hh	(revision 1605)
+++ trunk/milena/mln/value/internal/value_like.hh	(revision 1606)
@@ -48,13 +48,9 @@
     namespace internal
     {
 
-      /*! \brief Base class for value classes defined over another
-       *  type.
-       *
-       * \internal
-       *
-       * Parameters are \c V the equivalent value type and \c E the
-       * exact value type.
+      /*! \internal Base class for value classes defined over another
+       *  type. Parameters are \c V the equivalent value type and
+       *  \c E the exact value type.
        */
       template < typename V, // Equivalent.
 		 typename C, // Encoding.
@@ -89,19 +85,17 @@
       };
 
 
-      /*! \brief General definition of the "equal to" operator between
+      /*! \internal General definition of the "equal to" operator between
        * value-like types.
        *
-       * \relates value_like_
        */
       template <typename V, typename C, typename N, typename E>
       bool operator==(const value_like_<V,C,N,E>& lhs, const value_like_<V,C,N,E>& rhs);
 
 
-      /*! \brief General definition of the "less than" operator
+      /*! \internal General definition of the "less than" operator
        *  between value-like types.
        *
-       * \relates value_like_
        */
       template <typename V, typename C, typename N, typename E>
       bool operator<(const value_like_<V,C,N,E>& lhs, const value_like_<V,C,N,E>& rhs);
Index: trunk/milena/mln/value/internal/convert.hh
===================================================================
--- trunk/milena/mln/value/internal/convert.hh	(revision 1605)
+++ trunk/milena/mln/value/internal/convert.hh	(revision 1606)
@@ -44,7 +44,7 @@
 
     namespace internal
     {
-
+      /// \internal
       template <typename T>
       struct convert_
       {
@@ -54,6 +54,7 @@
 	static unsigned index_of_value(const T& v);
       };
 
+      /// \internal
       template <>
       struct convert_<bool>
       {
Index: trunk/milena/mln/value/stack.hh
===================================================================
--- trunk/milena/mln/value/stack.hh	(revision 1605)
+++ trunk/milena/mln/value/stack.hh	(revision 1606)
@@ -50,7 +50,7 @@
   {
 
 
-    /*! \brief data structure for stack_image.
+    /*! \internal data structure for stack_image.
      *
      */
     template <unsigned n, typename I>
Index: trunk/milena/mln/value/label.hh
===================================================================
--- trunk/milena/mln/value/label.hh	(revision 1605)
+++ trunk/milena/mln/value/label.hh	(revision 1606)
@@ -127,6 +127,7 @@
     namespace internal
     {
 
+      /// \internal
       template <unsigned n>
       struct convert_< label<n> >
       {
Index: trunk/milena/mln/border/all.hh
===================================================================
--- trunk/milena/mln/border/all.hh	(revision 1605)
+++ trunk/milena/mln/border/all.hh	(revision 1606)
@@ -40,10 +40,10 @@
   /// Namespace of routines related to image virtual (outer) border.
   namespace border
   {
-    /// Implementation namespace of border namespace.
+    /// \internal Implementation namespace of border namespace.
     namespace impl {
 
-      /// Generic implementation namespace of border namespace.
+      /// \internal Generic implementation namespace of border namespace.
       namespace generic {}
 
     }
Index: trunk/milena/mln/test/all.hh
===================================================================
--- trunk/milena/mln/test/all.hh	(revision 1605)
+++ trunk/milena/mln/test/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of image processing routines related to pixel tests.
   namespace test
   {
-    /// Implementation namespace of test namespace.
+    /// \internal Implementation namespace of test namespace.
     namespace impl {}
   }
 
Index: trunk/milena/mln/convert/all.hh
===================================================================
--- trunk/milena/mln/convert/all.hh	(revision 1605)
+++ trunk/milena/mln/convert/all.hh	(revision 1606)
@@ -36,7 +36,7 @@
 
 namespace mln
 {
-  /// Namespace of convertion routines.
+  /// \internal Namespace of convertion routines.
   namespace convert {}
 }
 
Index: trunk/milena/mln/pw/image.hh
===================================================================
--- trunk/milena/mln/pw/image.hh	(revision 1605)
+++ trunk/milena/mln/pw/image.hh	(revision 1606)
@@ -59,7 +59,7 @@
   namespace internal
   {
 
-    /// Data structure for mln::pw::image
+    /// \internal Data structure for mln::pw::image
     template <typename F, typename S>
     struct data_< mln::pw::image<F,S> >
     {
Index: trunk/milena/mln/geom/chamfer.hh
===================================================================
--- trunk/milena/mln/geom/chamfer.hh	(revision 1605)
+++ trunk/milena/mln/geom/chamfer.hh	(revision 1606)
@@ -59,7 +59,7 @@
     namespace impl
     {
 
-      // Functors.
+      // \internal Functors.
 
       template <typename I_, typename W_>
       struct chamfer_t
@@ -94,7 +94,7 @@
 	{}
       };
 
-      // Routines.
+      /// \internal Routines.
 
       template <typename I, typename W>
       inline
Index: trunk/milena/mln/geom/all.hh
===================================================================
--- trunk/milena/mln/geom/all.hh	(revision 1605)
+++ trunk/milena/mln/geom/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of all things related to geometry.
   namespace geom
   {
-    /// Implementation namespace of geom namespace.
+    /// \internal Implementation namespace of geom namespace.
     namespace impl {}
   }
 
Index: trunk/milena/mln/fun/x2x/all.hh
===================================================================
--- trunk/milena/mln/fun/x2x/all.hh	(revision 1605)
+++ trunk/milena/mln/fun/x2x/all.hh	(revision 1606)
@@ -44,7 +44,7 @@
     namespace x2x
     {
 
-      /// Internal namespace of functions form vector to vector.
+      /// \internal Internal namespace of functions form vector to vector.
       namespace internal
       {
       }
Index: trunk/milena/mln/fun/x2x/composed.hh
===================================================================
--- trunk/milena/mln/fun/x2x/composed.hh	(revision 1605)
+++ trunk/milena/mln/fun/x2x/composed.hh	(revision 1606)
@@ -56,11 +56,12 @@
       
       namespace internal
       {
+	/// \internal
 	template <typename F, typename G, typename E, bool is_bij>
 	struct helper_composed_;
 
 
-	/// Helper for describing a bijective composition.
+	/// \internal Helper for describing a bijective composition.
 	template <typename F, typename G, typename E>
 	struct helper_composed_< F, G, E, true>
 	  : public fun::internal::x2x_linear_impl_<mln_result(F), E >,
@@ -93,7 +94,7 @@
 	  G g_;
 	};
 
-	/// Helper for describing a non bijective composition.
+	/// \internal Helper for describing a non bijective composition.
 	template <typename F, typename G, typename E>
 	struct helper_composed_< F, G, E, false>
 	  : public fun::internal::x2x_linear_impl_<mln_result(F), E >,
@@ -174,7 +175,7 @@
       namespace internal
       {
 
-	// Implementation of the bijective version.
+	// \internal Implementation of the bijective version.
 
 	template <typename F, typename G, typename E>
 	inline
@@ -191,6 +192,7 @@
 	  this->m_ = f_.mat() * g_.mat();
 	}
 
+	/// \internal
 	template <typename F, typename G, typename E>
 	inline
 	typename helper_composed_<F,G,E,true>::invert
@@ -199,7 +201,7 @@
 	  return compose(g_.inv(), f_.inv());
 	}
 	
-
+	/// \internal
 	template <typename F, typename G, typename E>
 	inline
 	void
@@ -209,6 +211,7 @@
 	  this->m_ = this->f_.mat() * this->g_.mat();
 	}
 
+	/// \internal
 	template <typename F, typename G, typename E>
 	inline
 	void
@@ -218,14 +221,14 @@
 	  this->m_ = this->f_.mat() * this->g_.mat();
 	}
 
-	// Implementation of the non bijective version.
-
+	// \internal Implementation of the non bijective version.
 	template <typename F, typename G, typename E>
 	inline
 	helper_composed_<F,G,E,false>::helper_composed_()
 	{
 	}
 
+	/// \internal
 	template <typename F, typename G, typename E>
 	inline
 	helper_composed_<F,G,E,false>::helper_composed_(const F& f, const G& g)
@@ -235,6 +238,7 @@
 	  this->m_ = f_.mat() * g_.mat();
 	}
 
+	/// \internal
 	template <typename F, typename G, typename E>
 	inline
 	void
@@ -244,6 +248,7 @@
 	  this->m_ = this->f_.mat() * this->g_.mat();
 	}
 
+	/// \internal
 	template <typename F, typename G, typename E>
 	inline
 	void
Index: trunk/milena/mln/fun/all.hh
===================================================================
--- trunk/milena/mln/fun/all.hh	(revision 1605)
+++ trunk/milena/mln/fun/all.hh	(revision 1606)
@@ -41,7 +41,7 @@
   namespace fun
   {
 
-    /// Internal namespace of functions.
+    /// \internal Internal namespace of functions.
     namespace internal
     {
     }
Index: trunk/milena/mln/morpho/plus.hh
===================================================================
--- trunk/milena/mln/morpho/plus.hh	(revision 1605)
+++ trunk/milena/mln/morpho/plus.hh	(revision 1606)
@@ -53,14 +53,6 @@
     mln_concrete(I) plus(const Image<I>& lhs, const Image<J>& rhs);
 
 
-//     /*! Morphological plus, inplace version: either a "logical or" (if
-//      *  morpho on sets) or an "arithmetical plus" (if morpho on
-//      *  functions).
-//      */
-//     template <typename I, typename J>
-//     void plus_inplace(Image<I>& lhs, const Image<J>& rhs);
-
-
 # ifndef MLN_INCLUDE_ONLY
 
     namespace impl
@@ -105,13 +97,6 @@
       return output;
     }
 
-//     template <typename I, typename J>
-//     void plus_inplace(Image<I>& lhs, const Image<J>& rhs)
-//     {
-//       mln_precondition(exact(rhs).domain() == exact(lhs).domain());
-//       morpho::plus(lhs, rhs, lhs); // Calls the previous version.
-//     }
-
 # endif // ! MLN_INCLUDE_ONLY
 
   } // end of namespace mln::morpho
Index: trunk/milena/mln/morpho/minus.hh
===================================================================
--- trunk/milena/mln/morpho/minus.hh	(revision 1605)
+++ trunk/milena/mln/morpho/minus.hh	(revision 1606)
@@ -53,14 +53,6 @@
     mln_concrete(I) minus(const Image<I>& lhs, const Image<J>& rhs);
 
 
-//     /*! Morphological minus, inplace version: either a logical "and
-//      *  not" (if morpho on sets) or an arithmetical minus (if morpho
-//      *  on functions).
-//      */
-//     template <typename I, typename J>
-//     void minus_inplace(Image<I>& lhs, const Image<J>& rhs);
-
-
 # ifndef MLN_INCLUDE_ONLY
 
     namespace impl
@@ -106,13 +98,6 @@
       return output;
     }
 
-//     template <typename I, typename J>
-//     void minus_inplace(Image<I>& lhs, const Image<J>& rhs)
-//     {
-//       mln_precondition(exact(rhs).domain() == exact(lhs).domain());
-//       morpho::minus(lhs, rhs, lhs); // Calls the previous version.
-//     }
-
 # endif // ! MLN_INCLUDE_ONLY
 
   } // end of namespace mln::morpho
Index: trunk/milena/mln/morpho/all.hh
===================================================================
--- trunk/milena/mln/morpho/all.hh	(revision 1605)
+++ trunk/milena/mln/morpho/all.hh	(revision 1606)
@@ -41,19 +41,13 @@
   namespace morpho
   {
 
-    /*! \namespace impl
-     *
-     *  \brief Namespace of morphological image processing routines
-     *  implementation details.
-     */
+    /// \internal Namespace of morphological image processing routines
+    /// implementation details.
     namespace impl
     {
 
-      /*! \namespace generic
-       *
-       *  \brief Namespace of morphological image processing routines
-       *  generic implementations.
-       */
+      /// \internal Namespace of morphological image processing routines
+      /// generic implementations.
       namespace generic
       {
       }
Index: trunk/milena/mln/display/all.hh
===================================================================
--- trunk/milena/mln/display/all.hh	(revision 1605)
+++ trunk/milena/mln/display/all.hh	(revision 1606)
@@ -40,10 +40,10 @@
   /// Namespace of routines that help to display images.
   namespace display
   {
-    /// Implementation namespace of display namespace.
+    /// \internal Implementation namespace of display namespace.
     namespace impl {
 
-      /// Generic implementation namespace of display namespace.
+      /// \internal Generic implementation namespace of display namespace.
       namespace generic {}
 
     }
Index: trunk/milena/mln/io/pfm/all.hh
===================================================================
--- trunk/milena/mln/io/pfm/all.hh	(revision 1605)
+++ trunk/milena/mln/io/pfm/all.hh	(revision 1606)
@@ -42,10 +42,10 @@
     /// Namespace of pfm input/output handling.
     namespace pfm
     {
-      /// Implementation namespace of pfm namespace.
+      /// \internal Implementation namespace of pfm namespace.
       namespace impl {}
 
-      /// Internal namespace of pfm namespace.
+      /// \internal Internal namespace of pfm namespace.
       namespace internal {}
     }
   }
Index: trunk/milena/mln/io/all.hh
===================================================================
--- trunk/milena/mln/io/all.hh	(revision 1605)
+++ trunk/milena/mln/io/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of input/output handling.
   namespace io
   {
-    /// Internal namespace of io namespace.
+    /// \internal Internal namespace of io namespace.
     namespace internal {}
   }
 
Index: trunk/milena/mln/io/pnm/all.hh
===================================================================
--- trunk/milena/mln/io/pnm/all.hh	(revision 1605)
+++ trunk/milena/mln/io/pnm/all.hh	(revision 1606)
@@ -42,7 +42,7 @@
     /// Namespace of pnm input/output handling.
     namespace pnm
     {
-      /// Namespace of pnm's implementation details.
+      /// \internal  Namespace of pnm's implementation details.
       namespace impl {}
     }
   }
Index: trunk/milena/mln/io/pbm/all.hh
===================================================================
--- trunk/milena/mln/io/pbm/all.hh	(revision 1605)
+++ trunk/milena/mln/io/pbm/all.hh	(revision 1606)
@@ -42,10 +42,10 @@
     /// Namespace of pbm input/output handling.
     namespace pbm
     {
-      /// Namespace of pbm's implementation details.
+      /// \internal Namespace of pbm's implementation details.
       namespace impl {}
 
-      /// Internal namespace of pbm namespace.
+      /// \internal Internal namespace of pbm namespace.
       namespace internal {}
     }
   }
Index: trunk/milena/mln/logical/all.hh
===================================================================
--- trunk/milena/mln/logical/all.hh	(revision 1605)
+++ trunk/milena/mln/logical/all.hh	(revision 1606)
@@ -40,10 +40,10 @@
   /// Namespace of logic.
   namespace logical
   {
-    /// Implementation namespace of logical namespace.
+    /// \internal Implementation namespace of logical namespace.
     namespace impl {
 
-      /// Generic implementation namespace of logical namespace.
+      /// \internal Generic implementation namespace of logical namespace.
       namespace generic {}
 
     }
Index: trunk/milena/mln/canvas/all.hh
===================================================================
--- trunk/milena/mln/canvas/all.hh	(revision 1605)
+++ trunk/milena/mln/canvas/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of canvas.
   namespace canvas
   {
-    /// Implementation namespace of canvas namespace.
+    /// \internal Implementation namespace of canvas namespace.
     namespace impl {}
   }
 
Index: trunk/milena/mln/labeling/all.hh
===================================================================
--- trunk/milena/mln/labeling/all.hh	(revision 1605)
+++ trunk/milena/mln/labeling/all.hh	(revision 1606)
@@ -40,7 +40,7 @@
   /// Namespace of labeling routines.
   namespace labeling
   {
-    /// Implementation namespace of labeling namespace.
+    /// \internal Implementation namespace of labeling namespace.
     namespace impl {}
   }
 
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2007-12-12  Matthieu Garrigues  <garrigues(a)lrde.epita.fr>
	Add traits for rgb. Fix the test rgb_full.
	* mln/value/rgb.hh: Add traits :
		rgb<n> + rgb<n>  -> rgb<n>
		rgb<n> - rgb<n>  -> rgb<n>
		rgb<n> * scalar_ -> rgb<n>
		rgb<n> / scalar_ -> rgb<n>
		rgb<n> * int_u   -> rgb<n>
		rgb<n> / int_u   -> rgb<n>
	* tests/value/rgb_full.cc: Fix the macro test_interop_sc, add a
	FIXME for operators *,/ on (rgb<n>, float).
---
 mln/value/rgb.hh        |  142 +++++++++++++++++++++++++++++++++++++++---------
 tests/value/rgb_full.cc |    9 +--
 2 files changed, 119 insertions(+), 32 deletions(-)
Index: trunk/milena/tests/value/rgb_full.cc
===================================================================
--- trunk/milena/tests/value/rgb_full.cc	(revision 1604)
+++ trunk/milena/tests/value/rgb_full.cc	(revision 1605)
@@ -107,10 +107,6 @@
     sym_compare_assert(j, ==, V2);			   \
 							   \
     i = V1;						   \
-    i OP##= i;						   \
-    sym_compare_assert(i, ==, compute_rgb(T1,V1, OP, V1)); \
-							   \
-    i = V1;						   \
     j = V2;						   \
     i OP##= j;						   \
     sym_compare_assert(i, ==, compute_rgb_sc(T1, V1, OP, V2)); \
@@ -143,8 +139,9 @@
     test_interop_sc(rgb8, unsigned, *, rgb8(4,5,6), 4);
     test_interop_sc(rgb8, unsigned, /, rgb8(40,50,60), 10);
 
-    test_interop_sc(rgb8, float, *, rgb8(4,5,6), 4);
-    test_interop_sc(rgb8, float, /, rgb8(40,50,60), 10);
+    // FIXME : operators *,/ are ambiguous for (rgb8, float)...
+    //     test_interop_sc(rgb8, float, *, rgb8(4,5,6), 4);
+    //     test_interop_sc(rgb8, float, /, rgb8(40,50,60), 10);
 
     test_interop_sc(rgb8, char, *, rgb8(4,5,6), 4);
     test_interop_sc(rgb8, char, /, rgb8(40,50,60), 10);
Index: trunk/milena/mln/value/rgb.hh
===================================================================
--- trunk/milena/mln/value/rgb.hh	(revision 1604)
+++ trunk/milena/mln/value/rgb.hh	(revision 1605)
@@ -65,6 +65,65 @@
 
   namespace trait
   {
+    template < unsigned n >
+    struct set_precise_binary_< op::plus, mln::value::rgb<n>, mln::value::rgb<n> >
+    {
+      typedef mln::value::rgb<n> ret;
+    };
+
+    template < unsigned n >
+    struct set_precise_binary_< op::minus, mln::value::rgb<n>, mln::value::rgb<n> >
+    {
+      typedef mln::value::rgb<n> ret;
+    };
+
+    template < unsigned n, typename S >
+    struct set_precise_binary_< op::times, mln::value::rgb<n>, mln::value::scalar_<S> >
+    {
+      typedef mln::value::rgb<n> ret;
+    };
+
+    template < unsigned n, typename S >
+    struct set_precise_binary_< op::div, mln::value::rgb<n>, mln::value::scalar_<S> >
+    {
+      typedef mln::value::rgb<n> ret;
+    };
+
+
+    // FIXME : Is there any way more generic? a way to factor
+    //  set_precise_binary_< op::div, mln::value::rgb<n>, mln::value::scalar_<S> >
+    //  and
+    //  set_precise_binary_< op::div, mln::value::rgb<n>, mln::value::int_u<m> >
+    //  as for op::times.
+
+    template < unsigned n, unsigned m >
+    struct set_precise_binary_< op::times, mln::value::rgb<n>, mln::value::int_u<m> >
+    {
+      typedef mln::value::rgb<n> ret;
+    };
+
+    template < unsigned n, unsigned m >
+    struct set_precise_binary_< op::div, mln::value::rgb<n>, mln::value::int_u<m> >
+    {
+      typedef mln::value::rgb<n> ret;
+    };
+
+
+//     template < unsigned n, typename I >
+//     struct set_binary_< op::times,
+// 			mln::value::Vectorial, mln::value::rgb<n>,
+// 			mln::value::Integer, I >
+//     {
+//       typedef mln::value::rgb<n> ret;
+//     };
+
+//     template < unsigned n, typename S >
+//     struct set_binary_< op::times,
+// 			mln::value::Scalar, S,
+// 			mln::value::Vectorial, mln::value::rgb<n> >
+//     {
+//       typedef mln::value::rgb<n> ret;
+//     };
 
     template <unsigned n>
     struct value_< mln::value::rgb<n> >
@@ -140,22 +199,6 @@
 
       /// Zero value.
       static const rgb<n> zero;
-
-
-      // FIXME: Cannot work for i negative; move operators outside the class; add traits!
-
-
-      /// Addition.
-      rgb<n> operator+(const rgb<n>& rhs) const;
-
-      /// Substraction.
-      rgb<n> operator-(const rgb<n>& rhs) const;
-
-      /// Multiplication.
-      rgb<n> operator*(int i) const;
-
-      /// Division.
-      rgb<n> operator/(int i) const;
     };
 
 
@@ -174,6 +217,35 @@
     std::istream& operator>>(std::istream& istr, rgb<n>& c);
 
 
+    // FIXME: Cannot work for i negative; add traits!
+
+    /// Addition.
+    template <unsigned n>
+    rgb<n>
+    operator+(const rgb<n>& lhs, const rgb<n>& rhs);
+
+    /// Substraction.
+    template <unsigned n>
+    rgb<n>
+    operator-(const rgb<n>& lhs, const rgb<n>& rhs);
+
+    /// Multiplication.
+    template <unsigned n, typename S>
+    inline
+    rgb<n>
+    operator*(const rgb<n>& lhs, const mln::value::scalar_<S>& s);
+
+    template <unsigned n, typename S>
+    inline
+    rgb<n>
+    operator*(const rgb<n>& lhs, const mln::value::scalar_<S>& s);
+
+    /// Division.
+    template <unsigned n, typename S>
+    inline
+    rgb<n>
+    operator/(const rgb<n>& lhs, const mln::value::scalar_<S>& s);
+
 # ifndef MLN_INCLUDE_ONLY
 
     template <unsigned n>
@@ -280,39 +352,57 @@
     template <unsigned n>
     inline
     rgb<n>
-    rgb<n>::operator-(const rgb<n>& rhs) const
+    operator-(const rgb<n>& lhs, const rgb<n>& rhs)
     {
-      rgb<n> tmp(this->v_ - rhs.v_);
+      rgb<n> tmp(lhs.to_equiv() - rhs.to_equiv());
       return tmp;
     }
 
     template <unsigned n>
     inline
     rgb<n>
-    rgb<n>::operator+(const rgb<n>& rhs) const
+    operator+(const rgb<n>& lhs, const rgb<n>& rhs)
     {
-      rgb<n> tmp(this->v_ + rhs.v_);
+      rgb<n> tmp(lhs.to_equiv() + rhs.to_equiv());
       return tmp;
     }
 
-    template <unsigned n>
+//     template <unsigned n>
+//     inline
+//     rgb<n>
+//     operator*(const rgb<n>& lhs, int i)
+//     {
+//       rgb<n> tmp(lhs.to_equiv() * i);
+//       return tmp;
+//     }
+
+    template <unsigned n, typename S>
     inline
     rgb<n>
-    rgb<n>::operator*(int i) const
+    operator*(const rgb<n>& lhs, const mln::value::scalar_<S>& s)
     {
-      rgb<n> tmp(this->v_ * i);
+      rgb<n> tmp(lhs.to_equiv() * s.to_equiv());
       return tmp;
     }
 
-    template <unsigned n>
+    template <unsigned n, typename S>
     inline
     rgb<n>
-    rgb<n>::operator/(int i) const
+    operator/(const rgb<n>& lhs, const mln::value::scalar_<S>& s)
     {
-      rgb<n> tmp(this->v_ / i);
+      rgb<n> tmp(lhs.to_equiv() / s.to_equiv());
       return tmp;
     }
 
+//     template <unsigned n>
+//     inline
+//     rgb<n>
+//     operator/(const rgb<n>& lhs, int i)
+//     {
+//       rgb<n> tmp(lhs.to_equiv() / i);
+//       return tmp;
+//     }
+
     template <unsigned n>
     inline
     std::ostream& operator<<(std::ostream& ostr, const rgb<n>& v)
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2007-12-12  Matthieu Garrigues  <garrigues(a)lrde.epita.fr>
	gl16 and gl8 headers.
	* mln/value/gl8.hh: New, Definition of a graylevel 8 bits.
	* mln/value/gl16.hh: New, Definition of a graylevel 16 bits.
---
 gl16.hh |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 gl8.hh  |   55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 110 insertions(+)
Index: trunk/milena/mln/value/gl8.hh
===================================================================
--- trunk/milena/mln/value/gl8.hh	(revision 0)
+++ trunk/milena/mln/value/gl8.hh	(revision 1604)
@@ -0,0 +1,55 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library.  This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING.  If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction.  Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License.  This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_VALUE_GL8_HH
+# define MLN_VALUE_GL8_HH
+
+/*! \file mln/value/gl8.hh
+ *
+ * \brief Define the alias value::gl8.
+ */
+
+# include <mln/value/graylevel.hh>
+
+
+namespace mln
+{
+
+  namespace value
+  {
+
+
+    /// Alias for 8 bit graylevel.
+    typedef graylevel<8> gl8;
+
+
+  } // end of namespace mln::value
+
+} // end of namespace mln
+
+
+#endif // ! MLN_VALUE_GL8_HH
Index: trunk/milena/mln/value/gl16.hh
===================================================================
--- trunk/milena/mln/value/gl16.hh	(revision 0)
+++ trunk/milena/mln/value/gl16.hh	(revision 1604)
@@ -0,0 +1,55 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library.  This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING.  If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction.  Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License.  This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_VALUE_GL16_HH
+# define MLN_VALUE_GL16_HH
+
+/*! \file mln/value/gl16.hh
+ *
+ * \brief Define the alias value::gl16.
+ */
+
+# include <mln/value/graylevel.hh>
+
+
+namespace mln
+{
+
+  namespace value
+  {
+
+
+    /// Alias for 16 bit graylevel.
+    typedef graylevel<16> gl16;
+
+
+  } // end of namespace mln::value
+
+} // end of namespace mln
+
+
+#endif // ! MLN_VALUE_GL16_HH
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                    
                        https://svn.lrde.epita.fr/svn/oln/trunk/milena
Index: ChangeLog
from  Roland Levillain  <roland(a)lrde.epita.fr>
	More on general-purpose graph-based images, improperly called
	mesh-based images.
	* mln/util/graph.hh: Migrate C-styled constructs to C++ ones.
	(graph::nodes, graph::edges): New typedefs.
	Use them...
	(nodes_, edges_): ...here.
	* mln/core/mesh_p.hh (graph): New typedef.
	Use it...
	(gr_): ...here.
	Aesthetic changes.
	* mln/core/mesh_psite.hh
	(m_ptr_): Turn this non-const pointer on mesh_p<P> into...
	(mesh_): ...a const reference on mesh_p<P>.
	(mesh_psite::mesh_psite(unsigned, mesh_p<P>*)): Adjust ctor
	and swap the arguments of this ctor to get...
	(mesh_psite::mesh_psite(const mesh_p<P>&, unsigned)): ...this much
	natural signature.
	(mesh_psite::mesh_psite(const self_& rhs)): New copy ctor.
	(operator= (const self_& rhs)): New assignment operator.
	* mln/core/mesh_p_piter.hh: Adjust forward declarations.
	(psite, point): New typedefs.
	(update_, to_psite, operator psite): New methods.
	(loc_): Remove attribute.
	(psite_set_, psite_): New attributes.
	(mesh_p_piter_::mesh_p_piter_): Adjust ctor.
	(is_valid invalidate, start, next_): Adjust methods.
	* mln/core/mesh_image.hh (mln::trait::image_< mesh_image<P, V> >):
	New traits.
	(operator()(const mesh_psite<P>& p) const)
	(operator()(const mesh_psite<P>& p)):
	Catch up with the new interface of mln::mesh_psite.
	* mln/trait/image/props.hh (mln::trait::image::space_from_point):
	New function on types mapping points types to the corresponding
	images space trait.
	* mln/core/mesh_elt_window.hh,
	* mln/core/mesh_window_piter.hh:
	New files.
	* mln/draw/mesh.hh,
	* mln/trait/images.hh:
	Add a FIXME.
	* mln/core/box_piter.hh,
	* tests/value/Makefile.am:
	Typos.
	* tests/core/mesh_image.cc: New tests
	* tests/core/mesh_elt_window.cc: New file.
	* tests/core/Makefile.am (check_PROGRAMS): Add mesh_elt_window and
	mesh_image.
	(mesh_elt_window_SOURCES, mesh_image_SOURCES): New.
	* tests/draw/mesh.cc: Revamp this test.
	* TODO: Update.
 TODO                          |    3 
 mln/core/box_piter.hh         |    6 -
 mln/core/mesh_elt_window.hh   |  169 +++++++++++++++++++++++++++++++++
 mln/core/mesh_image.hh        |   38 ++++++-
 mln/core/mesh_p.hh            |   15 +-
 mln/core/mesh_p_piter.hh      |   92 ++++++++++++++----
 mln/core/mesh_psite.hh        |   56 ++++++++---
 mln/core/mesh_window_piter.hh |  211 ++++++++++++++++++++++++++++++++++++++++++
 mln/draw/mesh.hh              |    3 
 mln/trait/image/props.hh      |   41 ++++++++
 mln/trait/images.hh           |    3 
 mln/util/graph.hh             |   37 +++----
 tests/core/Makefile.am        |    4 
 tests/core/mesh_elt_window.cc |   82 ++++++++++++++++
 tests/core/mesh_image.cc      |  115 ++++++++++++++++++++++
 tests/draw/mesh.cc            |  101 +++++++++++++++++---
 tests/value/Makefile.am       |   10 +
 17 files changed, 904 insertions(+), 82 deletions(-)
Index: tests/value/Makefile.am
--- tests/value/Makefile.am	(revision 1602)
+++ tests/value/Makefile.am	(working copy)
@@ -2,6 +2,10 @@
 
 include $(top_srcdir)/milena/tests/tests.mk
 
+## FIXME: To be added to milena/tests/tests.mk.
+full-check: check
+## ...
+
 SUBDIRS =					\
   concept					\
   builtin
@@ -24,7 +28,7 @@
   scalar					\
   set
 
-# FIXME: activate when make check_full will work.
+# FIXME: Enable when make check_full works.
 # check_full_PROGRAMS =				\
 #   rgb_full
 
@@ -45,9 +49,9 @@
 scalar_SOURCES = scalar.cc
 set_SOURCES = set.cc
 
-# FIXME: activate when make check_full will work.
+# FIXME: Enable when make check_full works.
 # rgb_full_SOURCES = rgb_full.cc
 
 TESTS = $(check_PROGRAMS)
-# FIXME: activate when make check_full will work.
+# FIXME: Enable when make check_full works.
 # TESTS_FULL = $(check_full_PROGRAMS)
Index: tests/core/mesh_image.cc
--- tests/core/mesh_image.cc	(revision 0)
+++ tests/core/mesh_image.cc	(revision 0)
@@ -0,0 +1,115 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library.  This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING.  If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction.  Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License.  This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+/*! \file tests/mesh_image.cc
+ *
+ *  \brief Tests on mln::mesh_image.
+ */
+
+#include <vector>
+
+#include <mln/core/point2d.hh>
+#include <mln/core/mesh_image.hh>
+#include <mln/core/mesh_elt_window.hh>
+#include <mln/core/mesh_window_piter.hh>
+
+#include <mln/debug/iota.hh>
+#include <mln/debug/println.hh>
+
+
+int main()
+{
+  using namespace mln;
+
+  /*--------.
+  | Graph.  |
+  `--------*/
+
+  // Points associated to nodes.
+  std::vector<point2d> points;
+  points.push_back(make::point2d(0,0)); // Point associated to node 0.
+  points.push_back(make::point2d(2,2)); // Point associated to node 1.
+  points.push_back(make::point2d(0,4)); // Point associated to node 2.
+  points.push_back(make::point2d(4,3)); // Point associated to node 3.
+  points.push_back(make::point2d(4,4)); // Point associated to node 4.
+
+  // Edges.
+  util::graph<void> g;
+  // Populate the graph with nodes.
+  for (unsigned i = 0; i < points.size(); ++i)
+    g.add_node ();
+  // Populate the graph with edges.
+  g.add_edge(0, 1);
+  g.add_edge(1, 2);
+  g.add_edge(1, 3);
+  g.add_edge(3, 4);
+  g.add_edge(4, 2);
+
+  /*-------.
+  | Mesh.  |
+  `-------*/
+
+  mesh_p<point2d> mesh(g, points);
+
+  /*-------------.
+  | Mesh image.  |
+  `-------------*/
+
+  // Values ("empty" vector).
+  std::vector<int> values(5);
+  // Mesh image.
+  typedef mesh_image<point2d, int> ima_t;
+  ima_t ima(mesh, values);
+  // Initialize values.
+  debug::iota(ima);
+  // The printed result does not show the graph, only the values.
+  debug::println(ima);
+
+  /*------------.
+  | Iterators.  |
+  `------------*/
+
+  // Manual iteration over the domain of IMA.
+  mln_piter_(ima_t) p(ima.domain());
+  for_all (p)
+    std::cout << "ima (" << p << ") = " << ima(p) << std::endl;
+
+  // Manual iterations over the neighborhoods of each point site of IMA.
+  typedef mesh_elt_window<point2d> win_t;
+  win_t win;
+  // Reinitialize P, otherwise Q will trigger an assertion about P
+  // being unable to convert to a valid mesh_piter object.
+  p.start();
+  mln_qiter_(win_t) q(win, p);
+  for_all (p)
+  {
+    std::cout << "neighbors of " << p << " (" << ima(p) << "), "
+	      << "including the site itself:" << std::endl;
+    for_all (q)
+      std::cout << "  " << q << " (level = " << ima(q) << ")" << std::endl;
+  } 
+}
Index: tests/core/Makefile.am
--- tests/core/Makefile.am	(revision 1602)
+++ tests/core/Makefile.am	(working copy)
@@ -7,6 +7,8 @@
   clone						\
   exact						\
   initialize					\
+  mesh_elt_window				\
+  mesh_image					\
   mono_obased_rle_image				\
   mono_rle_image				\
   obased_rle_image				\
@@ -19,6 +21,8 @@
 clone_SOURCES = clone.cc
 exact_SOURCES = exact.cc
 initialize_SOURCES = initialize.cc
+mesh_elt_window_SOURCES = mesh_elt_window.cc
+mesh_image_SOURCES = mesh_image.cc
 mono_obased_rle_image_SOURCES = mono_obased_rle_image.cc
 mono_rle_image_SOURCES = mono_rle_image.cc
 obased_rle_image_SOURCES = obased_rle_image.cc
Index: tests/core/mesh_elt_window.cc
--- tests/core/mesh_elt_window.cc	(revision 0)
+++ tests/core/mesh_elt_window.cc	(revision 0)
@@ -0,0 +1,82 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library.  This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING.  If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction.  Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License.  This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+/*! \file tests/mesh_elt_window.cc
+ *
+ *  \brief Tests on mln::win::mesh_elt_window.
+ */
+
+#include <vector>
+
+#include <mln/core/point2d.hh>
+#include <mln/core/mesh_elt_window.hh>
+
+#include <mln/debug/iota.hh>
+#include <mln/debug/println.hh>
+
+
+int main()
+{
+  using namespace mln;
+
+  typedef point2d p_t;
+
+  /*--------.
+  | Graph.  |
+  `--------*/
+
+  // Points associated to nodes.
+  std::vector<p_t> points;
+  points.push_back(make::point2d(0,0)); // Point associated to node 0.
+  points.push_back(make::point2d(2,2)); // Point associated to node 1.
+  points.push_back(make::point2d(0,4)); // Point associated to node 2.
+  points.push_back(make::point2d(4,3)); // Point associated to node 3.
+  points.push_back(make::point2d(4,4)); // Point associated to node 4.
+
+  // Edges.
+  mln::util::graph<void> g;
+  // Populate the graph with nodes.
+  for (unsigned i = 0; i < points.size(); ++i)
+    g.add_node ();
+  // Populate the graph with edges.
+  g.add_edge(0, 1);
+  g.add_edge(1, 2);
+  g.add_edge(1, 3);
+  g.add_edge(3, 4);
+  g.add_edge(4, 2);
+
+  /*------------------.
+  | Mesh and window.  |
+  `------------------*/
+
+  // Mesh psite set.
+  mesh_p<p_t> mesh(g, points);
+  // Mesh point site.
+  mesh_psite<p_t> psite(mesh, 0);
+  // ``Sliding'' window (in fact, neighborhood) of a psite of MESH.
+  mesh_elt_window<p_t> win;
+}
Index: tests/draw/mesh.cc
--- tests/draw/mesh.cc	(revision 1602)
+++ tests/draw/mesh.cc	(working copy)
@@ -28,8 +28,14 @@
 /*! \file tests/draw/mesh.cc
  *
  * \brief Tests on mln::draw::mesh.
+ *
+ *  Build a graph, convert it to an image, and compare it with a
+ *  reference images.
  */
 
+#include <vector>
+#include <utility>
+
 #include <mln/core/image2d.hh>
 #include <mln/core/point2d.hh>
 #include <mln/debug/println.hh>
@@ -40,34 +46,99 @@
 #include <mln/core/mesh_image.hh>
 #include <mln/level/compare.hh>
 
+
+/// Set of 2-D points.
+typedef std::vector< mln::point2d > points_type;
+/// Set of edges expressed using the identifiers of their adjecent nodes.
+typedef std::vector< std::pair<int,int> > edges_type;
+
+using namespace mln;
+
+// FIXME: We might want to extract NROWS and NCOLS from REF instead of
+// getting them from the caller.
+void
+test (points_type& points, const edges_type& edges,
+      unsigned nrows, unsigned ncols, const mln::image2d<int>& ref)
+{
+  // Graph.
+  util::graph<void> g;
+  // Populate the graph with nodes.
+  for (unsigned i = 0; i < points.size(); ++i)
+    g.add_node ();
+  // Populate the graph with edges.
+  for (edges_type::const_iterator i = edges.begin(); i != edges.end(); ++i)
+    g.add_edge (i->first, i->second);
+  // Check its consistency.
+  g.consistency ();
+
+  mln::mesh_p<point2d> m(g, points);
+
+  image2d<int> ima(nrows, ncols);
+  // FIXME: `draw::mesh' is not a good name.  This function doesn't
+  // actually draw the mesh; it *converts* it to a printable image.
+  draw::mesh (ima, m, 2, 1);
+  mln_assertion (ima == ref);
+}
+
 int
-main (void)
+main ()
 {
-  using namespace mln;
+  /*---------.
+  | Test 1.  |
+  `---------*/
 
+  {
+    // Reference image.
   int vs[3][3] = {
     {2, 0, 0},
     {0, 1, 0},
     {0, 0, 2}
   };
-
   image2d<int> ref (make::image2d(vs));
 
-  util::graph<void> g;
+    // Points associated to nodes.
+    points_type points;
+    points.push_back (make::point2d (0,0)); // Point associated to node 0.
+    points.push_back (make::point2d (2,2)); // Point associated to node 1.
+
+    // Edges.
+    edges_type edges;
+    edges.push_back (std::make_pair (0, 1));
 
-  g.add_node ();
-  g.add_node ();
-  g.add_edge (0, 1);
-  g.consistency ();
+    test (points, edges, 3, 3, ref);
+  }
 
-  std::vector<point2d> v;
-  v.push_back (make::point2d (0,0));
-  v.push_back (make::point2d (2,2));
 
-  mesh_p<point2d> m(g, v);
+  /*---------.
+  | Test 2.  |
+  `---------*/
 
-  image2d<int> ima (3, 3);
-  draw::mesh (ima, m, 2, 1);
+  {
+    int vs[5][5] = {
+      {2, 0, 0, 0, 2},
+      {0, 1, 0, 1, 1},
+      {0, 0, 2, 0, 1},
+      {0, 0, 0, 1, 1},
+      {0, 0, 0, 2, 2},
+    };
+    image2d<int> ref (make::image2d(vs));
 
-  mln_assertion (ima == ref);
+    // Points associated to nodes.
+    points_type points;
+    points.push_back (make::point2d (0,0)); // Point associated to node 0.
+    points.push_back (make::point2d (2,2)); // Point associated to node 1.
+    points.push_back (make::point2d (0,4)); // Point associated to node 2.
+    points.push_back (make::point2d (4,3)); // Point associated to node 3.
+    points.push_back (make::point2d (4,4)); // Point associated to node 4.
+
+    // Edges.
+    edges_type edges;
+    edges.push_back (std::make_pair (0, 1));
+    edges.push_back (std::make_pair (1, 2));
+    edges.push_back (std::make_pair (1, 3));
+    edges.push_back (std::make_pair (3, 4));
+    edges.push_back (std::make_pair (4, 2));
+
+    test (points, edges, 5, 5, ref);
+  }
 }
Index: TODO
--- TODO	(revision 1602)
+++ TODO	(working copy)
@@ -1,3 +1,4 @@
+
 	-*- outline -*-
 
 
@@ -34,6 +35,8 @@
 value::other (for use in labeling)
 ...
 
+** Roland
+R�importer les algos de LPE depuis Olena 0.11 et Olena proto-1.0.
 
 
 
Index: mln/trait/image/props.hh
--- mln/trait/image/props.hh	(revision 1602)
+++ mln/trait/image/props.hh	(working copy)
@@ -198,6 +198,47 @@
 
   } // end of namespace mln::trait
 
+
+
+  // FIXME: To be moved elsewhere?
+
+  /// Compute the image::space trait from a point type.
+  /// \{
+
+  // Fwd decl. (used by trait::image::space_from_point).
+  template <typename M, typename C> struct point_;
+  typedef point_<grid::tick, int> point1d;
+  typedef point_<grid::square, int> point2d;
+  typedef point_<grid::cube, int> point3d;
+
+  namespace trait
+  {
+    namespace image
+    {
+
+      /// Function mapping a point type to the corresponding space trait.
+      /// \{
+      template <typename P>
+      struct space_from_point
+      { typedef undef ret; };
+
+      template <>
+      struct space_from_point<point1d>
+      { typedef trait::image::space::one_d ret; };
+
+      template <>
+      struct space_from_point<point2d>
+      { typedef trait::image::space::two_d ret; };
+
+      template <>
+      struct space_from_point<point3d>
+      { typedef trait::image::space::three_d ret; };
+      /// \}
+
+    } // end of namespace mln::trait::image
+
+  } // end of namespace mln::trait
+
 } // end of namespace mln
 
 
Index: mln/trait/images.hh
--- mln/trait/images.hh	(revision 1602)
+++ mln/trait/images.hh	(working copy)
@@ -100,11 +100,9 @@
   namespace value { template <unsigned n, typename I> struct stack_image; }
 
 
-
   namespace trait
   {
 
-
     template <typename I>
     struct undefined_image_
     {
@@ -119,6 +117,7 @@
 
       // related to I::pset
       typedef undef access;   // random, browsing
+      // FIXME: Wouldn't it be nicer to use metal::int_<DIM>?
       typedef undef space;    // one_d, two_d, three_d
       typedef undef size;     // huge or regular
       typedef undef support;  // irregular, aligned < regular
Index: mln/core/mesh_psite.hh
--- mln/core/mesh_psite.hh	(revision 1602)
+++ mln/core/mesh_psite.hh	(working copy)
@@ -35,6 +35,8 @@
  * \todo Clean-up!
  */
 
+# include <mln/core/mesh_p.hh>
+
 
 namespace mln
 {
@@ -44,43 +46,73 @@
 
 
   // FIXME: Doc!
+  // FIXME: Fix access to member.
   template<typename P>
-  struct mesh_psite : public Point_Site< mesh_psite<P> >
+  class mesh_psite : public Point_Site< mesh_psite<P> >
   {
+    typedef mesh_psite<P> self_;
+
+  public:
     typedef mln_mesh(P) mesh;
     enum { dim = P::dim };
     typedef P point;
     typedef mln_dpoint(P) dpoint;
     typedef mln_coord(P) coord;
 
-    mesh_psite(unsigned i, mesh_p<P>* m_ptr);
+    /// Construction and assignment.
+    /// \{
+    mesh_psite(const mesh_p<P>& mesh_, unsigned i);
+    mesh_psite(const self_& rhs);
+    self_& operator= (const self_& rhs);
+    /// \}
 
     operator P() const;
-
     const point& to_point() const;
-
     coord operator[](unsigned i) const;
 
+    // FIXME: These shouldn't be public.
+    const mesh_p<P>& mesh_;
     unsigned i_;
-
-    mesh_p<P>* m_ptr_;
   };
 
 # ifndef MLN_INCLUDE_ONLY
 
   template<typename P>
   inline
-  mesh_psite<P>::mesh_psite(unsigned i, mesh_p<P>* m_ptr)
-    : i_(i) ,
-      m_ptr_(m_ptr)
+  mesh_psite<P>::mesh_psite(const mesh_p<P>& mesh, unsigned i)
+    : mesh_(mesh),
+      i_(i)
+  {
+  }
+
+  template<typename P>
+  inline
+  mesh_psite<P>::mesh_psite(const mesh_psite<P>& rhs)
+    : mesh_(rhs.mesh_),
+      i_(rhs.i_)
+  {
+  }
+
+  template<typename P>
+  inline
+  mesh_psite<P>&
+  mesh_psite<P>::operator= (const mesh_psite<P>& rhs)
   {
+    if (&rhs == this)
+      return *this;
+    // FIXME: Could we get rid of this cast?
+    const_cast< mesh_p<P>& >(mesh_) = rhs.mesh_;
+    i_ = rhs.i_;
+    return *this;
   }
 
   template<typename P>
   inline
   mesh_psite<P>::operator P() const
   {
-    return m_ptr_->loc_[i_];
+    // FIXME: This is quite unsafe: we should check that i_ is a valid
+    // index before dereferencing loc_ to ensure clear error messages.
+    return mesh_.loc_[i_];
   }
 
   template<typename P>
@@ -88,7 +120,9 @@
   const P&
   mesh_psite<P>::to_point() const
   {
-    return m_ptr_->loc_[i_];
+    // FIXME: This is quite unsafe: we should check that i_ is a valid
+    // index before dereferencing loc_ to ensure clear error messages.
+    return mesh_.loc_[i_];
   }
 
   template<typename P>
Index: mln/core/mesh_p.hh
--- mln/core/mesh_p.hh	(revision 1602)
+++ mln/core/mesh_p.hh	(working copy)
@@ -35,6 +35,9 @@
 # include <mln/core/mesh_psite.hh>
 # include <mln/core/mesh_p_piter.hh>
 
+// FIXME: Rename as mesh_p_set?  We shall definitely write a coding
+// style somewhere.
+
 /*! \file mln/core/mesh_p.hh
  *
  * \brief Definition of an point set based on graph.
@@ -48,8 +51,10 @@
   template<typename P>
   struct mesh_p : public internal::point_set_base_< P, mesh_p<P> >
   {
-    mesh_p (util::graph<void>& gr,
-	    std::vector<P>& loc);
+    typedef util::graph<void> graph;
+
+    /// Construct a mesh psite set from a graph and an array of locations.
+    mesh_p (graph& gr, std::vector<P>& loc);
 
     /// Point_Site associated type.
     typedef mesh_psite<P> psite;
@@ -67,8 +72,9 @@
 
     bool has(const psite& p) const;
                                                 
-    util::graph<void>	gr_;
+    graph gr_;
     std::vector<P>	loc_;
+    // FIXME: (Roland) Is it really useful/needed?
     box_<P> bb_;
   };
 
@@ -76,8 +82,7 @@
 
   template<typename P>
   inline
-  mesh_p<P>::mesh_p (util::graph<void>& gr,
-		     std::vector<P>& loc)
+  mesh_p<P>::mesh_p (util::graph<void>& gr, std::vector<P>& loc)
     : gr_ (gr),
       loc_ (loc)
   {
Index: mln/core/mesh_p_piter.hh
--- mln/core/mesh_p_piter.hh	(revision 1602)
+++ mln/core/mesh_p_piter.hh	(working copy)
@@ -30,6 +30,7 @@
 
 # include <mln/core/internal/point_iterator_base.hh>
 # include <mln/core/mesh_p.hh>
+# include <mln/core/mesh_psite.hh>
 
 /*! \file mln/core/mesh_p_piter.hh
  *
@@ -38,8 +39,12 @@
 
 namespace mln
 {
+  // Fwd decls.
+  template<typename P> class mesh_p;
+  template<typename P> class mesh_psite;
 
-  template<typename P> class mesh_p_piter_;
+
+  // FIXME: Why `mesh_p_piter_' and not `mesh_p_piter' (without `_')?
 
   template<typename P>
   class mesh_p_piter_ : public internal::point_iterator_base_< P, mesh_p_piter_<P> >
@@ -51,11 +56,10 @@
     
     // Make definitions from super class available.
     enum { dim = super_::dim };
+    typedef mesh_psite<P> psite;
+    typedef P point;
 
-    mesh_p_piter_(const mesh_p<P>& s);
-
-    /// Reference to the corresponding point.
-    const P& to_point() const;
+    mesh_p_piter_(const mesh_p<P>& psite_set);
 
     /// Read-only access to the \p i-th coordinate.
     mln_coord(P) operator[](unsigned i) const;
@@ -72,13 +76,26 @@
     /// Go to the next point.
     void next_();
 
+    /// Update the internal data of the iterator.
+    void update_();
+
+    /// Reference to the corresponding point.
+    const point& to_point () const;
+
+    /// Reference to the corresponding point site.
+    const psite& to_psite () const;
+
     /// Convert the iterator into a point.
-    operator P() const;
+    operator point() const;
+
+    /// Convert the iterator into a mesh psite.
+    operator psite() const;
 
   protected:
-    const std::vector<P>& loc_;
+    const mesh_p<P>& psite_set_;
     unsigned i_;
     P p_;
+    psite psite_;
   };
 
 
@@ -87,22 +104,18 @@
 
   template<typename P>
   inline
-  mesh_p_piter_<P>::mesh_p_piter_(const mesh_p<P>& s)
-    : loc_(s.loc_)
+  mesh_p_piter_<P>::mesh_p_piter_(const mesh_p<P>& psite_set)
+    : psite_set_(psite_set),
+      p_(),
+      // Initialize psite_ to a dummy value.
+      psite_(psite_set, psite_set_.loc_.size())
   {
+    // Invalidate i_.
     invalidate();
   }
 
   template<typename P>
   inline
-  const P&
-  mesh_p_piter_<P>::to_point() const
-  {
-    return p_;
-  }
-
-  template<typename P>
-  inline
   mln_coord(P)
   mesh_p_piter_<P>::operator[](unsigned i) const
   {
@@ -114,7 +127,7 @@
   bool
   mesh_p_piter_<P>::is_valid() const
   {
-    return i_ != loc_.size();
+    return i_ != psite_set_.loc_.size();
   }
 
   template<typename P>
@@ -122,7 +135,7 @@
   void
   mesh_p_piter_<P>::invalidate()
   {
-    i_ = loc_.size();
+    i_ = psite_set_.loc_.size();
   }
 
   template<typename P>
@@ -132,7 +145,7 @@
   {
     i_ = 0;
     if (is_valid())
-      p_ = loc_[i_];
+      update_();
   }
 
   template<typename P>
@@ -142,7 +155,36 @@
   {
     ++i_;
     if (is_valid())
-      p_ = loc_[i_];
+      update_();
+  }
+
+  template<typename P>
+  inline
+  void
+  mesh_p_piter_<P>::update_()
+  {
+    // Update p_.
+    p_ = psite_set_.loc_[i_];
+    // Update psite_.
+    psite_ = mesh_psite<P>(psite_set_, i_);
+  }
+
+  template<typename P>
+  inline
+  const P&
+  mesh_p_piter_<P>::to_point() const
+  {
+    mln_precondition(is_valid());
+    return p_;
+  }
+
+  template<typename P>
+  inline
+  const mesh_psite<P>&
+  mesh_p_piter_<P>::to_psite() const
+  {
+    mln_precondition(is_valid());
+    return psite_;
   }
 
   template<typename P>
@@ -153,6 +195,14 @@
     return p_;
   }
 
+  template<typename P>
+  inline
+  mesh_p_piter_<P>::operator mesh_psite<P>() const
+  {
+    mln_precondition(is_valid());
+    return psite_;
+  }
+
 # endif // ! MLN_INCLUDE_ONLY
 
 } // end of mln
Index: mln/core/mesh_window_piter.hh
--- mln/core/mesh_window_piter.hh	(revision 0)
+++ mln/core/mesh_window_piter.hh	(revision 0)
@@ -0,0 +1,211 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library.  This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING.  If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction.  Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License.  This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_CORE_MESH_WINDOW_PITER_HH
+# define MLN_CORE_MESH_WINDOW_PITER_HH
+
+// FIXME: Doc.
+
+// FIXME: Shall we rename `piter' as `qiter'?
+
+# include <mln/core/concept/point_iterator.hh>
+# include <mln/core/mesh_p.hh>
+# include <mln/core/mesh_psite.hh>
+
+
+namespace mln
+{
+  // Fwd decls.
+  template <typename P> class mesh_p;
+  template <typename P> class mesh_psite;
+
+
+  template <typename P>
+  class mesh_window_fwd_piter :
+    public Point_Iterator< mesh_window_fwd_piter<P> > // or Iterator<...>?
+  {
+    typedef mesh_window_fwd_piter<P> self_;
+    typedef Point_Iterator< self_ > super_;
+
+  public:
+    typedef mesh_psite<P> psite;
+
+    enum { dim = P::dim };
+    typedef mesh_p<P> mesh;
+
+    typedef P point;
+    // FIXME: Dummy typedef.
+    typedef void dpoint;
+    typedef mln_coord(P) coord;
+
+  public:
+    template <typename W, typename Pref>
+    mesh_window_fwd_piter(const W& win,
+			  const Point_Site<Pref>& p_ref);
+
+    bool is_valid() const;
+    void invalidate();
+    void start();
+
+    void next_();
+    bool adjacent_or_equal_to_p_ref_() const;
+
+    // FIXME: In fact, this method should be named `to_psite', since
+    // it return as mln::mesh_psite<P> object, not a P object.
+    const point& to_point() const;
+    operator psite () const;
+    coord operator[](unsigned i) const;
+
+  private:
+    /// The ``central'' point of the window.
+    const psite& p_ref_;
+
+    /// An internal iterator on the set of nodes of the underlying graph.
+    unsigned i_;
+  };
+
+  // FIXME: mesh_window_bkd_piter.
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+  // FIXME: Currently, argument win is ignored.
+  template <typename P>
+  template <typename W, typename Pref>
+  mesh_window_fwd_piter<P>::mesh_window_fwd_piter(const W& /* win */,
+						  const Point_Site<Pref>& p_ref)
+    : p_ref_(exact(p_ref).to_psite())
+  {
+    // Invalidate i_.
+    invalidate();
+  }
+
+  template <typename P>
+  bool
+  mesh_window_fwd_piter<P>::is_valid() const
+  {
+    // FIXME: We depend too much on the implementation of util::graph
+    // here.  The util::graph should provide the service to abstract
+    // these manipulations.
+    return i_ >= 0 && i_ < p_ref_.mesh_.gr_.nb_node_;
+  }
+
+  template <typename P>
+  void
+  mesh_window_fwd_piter<P>::invalidate()
+  {
+    i_ = p_ref_.mesh_.gr_.nb_node_;
+  }
+
+  template <typename P>
+  void
+  mesh_window_fwd_piter<P>::start()
+  {
+    i_ = 0;
+    if (!adjacent_or_equal_to_p_ref_())
+      next_();
+  }
+
+  template <typename P>
+  void
+  mesh_window_fwd_piter<P>::next_()
+  {
+    // FIXME: This is inefficient.  The graph structure should be able
+    // to produce the set of adjacent nodes fast.  Boost Graphs
+    // probably provides adequates structures to get fecth these
+    // neighbors in constant time.
+    do
+      ++i_;
+    while (is_valid() && !adjacent_or_equal_to_p_ref_());
+  }
+
+  template <typename P>
+  bool
+  mesh_window_fwd_piter<P>::adjacent_or_equal_to_p_ref_() const
+  {
+    // FIXME: Likewise, this is inefficient.
+
+    // Check wether the iterator points to P_REF_.
+    if (i_ == p_ref_.i_)
+      return true;
+
+    typedef std::list<unsigned> adjacency_type;
+
+    // Check whether the iterator is among the neighbors of P_REF_.
+    {
+      // Paranoid assertion.
+      assert (p_ref_.i_ >= 0 && 
+	      p_ref_.i_ < p_ref_.mesh_.gr_.nodes_.size ());
+      const adjacency_type& p_ref_neighbs =
+	p_ref_.mesh_.gr_.nodes_[p_ref_.i_]->links;
+      adjacency_type::const_iterator j =
+	std::find (p_ref_neighbs.begin(), p_ref_neighbs.end(), i_);
+      if (j != p_ref_neighbs.end())
+	return true;
+    }
+
+    // Check whether P_REF_ is among the neighbors of the iterator.
+    {
+      assert (is_valid ());
+      const adjacency_type& i_neighbs = p_ref_.mesh_.gr_.nodes_[i_]->links;
+      adjacency_type::const_iterator k =
+	std::find (i_neighbs.begin(), i_neighbs.end(), p_ref_.i_);
+      if (k != i_neighbs.end())
+	return true;
+    }
+
+    // Otherwise, the iterator is not adjacent to P_REF_.
+    return false;
+  }
+
+  template <typename P>
+  const P&
+  mesh_window_fwd_piter<P>::to_point() const
+  {
+    return p_ref_.mesh_.loc_[i_];
+  }
+
+  template <typename P>
+  mesh_window_fwd_piter<P>::operator mesh_psite<P> () const
+  {
+    return mesh_psite<P>(p_ref_.mesh_, i_);
+  }
+
+  template <typename P>
+  inline
+  mln_coord(P)
+  mesh_window_fwd_piter<P>::operator[](unsigned i) const
+  {
+    assert(i < dim);
+    return to_point()[i];
+  }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+} // end of namespace mln
+
+#endif // ! MLN_CORE_MESH_WINDOW_PITER_HH
Index: mln/core/mesh_elt_window.hh
--- mln/core/mesh_elt_window.hh	(revision 0)
+++ mln/core/mesh_elt_window.hh	(revision 0)
@@ -0,0 +1,169 @@
+// Copyright (C) 2007 EPITA Research and Development Laboratory
+//
+// This file is part of the Olena Library.  This library is free
+// software; you can redistribute it and/or modify it under the terms
+// of the GNU General Public License version 2 as published by the
+// Free Software Foundation.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this library; see the file COPYING.  If not, write to
+// the Free Software Foundation, 51 Franklin Street, Fifth Floor,
+// Boston, MA 02111-1307, USA.
+//
+// As a special exception, you may use this file as part of a free
+// software library without restriction.  Specifically, if other files
+// instantiate templates or use macros or inline functions from this
+// file, or you compile this file and link it with other files to
+// produce an executable, this file does not by itself cause the
+// resulting executable to be covered by the GNU General Public
+// License.  This exception does not however invalidate any other
+// reasons why the executable file might be covered by the GNU General
+// Public License.
+
+#ifndef MLN_WIN_MESH_ELT_WINDOW_HH
+# define MLN_WIN_MESH_ELT_WINDOW_HH
+
+/*! \file mln/core/mesh_elt_window.hh
+ *
+ *  \brief Definition of the elementary neighborhood (wrongly
+ *  -- but purposefully -- named "window" here, for consistency
+ *  reasons) on a mesh (a graph, in fact).
+ *
+ *  \todo Make naming coherent: we have window (without '_') but
+ *  point_, neighb_, etc.
+ */
+
+# include <mln/core/concept/window.hh>
+# include <mln/core/mesh_psite.hh>
+# include <mln/core/mesh_window_piter.hh>
+
+
+namespace mln
+{
+  // Fwd decls.
+  template <typename P> class mesh_window_fwd_piter;
+  template <typename P> class mesh_window_bkd_piter;
+
+
+  /*! \brief Elementary window on mesh class.
+   *
+   *  FIXME: Doc.
+   */
+  template <typename P>
+  class mesh_elt_window : public Window< mesh_elt_window<P> >
+  {
+    typedef mesh_elt_window<P> self_;
+
+  public:
+    /// Associated types.
+    /// \{
+    /// The type of point stored into the window.
+    // FIXME: Is this right, if we consider that this window stores
+    // psites, not points?
+    typedef P point;
+      
+    // FIXME: This is a dummy value.  This is yet another evidence
+    // that mesh_elt_window shall not be a Window, and therefore be
+    // renamed as mesh_elt_neighb, or better: elt_graph_neighb.
+    typedef void dpoint;
+
+    /*! \brief Point_Iterator type to browse the points of a generic window
+     * w.r.t. the ordering of delta-points.
+     */
+    typedef mesh_window_fwd_piter<P> fwd_qiter;
+
+    /*! \brief Point_Iterator type to browse the points of a generic window
+     * w.r.t. the reverse ordering of delta-points.
+     */
+    typedef mesh_window_bkd_piter<P> bkd_qiter;
+
+    /// The default qiter type.
+    typedef fwd_qiter qiter;
+    /// \}
+
+    /// Construct an elementary mesh window centered on \a psite.
+    mesh_elt_window(/*const mesh_psite<P>& psite*/);
+
+    // FIXME: The following methods make no sense for a
+    // general-purpose neighborhood.  Anyway, we provide
+    // implementations for them for this first draft of graph
+    // neighborhood.
+    bool is_empty() const;
+    bool is_centered() const;
+    bool is_symmetric() const;
+    unsigned delta() const;
+    self_& sym();
+
+    //     protected:
+    //       const mesh_psite<P>& psite_;
+  };
+
+
+  // FIXME: Add an operator<< on ostreams ?
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+  template <typename P>
+  inline
+  mesh_elt_window<P>::mesh_elt_window(/*const mesh_psite<P>& psite*/)
+  //       : psite_(psite)
+  {
+  }
+
+  template <typename P>
+  inline
+  bool
+  mesh_elt_window<P>::is_empty() const
+  {
+    // FIXME: Dummy value.
+    return false;
+  }
+
+  template <typename P>
+  inline
+  bool
+  mesh_elt_window<P>::is_centered() const
+  {
+    // FIXME: Dummy value.
+    return false;
+  }
+
+  template <typename P>
+  inline
+  bool
+  mesh_elt_window<P>::is_symmetric() const
+  {
+    // FIXME: Dummy value.
+    return false;
+  }
+
+  template <typename P>
+  inline
+  unsigned
+  mesh_elt_window<P>::delta() const
+  {
+    // FIXME: Dummy value.
+    return 0;
+  }
+
+  template <typename P>
+  inline
+  mesh_elt_window<P>&
+  mesh_elt_window<P>::sym()
+  {
+    // FIXME: Dummy value.
+    return *this;
+  }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+} // end of namespace mln
+
+
+#endif // ! MLN_WIN_MESH_ELT_WINDOW_HH
Index: mln/core/box_piter.hh
--- mln/core/box_piter.hh	(revision 1602)
+++ mln/core/box_piter.hh	(working copy)
@@ -62,7 +62,7 @@
      */
     box_fwd_piter_(const box_<P>& b);
 
-    /// Convertion to point.
+    /// Conversion to point.
     operator P() const;
 
     /// Reference to the corresponding point.
@@ -112,7 +112,7 @@
      */
     box_bkd_piter_(const box_<P>& b);
 
-    /// Convertion to point.
+    /// Conversion to point.
     operator P() const;
 
     /// Reference to the corresponding point.
@@ -164,7 +164,7 @@
      */
     box_bounds_piter_(const box_<P>& b);
 
-    /// Convertion to point.
+    /// Conversion to point.
     operator P() const;
 
     /// Reference to the corresponding point.
Index: mln/core/mesh_image.hh
--- mln/core/mesh_image.hh	(revision 1602)
+++ mln/core/mesh_image.hh	(working copy)
@@ -30,13 +30,16 @@
 
 /*! \file mln/core/mesh_image.hh
  *
- * \brief Definition of an graph-based image.
+ *  \brief Definition of a graph-based image.
  */
 
-# include <mln/core/internal/image_identity.hh>
+# include <mln/trait/images.hh>
+
+# include <mln/core/internal/image_primary.hh>
 # include <mln/metal/vec.hh>
 # include <mln/core/mesh_p.hh>
 # include <mln/core/mesh_psite.hh>
+# include <mln/value/set.hh>
 # include <vector>
 
 namespace mln
@@ -59,11 +62,36 @@
 
   } // end of namespace mln::internal
 
+
+  namespace trait
+  {
+
+    template <typename P, typename V>
+    struct image_< mesh_image<P, V> > : default_image_< V, mesh_image<P, V> >
+    {
+      typedef trait::image::category::primary category;
+
+      // FIXME: Is that right?
+      typedef trait::image::access::random                    access;
+      typedef typename trait::image::space_from_point<P>::ret space;
+      typedef trait::image::size::regular                     size;
+      typedef trait::image::support::irregular                support;
+
+      typedef trait::image::border::none                      border;
+      typedef trait::image::data::stored                      data;
+      typedef trait::image::io::read_write                    io;
+      // FIXME: Is that right?
+      typedef trait::image::speed::fast                       speed;
+    };
+
+  } // end of namespace mln::trait
+
   /*! \brief FIXME
    *
    */
   template <typename P, typename V>
-  struct mesh_image  : public internal::image_primary_< mesh_p<P>, mesh_image<P, V> >
+  struct mesh_image :
+    public internal::image_primary_< mesh_p<P>, mesh_image<P, V> >
   {
 
     typedef mln::internal::image_base_< mesh_p<P>, mesh_image<P, V> > super_;
@@ -143,7 +171,7 @@
   const V&
   mesh_image<P, V>::operator()(const mesh_psite<P>& p) const
   {
-    mln_precondition(p.m_ptr_ == & this->data_->mesh_);
+    mln_precondition(&p.mesh_ == &this->data_->mesh_);
     mln_precondition(p.i_ < this->data_->val_.size());
     return this->data_->val_[p.i_];
   }
@@ -153,7 +181,7 @@
   V&
   mesh_image<P, V>::operator()(const mesh_psite<P>& p)
   {
-    mln_precondition(p.m_ptr_ == & this->data_->mesh_);
+    mln_precondition(&p.mesh_ == &this->data_->mesh_);
     mln_precondition(p.i_ < this->data_->val_.size());
     return this->data_->val_[p.i_];
   }
Index: mln/draw/mesh.hh
--- mln/draw/mesh.hh	(revision 1602)
+++ mln/draw/mesh.hh	(working copy)
@@ -75,6 +75,9 @@
 
 # ifndef MLN_INCLUDE_ONLY
 
+    // FIXME: Add assertions on the size of the image: it must be big
+    // enough to hold the reprensentation of the graph.
+
     template <typename I, typename P>
     inline
     void
Index: mln/util/graph.hh
--- mln/util/graph.hh	(revision 1602)
+++ mln/util/graph.hh	(working copy)
@@ -40,6 +40,9 @@
  * \brief Definition of a graph.
  */
 
+// FIXME: Rename `s_node' to `node'.
+// FIXME: Rename `s_edge' to `edge'.
+// FIXME: Rename `links' to `edges'.
 
 namespace mln
 {
@@ -53,6 +56,7 @@
     struct s_node
     {
       T data;
+      // FIXME: Rename to `out_edges'.
       std::vector<unsigned> links;
     };
 
@@ -63,6 +67,7 @@
     template<>
     struct s_node<void>
     {
+      // FIXME: Rename to `out_edges'.
       std::list<unsigned> links;
     };
 
@@ -88,21 +93,21 @@
       unsigned node2;
     };
 
-    /*! \brief Generic graph using s_node and s_edge.
-     *
-     */
+    /// \brief Generic graph structure using s_node and s_edge.
+    /* FIXME: We don't mention anywhere whether this graph structure
+       handles directed or undirected graphs!  */
     template<typename N, typename E = void>
     struct graph
     {
-      /*! \brief Constructor.
-       *
-       */
+      /// The type of the set of nodes.
+      typedef std::vector< s_node<N>* > nodes;
+      /// The type of the set of edges.
+      typedef std::vector< s_edge<E>* > edges;
+
       graph ();
 
-      /*! \brief Add a void node.
-       *
-       */
-      void add_node (void);
+      /*! \brief Add a void node.  */
+      void add_node ();
 
 
       /*! \brief Add a void edge between \p n1 and \p n2.
@@ -112,7 +117,6 @@
        *
        * \pre n1 < nb_node_.
        * \pre n2 < nb_node_.
-       *
        */
       void add_edge (unsigned n1, unsigned n2);
 
@@ -123,7 +127,6 @@
        *
        * \pre nodes_.size () == nb_node_.
        * \pre links_.size () == nb_link_.
-       *
        */
       void consistency () const;
 
@@ -131,7 +134,6 @@
       /*! \brief Print on \p ostr the graph.
        *
        * \param[in] ostr The output stream.
-       *
        */
       void print_debug (std::ostream& ostr) const;
 
@@ -144,12 +146,13 @@
       unsigned nb_link_;
 
       /// The vector where is stocked the pointers of nodes.
-      std::vector<struct s_node<N>*> nodes_;
+      nodes nodes_;
 
       /// The vector where is stocked the pointers of links.
-      std::vector<struct s_edge<E>*> links_;
+      edges links_;
     };
 
+
 # ifndef MLN_INCLUDE_ONLY
 
     template<typename N, typename E>
@@ -165,7 +168,7 @@
     template<typename N, typename E>
     inline
     void
-    graph<N, E>::add_node (void)
+    graph<N, E>::add_node ()
     {
       struct s_node<N>* n = new struct s_node<N>;
 
@@ -183,7 +186,7 @@
 
       struct s_edge<E>* edge;
 
-      edge = new struct s_edge<E>;
+      edge = new s_edge<E>;
       edge->node1 = n1;
       edge->node2 = n2;
       links_.push_back (edge);
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0
                            
                          
                          
                            
    
                          
                        
                    
                        
                            
                                
                            
                            milena r1602: Replace the point in run_psite by the	p_runs reference
                        
                        
by nivaul_s@lrde.epita.fr 12 Dec '07
                    by nivaul_s@lrde.epita.fr 12 Dec '07
12 Dec '07
                    
                          URL: https://svn.lrde.epita.fr/svn/oln/trunk/milena
ChangeLog:
2007-12-12  Simon Nivault  <simon.nivault(a)lrde.epita.fr>
	Replace the point in run_psite by the p_runs reference.
	* mln/core/runs_psite.hh: Replace the point by the p_runs.
	* mln/core/p_run_piter.hh,
	* mln/core/internal/run_image.hh,
	* mln/core/mono_obased_rle_image.hh,
	* mln/core/mono_rle_image.hh,
	* mln/core/obased_rle_image.hh,
	* mln/core/p_runs.hh,
	* mln/core/rle_image.hh,
	* mln/core/sparse_image.hh,
	* tests/core/p_runs.cc: Propagate Changes.
	* tests/core/mono_obased_rle_image.cc,
	* tests/core/mono_rle_image.cc,
	* tests/core/obased_rle_image.cc,
	* tests/core/rle_image.cc,
	* tests/core/sparse_image.cc: Use the renamed image small.pgm.
---
 mln/core/internal/run_image.hh      |   11 -----
 mln/core/mono_obased_rle_image.hh   |    8 +--
 mln/core/mono_rle_image.hh          |    4 -
 mln/core/obased_rle_image.hh        |    8 +--
 mln/core/p_run_piter.hh             |   53 +++++++++++++++++++++---
 mln/core/p_runs.hh                  |   41 ++++++++----------
 mln/core/rle_image.hh               |    8 +--
 mln/core/runs_psite.hh              |   78 ++++++++++++------------------------
 mln/core/sparse_image.hh            |   12 ++---
 tests/core/mono_obased_rle_image.cc |    2 
 tests/core/mono_rle_image.cc        |    2 
 tests/core/obased_rle_image.cc      |    2 
 tests/core/p_runs.cc                |   28 ++++--------
 tests/core/rle_image.cc             |    2 
 tests/core/sparse_image.cc          |    2 
 15 files changed, 126 insertions(+), 135 deletions(-)
Index: trunk/milena/tests/core/mono_rle_image.cc
===================================================================
--- trunk/milena/tests/core/mono_rle_image.cc	(revision 1601)
+++ trunk/milena/tests/core/mono_rle_image.cc	(revision 1602)
@@ -62,7 +62,7 @@
   using value::int_u8;
 
   image2d<int_u8> lena;
-  io::pgm::load(lena, "../../img/tiny.pgm");
+  io::pgm::load(lena, "../../img/small.pgm");
   image2d<int_u8> cmp(lena.domain());
 
   unsigned n;
Index: trunk/milena/tests/core/sparse_image.cc
===================================================================
--- trunk/milena/tests/core/sparse_image.cc	(revision 1601)
+++ trunk/milena/tests/core/sparse_image.cc	(revision 1602)
@@ -58,7 +58,7 @@
   using value::int_u8;
 
   image2d<int_u8> lena;
-  io::pgm::load(lena, "../../img/tiny.pgm");
+  io::pgm::load(lena, "../../img/small.pgm");
   image2d<int_u8> cmp(lena.domain());
 
   unsigned n;
Index: trunk/milena/tests/core/obased_rle_image.cc
===================================================================
--- trunk/milena/tests/core/obased_rle_image.cc	(revision 1601)
+++ trunk/milena/tests/core/obased_rle_image.cc	(revision 1602)
@@ -58,7 +58,7 @@
   using value::int_u8;
 
   image2d<int_u8> lena;
-  io::pgm::load(lena, "../../img/tiny.pgm");
+  io::pgm::load(lena, "../../img/small.pgm");
   image2d<int_u8> cmp(lena.domain());
 
   unsigned n;
Index: trunk/milena/tests/core/rle_image.cc
===================================================================
--- trunk/milena/tests/core/rle_image.cc	(revision 1601)
+++ trunk/milena/tests/core/rle_image.cc	(revision 1602)
@@ -58,7 +58,7 @@
   using value::int_u8;
 
   image2d<int_u8> lena;
-  io::pgm::load(lena, "../../img/tiny.pgm");
+  io::pgm::load(lena, "../../img/small.pgm");
   image2d<int_u8> cmp(lena.domain());
 
   unsigned n;
Index: trunk/milena/tests/core/p_runs.cc
===================================================================
--- trunk/milena/tests/core/p_runs.cc	(revision 1601)
+++ trunk/milena/tests/core/p_runs.cc	(revision 1602)
@@ -56,10 +56,6 @@
   q = make::point2d(18, 42);
   r = make::point2d(50, 76);
 
-  // Psite declaration
-  runs_psite<point2d>  site(p, 5, 0);
-  runs_psite<point2d>  site2(r, 40, 0);
-
   // Pset test
   p_runs_<point2d> ps;
 
@@ -69,23 +65,17 @@
   ps.insert(p_run<point2d>(q, 5));
   mln_assertion(ps.npoints() == 12);
 
+  ps.insert(p_run<point2d>(r, 2));
+
+  ps.insert(p_run<point2d>(make::point2d(17,40), 6));
+
+  // Psite declaration
+  runs_psite<point2d>  site(ps, 5, 0);
+  runs_psite<point2d>  site2(ps, 6, 1);
+
   mln_assertion(ps.has(site));
   mln_assertion(!ps.has(site2));
 
-  ps.insert(p_run<point2d>(r, 2));
-  mln_assertion(!ps.has(site2));
 
-  ps.insert(p_run<point2d>(make::point2d(17,40), 6));
-  mln_fwd_piter_(p_runs_<point2d>) ppf(ps);
-  for_all(ppf)
-  {
-    std::cout << ppf << std::endl;
-  }
-  std::cout << std::endl;
-  mln_bkd_piter_(p_runs_<point2d>) ppb(ps);
-  for_all(ppb)
-  {
-    std::cout << ppb << std::endl;
-  }
-  // parc(ps);
+  parc(ps);
 }
Index: trunk/milena/tests/core/mono_obased_rle_image.cc
===================================================================
--- trunk/milena/tests/core/mono_obased_rle_image.cc	(revision 1601)
+++ trunk/milena/tests/core/mono_obased_rle_image.cc	(revision 1602)
@@ -58,7 +58,7 @@
   using value::int_u8;
 
   image2d<int_u8> lena;
-  io::pgm::load(lena, "../../img/tiny.pgm");
+  io::pgm::load(lena, "../../img/small.pgm");
   image2d<int_u8> cmp(lena.domain());
 
   unsigned n;
Index: trunk/milena/mln/core/internal/run_image.hh
===================================================================
--- trunk/milena/mln/core/internal/run_image.hh	(revision 1601)
+++ trunk/milena/mln/core/internal/run_image.hh	(revision 1602)
@@ -87,17 +87,6 @@
     float
     run_image_<T, P, E>::compression() const
     {
-      std::cout << float(exact(this)->data_->size_mem())
-		<< " / ( "
-		<< float (sizeof(T))
-		<< " * "
-		<< float (exact(this)->data_->domain_.bbox().npoints())
-		<< " )"
-		<< std::endl;
-      std::cout << exact(this)->data_->domain_.bbox().pmin()
-		<< " "
-		<< exact(this)->data_->domain_.bbox().pmax()
-		<< std::endl;
       return float(exact(this)->data_->size_mem()) /
 	float (sizeof(T) * exact(this)->data_->domain_.bbox().npoints());
     }
Index: trunk/milena/mln/core/rle_image.hh
===================================================================
--- trunk/milena/mln/core/rle_image.hh	(revision 1601)
+++ trunk/milena/mln/core/rle_image.hh	(revision 1602)
@@ -213,8 +213,8 @@
     const
   {
     mln_precondition(this->has_data() &&
-		     site.pset_pos_() < this->data_->values_.size());
-    return this->data_->values_[site.pset_pos_()];
+		     site.p_of_run() < this->data_->values_.size());
+    return this->data_->values_[site.p_of_run()];
   }
 
   template <typename P, typename T>
@@ -223,8 +223,8 @@
   rle_image<P, T>::operator() (const typename rle_image<P, T>::psite& site)
   {
     mln_precondition(this->has_data() &&
-		     site.pset_pos_() < this->data_->values_.size());
-    return this->data_->values_[site.pset_pos_()];
+		     site.p_of_run() < this->data_->values_.size());
+    return this->data_->values_[site.p_of_run()];
   }
 
   template <typename P, typename T>
Index: trunk/milena/mln/core/mono_rle_image.hh
===================================================================
--- trunk/milena/mln/core/mono_rle_image.hh	(revision 1601)
+++ trunk/milena/mln/core/mono_rle_image.hh	(revision 1602)
@@ -214,7 +214,7 @@
   mono_rle_image<P, T>::operator() (const typename mono_rle_image<P, T>::psite& site)
     const
   {
-    mln_precondition(site.pset_pos_() < this->data_->domain_.nruns());
+    mln_precondition(site.p_of_run() < this->data_->domain_.nruns());
     return this->data_->value_;
   }
 
@@ -231,7 +231,7 @@
   typename mono_rle_image<P, T>::lvalue
   mono_rle_image<P, T>::operator() (const typename mono_rle_image<P, T>::psite& site)
   {
-    mln_precondition(site.pset_pos_() < this->data_->domain_.nruns());
+    mln_precondition(site.p_of_run() < this->data_->domain_.nruns());
     return this->data_->value_;
   }
 
Index: trunk/milena/mln/core/runs_psite.hh
===================================================================
--- trunk/milena/mln/core/runs_psite.hh	(revision 1601)
+++ trunk/milena/mln/core/runs_psite.hh	(revision 1602)
@@ -34,6 +34,7 @@
  */
 
 # include <mln/core/concept/point_site.hh>
+# include <mln/core/p_runs.hh>
 
 
 namespace mln
@@ -56,9 +57,7 @@
     typedef mln_dpoint(P) dpoint;
     typedef mln_coord(P) coord;
 
-    runs_psite();
-    runs_psite(const p_runs_<P>& pr, const P& p);
-    runs_psite(P point, unsigned index, unsigned pset_pos);
+    runs_psite(const p_runs_<P>& pr, unsigned in_run, unsigned of_run);
 
     operator P () const;
 
@@ -69,16 +68,16 @@
     const P& range_start_() const;
 
     /// Return the position of this psite in the point set.
-    unsigned pset_pos_() const;
+    unsigned p_of_run() const;
 
     /// Return the position of this psite in the point set.
-    unsigned& pset_pos_();
+    unsigned& p_of_run();
 
     /// Return the position of this psite in the current range.
-    unsigned index_() const;
+    unsigned p_in_run() const;
 
     /// Return the position of this psite in the current range.
-    unsigned& index_();
+    unsigned& p_in_run();
 
     /// Reference to the corresponding point.
     const P& to_point() const;
@@ -89,13 +88,13 @@
   protected:
 
     /// Start of the psite range.
-    P p_;
+    const p_runs_<P>& pr_;
 
     /// Position in the psite range.
-    unsigned range_index_;
+    unsigned p_in_run_;
 
     /// Position of the psite in the point set.
-    unsigned pset_position_;
+    unsigned p_of_run_;
   };
 
 
@@ -103,37 +102,20 @@
 
   template <typename P>
   inline
-  runs_psite<P>::runs_psite(const p_runs_<P>& pr, const P& p)
-  {
-    unsigned i = 0;
-    while (i < pr.nruns() && p >= pr[i].first())
-      ++i;
-    mln_assertion(i != 0);
-
-    range_index_ = p[P::dim - 1] - pr[i - 1].first()[P::dim - 1];
-      
-    mln_assertion(pr[i - 1].npoints() > range_index_);
-
-    pset_position_ = i - 1;
-    p_ = pr[pset_position_].first();
-  }
-
-  template <typename P>
-  inline
-  runs_psite<P>::runs_psite(P point, unsigned index, unsigned pset_pos) :
-    p_(point),
-    range_index_(index),
-    pset_position_(pset_pos)
+  runs_psite<P>::runs_psite(const p_runs_<P>& pr, unsigned in_run, unsigned of_run)
+    : pr_(pr),
+      p_in_run_(in_run),
+      p_of_run_(of_run)
   {
+    mln_precondition(of_run < pr.nruns());
+    mln_precondition(in_run < pr[of_run].length());
   }
 
   template <typename P>
   inline
   runs_psite<P>::operator P() const
   {
-    P p = p_;
-    p[dim - 1] += range_index_;
-    return p;
+    return pr_[p_of_run_][p_in_run_];
   }
 
   template <typename P>
@@ -141,7 +123,7 @@
   const P&
   runs_psite<P>::range_start_() const
   {
-    return p_;
+    return pr_[p_of_run_].first();
   }
 
   template <typename P>
@@ -149,39 +131,39 @@
   P&
   runs_psite<P>::range_start_()
   {
-    return p_;
+    return pr_[p_of_run_].first();
   }
 
   template <typename P>
   inline
   unsigned
-  runs_psite<P>::pset_pos_() const
+  runs_psite<P>::p_of_run() const
   {
-    return pset_position_;
+    return p_of_run_;
   }
 
   template <typename P>
   inline
   unsigned&
-  runs_psite<P>::pset_pos_()
+  runs_psite<P>::p_of_run()
   {
-    return pset_position_;
+    return p_of_run_;
   }
 
   template <typename P>
   inline
   unsigned
-  runs_psite<P>::index_() const
+  runs_psite<P>::p_in_run() const
   {
-    return range_index_;
+    return p_in_run_;
   }
 
   template <typename P>
   inline
   unsigned&
-  runs_psite<P>::index_()
+  runs_psite<P>::p_in_run()
   {
-    return range_index_;
+    return p_in_run_;
   }
 
   template <typename P>
@@ -189,8 +171,7 @@
   const P&
   runs_psite<P>::to_point() const
   {
-    static P p = p_;
-    p[dim - 1] += range_index_;
+    static P p = pr_[p_of_run_][p_in_run_];
     return p;
   }
 
@@ -200,10 +181,7 @@
   runs_psite<P>::operator[](unsigned i) const
   {
     mln_precondition(i < dim);
-    if (i == dim - 1)
-      return p_[i] + range_index_;
-    else
-      return p_[i];
+    return pr_[p_of_run_][p_in_run_][i];
   }
 
 # endif // ! MLN_INCLUDE_ONLY
Index: trunk/milena/mln/core/obased_rle_image.hh
===================================================================
--- trunk/milena/mln/core/obased_rle_image.hh	(revision 1601)
+++ trunk/milena/mln/core/obased_rle_image.hh	(revision 1602)
@@ -241,8 +241,8 @@
     const
   {
     mln_precondition(this->has_data() &&
-		     site.pset_pos_() < this->data_->domain_.nruns());
-    return this->data_->values_[site.pset_pos_()];
+		     site.p_of_run() < this->data_->domain_.nruns());
+    return this->data_->values_[site.p_of_run()];
   }
 
   template <typename P, typename T>
@@ -251,8 +251,8 @@
   obased_rle_image<P, T>::operator() (const typename obased_rle_image<P, T>::psite& site)
   {
     mln_precondition(this->has_data() &&
-		     site.pset_pos_() < this->data_->domain_.nruns());
-    return this->data_->values_[site.pset_pos_()];
+		     site.p_of_run() < this->data_->domain_.nruns());
+    return this->data_->values_[site.p_of_run()];
   }
 
   template <typename P, typename T>
Index: trunk/milena/mln/core/p_run_piter.hh
===================================================================
--- trunk/milena/mln/core/p_run_piter.hh	(revision 1601)
+++ trunk/milena/mln/core/p_run_piter.hh	(revision 1602)
@@ -79,12 +79,16 @@
     /// Go to the next point.
     void next_();
 
+    /// Get the index of the point in the run.
+    unsigned ind() const;
+
     /// Convert the iterator into a point.
     operator P() const;
 
   protected:
     const p_run<P>* run_;
     bool is_valid_;
+    unsigned i_;
     P p_;
   };
 
@@ -130,12 +134,16 @@
     /// Go to the next point.
     void next_();
 
+    /// Get the index of the point in the run.
+    unsigned ind() const;
+
     /// Convert the iterator into a point.
     operator P() const;
 
   protected:
     const p_run<P>* run_;
     bool is_valid_;
+    unsigned i_;
     P p_;
   };
 
@@ -148,16 +156,17 @@
   template <typename P>
   inline
   p_run_fwd_piter_<P>::p_run_fwd_piter_()
-    : run_ (0)
+    : run_ (0),
+      is_valid_(false)
   {
   }
 
   template <typename P>
   inline
   p_run_fwd_piter_<P>::p_run_fwd_piter_(const p_run<P>& pr)
-    : run_(&pr)
+    : run_(&pr),
+      is_valid_(false)
   {
-    invalidate();
   }
 
   template <typename P>
@@ -166,7 +175,7 @@
   p_run_fwd_piter_<P>::assign_run(const p_run<P>& pr)
   {
     run_ = ≺
-    invalidate();
+    is_valid_ = false;
   }
 
   template <typename P>
@@ -175,6 +184,7 @@
   p_run_fwd_piter_<P>::to_point() const
   {
     mln_precondition(is_valid());
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     return p_;
   }
 
@@ -185,6 +195,7 @@
   {
     mln_precondition(i < dim);
     mln_precondition(is_valid());
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     return p_[i];
   }
 
@@ -210,6 +221,7 @@
   p_run_fwd_piter_<P>::start()
   {
     p_ = run_->first();
+    i_ = 0;
     is_valid_ = true;
   }
 
@@ -218,15 +230,27 @@
   void
   p_run_fwd_piter_<P>::next_()
   {
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     p_[dim - 1]++;
+    ++i_;
     is_valid_ = p_[dim - 1] - run_->first()[dim - 1] < (signed)run_->length();
   }
 
   template <typename P>
   inline
+  unsigned
+  p_run_fwd_piter_<P>::ind() const
+  {
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
+    return i_;
+  }
+
+  template <typename P>
+  inline
   p_run_fwd_piter_<P>::operator P() const
   {
     mln_precondition(is_valid());
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     return p_;
   }
 
@@ -243,9 +267,9 @@
   template <typename P>
   inline
   p_run_bkd_piter_<P>::p_run_bkd_piter_(const p_run<P>& pr)
-    : run_(&pr)
+    : run_(&pr),
+      is_valid_(false)
   {
-    invalidate();
   }
 
   template <typename P>
@@ -254,7 +278,7 @@
   p_run_bkd_piter_<P>::assign_run(const p_run<P>& pr)
   {
     run_ = ≺
-    invalidate();
+    is_valid_ = false;
   }
 
   template <typename P>
@@ -263,6 +287,7 @@
   p_run_bkd_piter_<P>::to_point() const
   {
     mln_precondition(is_valid());
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     return p_;
   }
 
@@ -273,6 +298,7 @@
   {
     mln_precondition(i < dim);
     mln_precondition(is_valid());
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     return p_[i];
   }
 
@@ -298,6 +324,7 @@
   p_run_bkd_piter_<P>::start()
   {
     p_ = (*run_)[run_->length() - 1];
+    i_ = run_->length() - 1;
     is_valid_ = true;
 }
 
@@ -306,15 +333,27 @@
   void
   p_run_bkd_piter_<P>::next_()
   {
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     p_[dim - 1]--;
+    --i_;
     is_valid_ = p_[dim - 1] - run_->first()[dim - 1] >= 0;
   }
 
   template <typename P>
   inline
+  unsigned
+  p_run_bkd_piter_<P>::ind() const
+  {
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
+    return i_;
+  }
+
+  template <typename P>
+  inline
   p_run_bkd_piter_<P>::operator P() const
   {
     mln_precondition(is_valid());
+    mln_assertion(p_[P::dim - 1] - run_->first()[P::dim - 1] == signed(i_));
     return p_;
   }
 
Index: trunk/milena/mln/core/mono_obased_rle_image.hh
===================================================================
--- trunk/milena/mln/core/mono_obased_rle_image.hh	(revision 1601)
+++ trunk/milena/mln/core/mono_obased_rle_image.hh	(revision 1602)
@@ -229,8 +229,8 @@
     const
   {
     mln_precondition(this->has_data() &&
-		     site.pset_pos_() < this->data_->domain_.nruns());
-    return this->data_->values_[site.pset_pos_()];
+		     site.p_of_run() < this->data_->domain_.nruns());
+    return this->data_->values_[site.p_of_run()];
   }
 
   template <typename P, typename T>
@@ -239,8 +239,8 @@
   mono_obased_rle_image<P, T>::operator() (const typename mono_obased_rle_image<P, T>::psite& site)
   {
     mln_precondition(this->has_data() &&
-		     site.pset_pos_() < this->data_->domain_.nruns());
-    return this->data_->values_[site.pset_pos_()];
+		     site.p_of_run() < this->data_->domain_.nruns());
+    return this->data_->values_[site.p_of_run()];
   }
 
   template <typename P, typename T>
Index: trunk/milena/mln/core/sparse_image.hh
===================================================================
--- trunk/milena/mln/core/sparse_image.hh	(revision 1601)
+++ trunk/milena/mln/core/sparse_image.hh	(revision 1602)
@@ -213,9 +213,9 @@
     const
   {
     mln_precondition(this->has_data());
-    mln_precondition(site.pset_pos_() < this->data_->values_.size());
-    mln_precondition(site.index_() < this->data_->values_[site.pset_pos_()].size());
-    return this->data_->values_[site.pset_pos_()][site.index_()];
+    mln_precondition(site.p_of_run() < this->data_->values_.size());
+    mln_precondition(site.p_in_run() < this->data_->values_[site.p_of_run()].size());
+    return this->data_->values_[site.p_of_run()][site.p_in_run()];
   }
 
   template <typename P, typename T>
@@ -224,9 +224,9 @@
   sparse_image<P, T>::operator() (const typename sparse_image<P, T>::psite& site)
   {
     mln_precondition(this->has_data() &&
-		     site.pset_pos_() < this->data_->values_.size() &&
-		     site.index_() < this->data_->values_[site.pset_pos_()].size());
-    return this->data_->values_[site.pset_pos_()][site.index_()];
+		     site.p_of_run() < this->data_->values_.size() &&
+		     site.p_in_run() < this->data_->values_[site.p_of_run()].size());
+    return this->data_->values_[site.p_of_run()][site.p_in_run()];
   }
 
   template <typename P, typename T>
Index: trunk/milena/mln/core/p_runs.hh
===================================================================
--- trunk/milena/mln/core/p_runs.hh	(revision 1601)
+++ trunk/milena/mln/core/p_runs.hh	(revision 1602)
@@ -127,7 +127,7 @@
   {
     for (unsigned i = 0; i < con_.nelements(); ++i)
     {
-      if (con_[i].first() == p.range_start_()  && con_[i].length() > p.index_())
+      if (con_[i].first() == p.range_start_() && con_[i].length() > p.p_in_run())
 	return true;
     }
     return false;
@@ -262,9 +262,6 @@
   {
   public:
 
-    /// Convertion into a point-site.
-    operator runs_psite<P> () const;
-
     /// Convertion into a point.
     operator P () const;
 
@@ -296,12 +293,6 @@
   }
 
   template <typename P, typename E>
-  p_runs_piter_<P, E>::operator runs_psite<P> () const
-  {
-    return runs_psite<P>(con_, p_);
-  }
-
-  template <typename P, typename E>
   inline
   p_runs_piter_<P, E>::operator P () const
   {
@@ -353,6 +344,9 @@
     /// Go to the next point.
     void next_();
 
+    /// Convertion into a point-site.
+    operator runs_psite<P> () const;
+
   protected:
 
     unsigned i_;
@@ -417,20 +411,12 @@
 	return;
     }
     this->p_ = it_;
+  }
 
-
-//     mln_precondition(this->is_valid());
-//     ++(this->site_.index_());
-
-//     if (this->site_.index_() >= it_->second)
-//     {
-//       ++it_;
-//       ++this->site_.pset_pos_();
-//       this->site_.range_start_() = it_->first;
-//       this->site_.index_() = 0;
-//     }
-//     this->p_ = this->site_.range_start_();
-//     this->p_[0] += this->site_.index_();
+  template <typename P>
+  p_runs_fwd_piter_<P>::operator runs_psite<P> () const
+  {
+    return runs_psite<P>(this->con_, it_.ind(), i_);
   }
 
 # endif // ! MLN_INCLUDE_ONLY
@@ -460,6 +446,9 @@
     /// Go to the next point.
     void next_();
 
+    /// Convertion into a point-site.
+    operator runs_psite<P> () const;
+
   protected:
 
     unsigned i_;
@@ -527,6 +516,12 @@
     this->p_ = it_;
   }
 
+  template <typename P>
+  p_runs_bkd_piter_<P>::operator runs_psite<P> () const
+  {
+    return runs_psite<P>(this->con_, it_.ind(), i_);
+  }
+
 # endif // ! MLN_INCLUDE_ONLY
 
 } // end of namespace mln
                    
                  
                  
                          
                            
                            1
                            
                          
                          
                            
                            0