From: Maxime van Noppen <yabo(a)lrde.epita.fr>
To: olena-patches(a)lrde.epita.fr
Subject: milena r2770: Fix an include problem in mln/morpho
URL: https://svn.lrde.epita.fr/svn/oln/branches/cleanup-2008/milena
ChangeLog:
2008-11-03 Maxime van Noppen <yabo(a)lrde.epita.fr>
Fix an include problem in mln/morpho.
* includes.hh: As erosion is used in dilation it must be included
* before. Same for complementation.
---
includes.hh | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
Index: branches/cleanup-2008/milena/mln/morpho/includes.hh
===================================================================
--- branches/cleanup-2008/milena/mln/morpho/includes.hh (revision 2769)
+++ branches/cleanup-2008/milena/mln/morpho/includes.hh (revision 2770)
@@ -66,11 +66,11 @@
# include <mln/win/diff.hh>
# include <mln/win/inter.hh>
-# include <mln/morpho/dilation.hh>
# include <mln/morpho/erosion.hh>
+# include <mln/morpho/complementation.hh>
+# include <mln/morpho/dilation.hh>
# include <mln/morpho/min.hh>
-# include <mln/morpho/complementation.hh>
# include <mln/morpho/minus.hh>
# include <mln/morpho/plus.hh>
https://svn.lrde.epita.fr/svn/oln/branches/cleanup-2008/milena
Index: ChangeLog
from Thierry Geraud <thierry.geraud(a)lrde.epita.fr>
Fix many little things in weighted window related stuff.
* tests/core/alias/w_window1d_int.cc: Fix doc.
* tests/core/alias/window1d.cc: Likewise.
Remove echo on std::cout.
* tests/core/alias/w_window3d_int.cc: Likewise.
* tests/core/alias/window3d.cc: Likewise.
* tests/core/alias/w_window2d_int.cc: Fix doc.
* tests/core/alias/window2d.cc: Remove useless include.
* mln/trait/image_from_grid.hh: Update doc style.
* mln/core/concept/weighted_window.hh: Likewise.
(sym): Fix sig in doc.
(W): Rename this parameter as...
(E): ...this to remain consistent with othe concept files.
(is_empty, is_centered, delta): Move to...
* mln/core/internal/weighted_window_base.hh: ...this new file.
* mln/core/concept/object.hh: Include some more metal stuff.
* mln/core/concept/window.hh
(level::fill): Replace by plain code to supress dep.
(internal::bbox_): Move this hack into...
* mln/core/internal/geom_bbox.hh: ...this new file.
Update include.
* mln/core/w_window.hh (w_window): Update inheritance.
* mln/core/internal/window_base.hh: Fix copyright.
* mln/make/w_window2d.hh: Fix missing include.
* mln/convert/to_image.hh: Likewise.
(to_image): Fix sig in the Weighted_Window overload.
mln/convert/to_image.hh | 11 +
mln/core/concept/object.hh | 2
mln/core/concept/weighted_window.hh | 63 ++++------
mln/core/concept/window.hh | 39 +-----
mln/core/internal/geom_bbox.hh | 75 ++++++++++++
mln/core/internal/weighted_window_base.hh | 178 ++++++++++++++++++++++++++++++
mln/core/internal/window_base.hh | 2
mln/core/w_window.hh | 57 ++-------
mln/make/w_window2d.hh | 1
mln/trait/image_from_grid.hh | 12 +-
tests/core/alias/w_window1d_int.cc | 5
tests/core/alias/w_window2d_int.cc | 8 -
tests/core/alias/w_window3d_int.cc | 15 --
tests/core/alias/window1d.cc | 9 -
tests/core/alias/window2d.cc | 1
tests/core/alias/window3d.cc | 14 --
16 files changed, 339 insertions(+), 153 deletions(-)
Index: tests/core/alias/w_window1d_int.cc
--- tests/core/alias/w_window1d_int.cc (revision 2767)
+++ tests/core/alias/w_window1d_int.cc (working copy)
@@ -1,4 +1,5 @@
-// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory (LRDE)
+// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -26,7 +27,7 @@
// Public License.
/// \file tests/core/alias/w_window1d_int.cc
-/// \brief Tests on mln::w_window1d_int.
+/// Tests on mln::w_window1d_int.
#include <mln/core/alias/w_window1d_int.hh>
#include <mln/win/segment1d.hh>
Index: tests/core/alias/window1d.cc
--- tests/core/alias/window1d.cc (revision 2767)
+++ tests/core/alias/window1d.cc (working copy)
@@ -1,4 +1,5 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -31,9 +32,7 @@
*/
#include <mln/core/alias/window1d.hh>
-#include <mln/core/image/image1d.hh>
#include <mln/convert/to_image.hh>
-#include <mln/debug/println.hh>
@@ -46,14 +45,12 @@
mln_assertion(w.is_centered() == false);
mln_assertion(w.is_symmetric() == true);
- // FIXME: Does not compile as expected.
+ // As expected, the code below does not compile:
// w.insert(-1,0);
w.insert(-1);
w.insert( 1);
image1d<bool> ima = convert::to_image(w);
- debug::println(ima);
-
mln_assertion(w.delta() == 1);
}
Index: tests/core/alias/w_window2d_int.cc
--- tests/core/alias/w_window2d_int.cc (revision 2767)
+++ tests/core/alias/w_window2d_int.cc (working copy)
@@ -1,4 +1,5 @@
// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -25,10 +26,9 @@
// reasons why the executable file might be covered by the GNU General
// Public License.
-/*! \file tests/core/alias/w_window2d_int.cc
- *
- * \brief Tests on mln::w_window2d_int.
- */
+/// \file tests/core/alias/w_window2d_int.cc
+///
+/// Tests on mln::w_window2d_int.
#include <mln/core/alias/w_window2d_int.hh>
#include <mln/win/rectangle2d.hh>
Index: tests/core/alias/window2d.cc
--- tests/core/alias/window2d.cc (revision 2767)
+++ tests/core/alias/window2d.cc (working copy)
@@ -31,7 +31,6 @@
/// Tests on mln::window2d.
#include <mln/core/alias/window2d.hh>
-#include <mln/core/image/image2d.hh>
#include <mln/convert/to_image.hh>
Index: tests/core/alias/w_window3d_int.cc
--- tests/core/alias/w_window3d_int.cc (revision 2767)
+++ tests/core/alias/w_window3d_int.cc (working copy)
@@ -1,4 +1,5 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -25,10 +26,9 @@
// reasons why the executable file might be covered by the GNU General
// Public License.
-/*! \file tests/core/alias/w_window3d_int.cc
- *
- * \brief Tests on mln::w_window3d_int.
- */
+/// tests/core/alias/w_window3d_int.cc
+///
+/// Tests on mln::w_window3d_int.
#include <mln/core/alias/w_window3d_int.hh>
#include <mln/win/cube3d.hh>
@@ -38,8 +38,6 @@
#include <mln/convert/to_fun.hh>
#include <mln/estim/sum.hh>
-#include <mln/debug/println.hh>
-
int f(mln::point3d p)
{
@@ -64,8 +62,6 @@
w_window3d_int w_win = make::w_window3d(ws);
image3d<int> ima = convert::to_image(w_win);
- debug::println(ima);
- std::cout << std::endl;
w_window3d_int w_win_2 = convert::to<w_window3d_int>(ima);
mln_assertion(w_win_2 == w_win);
}
@@ -77,7 +73,6 @@
// -2 -1 0 +1 +2
// -1 0 +1 +2 +3
image3d<int> ima = convert::to_image(w_win);
- debug::println(ima);
mln_assertion(estim::sum(ima) == 0);
}
Index: tests/core/alias/window3d.cc
--- tests/core/alias/window3d.cc (revision 2767)
+++ tests/core/alias/window3d.cc (working copy)
@@ -1,4 +1,5 @@
-// Copyright (C) 2007 EPITA Research and Development Laboratory
+// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -31,10 +32,7 @@
*/
#include <mln/core/alias/window3d.hh>
-#include <mln/core/image/image3d.hh>
#include <mln/convert/to_image.hh>
-#include <mln/debug/println.hh>
-
int main()
@@ -46,12 +44,10 @@
mln_assertion(w.is_centered() == false);
mln_assertion(w.is_symmetric() == true);
- w.insert(dpoint3d(-1, -1, -1));
- w.insert(dpoint3d( 1, 1, 1));
- w.insert(dpoint3d( 0, 0, 2));
+ w.insert(-1, -1, -1);
+ w.insert( 1, 1, 1);
+ w.insert( 0, 0, 2);
image3d<bool> ima = convert::to_image(w);
- debug::println(ima);
-
mln_assertion(w.delta() == 2);
}
Index: mln/trait/image_from_grid.hh
--- mln/trait/image_from_grid.hh (revision 2767)
+++ mln/trait/image_from_grid.hh (working copy)
@@ -1,4 +1,5 @@
// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory
+// (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
@@ -28,10 +29,13 @@
#ifndef MLN_TRAIT_IMAGE_FROM_MESH_HH
# define MLN_TRAIT_IMAGE_FROM_MESH_HH
-/*! \file mln/trait/image_from_grid.hh
- *
- * \brief Definition of the "image from mesh" trait.
- */
+/// \file mln/trait/image_from_grid.hh
+///
+/// Definition of the "image from mesh" trait.
+///
+/// This file shall not include the concrete image types it returns;
+/// otherwise we get circular dependencies. As a consequence the user
+/// shall include the appropriate image type she deals with.
# include <mln/core/grids.hh>
Index: mln/core/w_window.hh
--- mln/core/w_window.hh (revision 2767)
+++ mln/core/w_window.hh (working copy)
@@ -37,7 +37,7 @@
# include <map>
-# include <mln/core/concept/weighted_window.hh>
+# include <mln/core/internal/weighted_window_base.hh>
# include <mln/core/concept/image.hh>
# include <mln/core/site_set/box.hh>
# include <mln/core/window.hh>
@@ -45,7 +45,6 @@
# include <mln/value/ops.hh>
# include <mln/util/ord.hh>
-# include <mln/level/fill.hh>
# include <mln/geom/bbox.hh> // FIXME: We may have some dep trouble with this include.
# include <mln/literal/zero.hh>
# include <mln/convert/to.hh>
@@ -63,7 +62,7 @@
{
template <typename D, typename W>
- struct window_< mln::w_window<D,W> > : window_<W>
+ struct window_< mln::w_window<D,W> > : window_< mln::window<D> >
{
// Same traits as its corresponding window.
};
@@ -78,23 +77,15 @@
* the type of weights.
*/
template <typename D, typename W>
- struct w_window : public Weighted_Window< w_window<D,W> >
+ struct w_window : public internal::weighted_window_base< mln::window<D>,
+ w_window<D,W> >
{
/// Dpsite associated type.
typedef D dpsite;
- /// Psite associated type.
- typedef mln_psite(D) psite;
-
- /// Site associated type.
- typedef mln_site(D) site;
-
/// Weight associated type.
typedef W weight;
- /// Window associated type.
- typedef mln::window<D> window;
-
/// Site_Iterator type to browse (forward) the points of a generic w_window.
typedef with_w_< dpsites_fwd_piter< w_window<D, W> >, W > fwd_qiter;
@@ -118,12 +109,6 @@
const std::vector<W>& weights() const;
- // Give the \p i-th delta-point.
- const D& dp(unsigned i) const;
-
- /// Give the number of delta-points.
- unsigned size() const;
-
/// Give access to the vector of delta-points.
const std::vector<D>& std_vector() const;
@@ -237,25 +222,6 @@
template <typename D, typename W>
inline
- const D&
- w_window<D,W>::dp(unsigned i) const
- {
- mln_precondition(i < win_.size());
- mln_invariant(wei_.size() == win_.size());
- return win_.dp(i);
- }
-
- template <typename D, typename W>
- inline
- unsigned
- w_window<D,W>::size() const
- {
- mln_invariant(wei_.size() == win_.size());
- return win_.size();
- }
-
- template <typename D, typename W>
- inline
const std::vector<D>&
w_window<D,W>::std_vector() const
{
@@ -344,9 +310,10 @@
mlc_converts_to(mln_value(I), W)::check();
const I& ima = exact(from_);
to.clear();
+ mln_value(I) zero = literal::zero;
mln_piter(I) p(ima.domain());
for_all(p)
- if (ima(p) != literal::zero)
+ if (ima(p) != zero)
to.insert(ima(p), convert::to<D>(p));
}
@@ -363,8 +330,13 @@
// mln_precondition(w_win.is_valid());
ima.init_(geom::bbox(w_win));
- level::fill(ima, literal::zero);
-
+ {
+ // level::fill(ima, literal::zero) is:
+ mln_value(I) zero = literal::zero;
+ mln_piter(I) p(ima.domain());
+ for_all(p)
+ ima(p) = zero;
+ }
unsigned n = w_win.size();
for (unsigned i = 0; i < n; ++i)
ima(convert::to<P>(w_win.dp(i))) = w_win.w(i);
@@ -407,9 +379,10 @@
box<P> b(all_to(-s), all_to(+s));
mln_fwd_piter(box<P>) p(b);
unsigned i = 0;
+ V zero = literal::zero;
for_all(p)
{
- if (weight[i] != literal::zero)
+ if (weight[i] != zero)
to.insert(weight[i], convert::to<D>(p));
++i;
}
Index: mln/core/concept/weighted_window.hh
--- mln/core/concept/weighted_window.hh (revision 2767)
+++ mln/core/concept/weighted_window.hh (working copy)
@@ -29,10 +29,11 @@
#ifndef MLN_CORE_CONCEPT_WEIGHTED_WINDOW_HH
# define MLN_CORE_CONCEPT_WEIGHTED_WINDOW_HH
-/*! \file mln/core/concept/weighted_window.hh
- *
- * \brief Definition of the concept of mln::Weighted_Window.
- */
+/// \file mln/core/concept/weighted_window.hh
+///
+/// Definition of the concept of mln::Weighted_Window.
+///
+/// \todo Make ::sym() be optional.
# include <mln/core/concept/object.hh>
# include <mln/core/concept/iterator.hh>
@@ -42,8 +43,9 @@
namespace mln
{
- // Fwd decl.
- template <typename W> struct Weighted_Window;
+ // Forward declaration.
+ template <typename E> struct Weighted_Window;
+
// Weighted_Window category flag type.
template <>
@@ -59,8 +61,8 @@
* \see mln::doc::Weighted_Window for a complete documentation of
* this class contents.
*/
- template <typename W>
- struct Weighted_Window : public Object<W>
+ template <typename E>
+ struct Weighted_Window : public Object<E>
{
typedef Weighted_Window<void> category;
@@ -74,29 +76,9 @@
typedef weight;
typedef window;
- E& sym();
+ void sym();
*/
- /// Test if the weighted window is empty; final method.
- bool is_empty() const
- {
- return exact(this)->win().is_empty();
- }
-
- /// Test if the weighted window is centered; final method.
- bool is_centered() const
- {
- return exact(this)->win().is_centered();
- }
-
- // FIXME: Remove because too ambiguous: bool is_symmetric() const
-
- /// Give the maximum coordinate gap.
- unsigned delta() const
- {
- return exact(this)->win().delta();
- }
-
protected:
Weighted_Window();
};
@@ -110,24 +92,27 @@
W operator-(const Weighted_Window<W>& rhs);
+
# ifndef MLN_INCLUDE_ONLY
- template <typename W>
+ template <typename E>
inline
- Weighted_Window<W>::Weighted_Window()
+ Weighted_Window<E>::Weighted_Window()
{
- //typedef mln_psite(E) point;
- //typedef mln_dpsite(E) dpoint;
- typedef mln_weight(W) weight;
- typedef mln_window(W) window;
+ typedef mln_site(E) site;
+ typedef mln_psite(E) psite;
+ typedef mln_dpsite(E) dpsite;
+
+ typedef mln_weight(E) weight;
+ typedef mln_window(E) window;
- typedef mln_fwd_qiter(W) fwd_qiter;
- typedef mln_bkd_qiter(W) bkd_qiter;
+ typedef mln_fwd_qiter(E) fwd_qiter;
+ typedef mln_bkd_qiter(E) bkd_qiter;
- void (W::*m1)() = & W::sym;
+ void (E::*m1)() = & E::sym;
m1 = 0;
- const window& (W::*m2)() const = & W::win;
+ const window& (E::*m2)() const = & E::win;
m2 = 0;
}
Index: mln/core/concept/object.hh
--- mln/core/concept/object.hh (revision 2767)
+++ mln/core/concept/object.hh (working copy)
@@ -47,6 +47,8 @@
# include <mln/metal/is_a.hh>
# include <mln/metal/is.hh>
# include <mln/metal/is_not.hh>
+# include <mln/metal/equal.hh>
+# include <mln/metal/not_equal.hh>
# include <mln/metal/converts_to.hh>
# include <mln/metal/ret.hh>
# include <mln/metal/unqualif.hh>
Index: mln/core/concept/window.hh
--- mln/core/concept/window.hh (revision 2767)
+++ mln/core/concept/window.hh (working copy)
@@ -38,8 +38,6 @@
*
* \todo The is_centered() method could also exist when the window is
* not regular...
- *
- * \todo Remove hack.
*/
# include <mln/core/concept/object.hh>
@@ -47,10 +45,7 @@
# include <mln/trait/windows.hh>
# include <mln/core/site_set/p_array.hh>
-
-# include <mln/accu/bbox.hh>
-# include <mln/literal/origin.hh>
-# include <mln/level/fill.hh>
+# include <mln/core/internal/geom_bbox.hh> // For use in convert::from_to.
# include <mln/convert/from_to.hxx>
@@ -307,27 +302,6 @@
namespace convert
{
- namespace internal
- {
-
-
- // FIXME: Hack to avoid including geom::bbox (circular
- // dependency).
-
- template <typename W>
- box<mln_psite(W)> bbox_(const Window<W>& win)
- {
- typedef mln_psite(W) P;
- accu::bbox<P> b;
- P O = literal::origin;
- mln_qiter(W) q(exact(win), O);
- for_all(q)
- b.take(q);
- return b;
- }
-
- }
-
template <typename W, typename I>
void
from_to(const Window<W>& win_, Image<I>& ima_)
@@ -343,9 +317,14 @@
// mln_precondition(win.is_valid());
mln_precondition(! ima.has_data());
- ima.init_(internal::bbox_(win)); // geom::bbox(win));
- level::fill(ima, false);
-
+ // Hack (below) to avoid circular dependency.
+ ima.init_(mln::internal::geom_bbox(win));
+ {
+ // level::fill(ima, false) is:
+ mln_piter(I) p(ima.domain());
+ for_all(p)
+ ima(p) = false;
+ }
unsigned n = win.size();
for (unsigned i = 0; i < n; ++i)
ima(convert::to<P>(win.dp(i))) = true;
Index: mln/core/internal/geom_bbox.hh
--- mln/core/internal/geom_bbox.hh (revision 0)
+++ mln/core/internal/geom_bbox.hh (revision 0)
@@ -0,0 +1,75 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
+//
+// 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_INTERNAL_GEOM_BBOX_HH
+# define MLN_CORE_INTERNAL_GEOM_BBOX_HH
+
+/// \file mln/core/internal/geom_bbox.hh
+///
+/// \internal Routine that computes a bounding box from a window.
+/// This file is included in mln/core/concept/window.hh and avoid
+/// circular dependency since mln/geom/bbox.hh cannot be included in
+/// concept files.
+
+# include <mln/accu/bbox.hh>
+# include <mln/literal/origin.hh>
+
+
+namespace mln
+{
+
+ namespace internal
+ {
+
+ template <typename W>
+ box<mln_psite(W)>
+ geom_bbox(const W& win);
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ template <typename W>
+ box<mln_psite(W)>
+ geom_bbox(const W& win)
+ {
+ typedef mln_psite(W) P;
+ accu::bbox<P> b;
+ P O = literal::origin;
+ mln_qiter(W) q(exact(win), O);
+ for_all(q)
+ b.take(q);
+ return b;
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::internal
+
+} // end of namespace mln
+
+
+#endif // ! MLN_CORE_INTERNAL_GEOM_BBOX_HH
Index: mln/core/internal/weighted_window_base.hh
--- mln/core/internal/weighted_window_base.hh (revision 0)
+++ mln/core/internal/weighted_window_base.hh (revision 0)
@@ -0,0 +1,178 @@
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
+//
+// 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_INTERNAL_WEIGHTED_WINDOW_BASE_HH
+# define MLN_CORE_INTERNAL_WEIGHTED_WINDOW_BASE_HH
+
+/// \file mln/core/internal/weighted_window_base.hh
+///
+/// Definition of a base class for weighted window classes.
+
+# include <mln/core/concept/weighted_window.hh>
+
+
+namespace mln
+{
+
+ namespace internal
+ {
+
+ /// Base class for weighted window classes.
+ ///
+ /// \p W is the corresponding window type.
+
+ template <typename W, typename E>
+ struct weighted_window_base : public Weighted_Window<E>
+ {
+
+ /// Window associated type.
+ typedef W window;
+
+ /// Dpsite associated type.
+ typedef mln_dpsite(W) dpsite;
+
+ /// Psite associated type.
+ typedef mln_psite(W) psite;
+
+ /// Site associated type.
+ typedef mln_site(W) site;
+
+ /// Test if the weighted window is empty; final method.
+ bool is_empty() const;
+
+ /// Give the window size; final method. This method is valid
+ /// iff the underlying window has a fixed size.
+ unsigned size() const;
+
+ /// Test if the weighted window is centered; final method. This
+ /// method is valid iff the support is regular and the
+ /// definition is not varying.
+ bool is_centered() const;
+
+ /// Give the maximum coordinate gap; final method. This method
+ /// is valid iff the support is regular and the definition is
+ /// not varying.
+ unsigned delta() const;
+
+ /// Give the \p i-th delta-point; final method. This method is
+ /// valid iff the support is regular and the definition is
+ /// unique.
+ const mln_dpsite(W)& dp(unsigned i) const;
+
+ /// Test if the \p dp delta-point is in this window; final
+ /// method. This method is valid iff the support is regular and
+ /// the definition is unique.
+ bool has(const mln_dpsite(W)& dp) const;
+
+ protected:
+ weighted_window_base();
+ };
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ template <typename W, typename E>
+ inline
+ weighted_window_base<W,E>::weighted_window_base()
+ {
+ }
+
+ template <typename W, typename E>
+ inline
+ bool
+ weighted_window_base<W,E>::is_empty() const
+ {
+ return exact(this)->win().is_empty();
+ }
+
+ template <typename W, typename E>
+ inline
+ unsigned
+ weighted_window_base<W,E>::size() const
+ {
+ mlc_equal(mln_trait_window_size(W),
+ trait::window::size::fixed)::check();
+ return exact(this)->win().size();
+ }
+
+ template <typename W, typename E>
+ inline
+ bool
+ weighted_window_base<W,E>::is_centered() const
+ {
+ mlc_equal(mln_trait_window_support(W),
+ trait::window::support::regular)::check();
+ mlc_not_equal(mln_trait_window_definition(W),
+ trait::window::definition::varying)::check();
+ return exact(this)->win().is_centered();
+ }
+
+ template <typename W, typename E>
+ inline
+ unsigned
+ weighted_window_base<W,E>::delta() const
+ {
+ mlc_equal(mln_trait_window_support(W),
+ trait::window::support::regular)::check();
+ mlc_not_equal(mln_trait_window_definition(W),
+ trait::window::definition::varying)::check();
+ return exact(this)->win().delta();
+ }
+
+ template <typename W, typename E>
+ inline
+ const mln_dpsite(W)&
+ weighted_window_base<W,E>::dp(unsigned i) const
+ {
+ mlc_equal(mln_trait_window_support(W),
+ trait::window::support::regular)::check();
+ mlc_equal(mln_trait_window_definition(W),
+ trait::window::definition::unique)::check();
+ mln_precondition(i < this->size());
+ return exact(this)->win().dp(i);
+ }
+
+ template <typename W, typename E>
+ inline
+ bool
+ weighted_window_base<W,E>::has(const mln_dpsite(W)& dp) const
+ {
+ mlc_equal(mln_trait_window_support(W),
+ trait::window::support::regular)::check();
+ mlc_equal(mln_trait_window_definition(W),
+ trait::window::definition::unique)::check();
+ return exact(this)->win().has(dp);
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::internal
+
+} // end of namespace mln
+
+
+#endif // ! MLN_CORE_INTERNAL_WEIGHTED_WINDOW_BASE_HH
Index: mln/core/internal/window_base.hh
--- mln/core/internal/window_base.hh (revision 2767)
+++ mln/core/internal/window_base.hh (working copy)
@@ -1,4 +1,4 @@
-// Copyright (C) 2008 EPITA Research and Development Laboratory
+// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE)
//
// This file is part of the Olena Library. This library is free
// software; you can redistribute it and/or modify it under the terms
Index: mln/make/w_window2d.hh
--- mln/make/w_window2d.hh (revision 2767)
+++ mln/make/w_window2d.hh (working copy)
@@ -36,6 +36,7 @@
# include <mln/core/w_window.hh>
# include <mln/core/alias/dpoint2d.hh>
+# include <mln/convert/from_to.hxx>
namespace mln
Index: mln/convert/to_image.hh
--- mln/convert/to_image.hh (revision 2767)
+++ mln/convert/to_image.hh (working copy)
@@ -40,12 +40,13 @@
# include <mln/core/concept/weighted_window.hh>
# include <mln/core/concept/neighborhood.hh>
-# include <mln/literal/zero.hh>
# include <mln/geom/bbox.hh>
# include <mln/level/fill.hh>
# include <mln/histo/data.hh>
-
+# include <mln/core/image/image1d.hh>
+# include <mln/core/image/image2d.hh>
+# include <mln/core/image/image3d.hh>
namespace mln
@@ -68,7 +69,7 @@
/// Convert a weighted window \p w_win into an image.
template <typename W>
- mln_image_from_grid(mln_site(W)::grid, bool)
+ mln_image_from_grid(mln_site(W)::grid, mln_weight(W))
to_image(const Weighted_Window<W>& w_win);
/// Convert a neighborhood \p nbh into a binary image.
@@ -114,12 +115,12 @@
template <typename W>
inline
- mln_image_from_grid(mln_site(W)::grid, bool)
+ mln_image_from_grid(mln_site(W)::grid, mln_weight(W))
to_image(const Weighted_Window<W>& w_win)
{
mln_is_simple_window(W)::check();
// mln_precondition(exact(w_win).is_valid());
- mln_image_from_grid(mln_site(W)::grid, bool) tmp;
+ mln_image_from_grid(mln_site(W)::grid, mln_weight(W)) tmp;
convert::from_to(exact(w_win), tmp);
return tmp;
}