https://svn.lrde.epita.fr/svn/oln/branches/cleanup-2008/milena
Index: ChangeLog
from Thierry Geraud <thierry.geraud(a)lrde.epita.fr>
Add accu snake_2d and transform; revamp accu compute.
* tests/accu/snake_2d.cc: New.
* mln/accu/snake_2d.hh: New.
* mln/accu/transform.hh: New.
* mln/core/image/image2d.hh (include): Re-activate make/image2d.
* tests/accu/transform.cc: New.
* tests/accu/compute.cc (FIXME): Fix.
* tests/accu/Makefile.am: Update.
* mln/accu/min.hh: Fix (c) and upgrade doc layout.
* mln/accu/count.hh: Likewise.
(untake): New.
* mln/accu/compute.hh: Revamp w.r.t. convention.
* mln/transform/influence_zone_geodesic.hh: Fix guard.
* mln/transform/distance.hh: Upgrade doc layout.
* mln/transform/distance_geodesic.hh: Fix guard.
* tests/transform/Makefile.am: Update.
* mln/morpho/erosion.hh: Fix layout.
mln/accu/compute.hh | 83 ++++++++++++--
mln/accu/count.hh | 28 ++++
mln/accu/min.hh | 8 -
mln/accu/snake_2d.hh | 130 +++++++++++++++++++----
mln/accu/transform.hh | 175 +++++++++++++++++++++++++++++++
mln/core/image/image2d.hh | 2
mln/morpho/erosion.hh | 10 +
mln/transform/distance.hh | 9 -
mln/transform/distance_geodesic.hh | 2
mln/transform/influence_zone_geodesic.hh | 3
tests/accu/Makefile.am | 4
tests/accu/compute.cc | 26 +---
tests/accu/snake_2d.cc | 52 +++++++++
tests/accu/transform.cc | 62 ++++++++++
tests/transform/Makefile.am | 6 -
15 files changed, 533 insertions(+), 67 deletions(-)
Index: tests/accu/transform.cc
--- tests/accu/transform.cc (revision 0)
+++ tests/accu/transform.cc (revision 0)
@@ -0,0 +1,62 @@
+// 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.
+
+/// \file tests/accu/transform.cc
+///
+/// Tests on mln::accu::transform.
+
+#include <mln/core/image/image2d.hh>
+#include <mln/accu/transform.hh>
+
+#include <mln/accu/count.hh>
+#include <mln/win/rectangle2d.hh>
+
+#include <mln/pw/all.hh>
+#include <mln/level/compare.hh>
+
+
+int main()
+{
+ using namespace mln;
+
+ image2d<int> ima(4, 5);
+ win::rectangle2d rec(3, 3);
+
+ {
+ image2d<unsigned>
+ out = accu::transform(ima, accu::count<int>(), rec),
+ ref(ima.domain());
+ mln_assertion(out == (pw::cst(rec.size()) | ima.domain()));
+ }
+
+ {
+ image2d<unsigned>
+ out = accu::transform(ima, accu::meta::count(), rec),
+ ref(ima.domain());
+ mln_assertion(out == (pw::cst(rec.size()) | ima.domain()));
+ }
+}
Index: tests/accu/compute.cc
--- tests/accu/compute.cc (revision 2833)
+++ tests/accu/compute.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,31 +26,24 @@
// reasons why the executable file might be covered by the GNU General
// Public License.
-/*! \file tests/accu/compute.cc
- *
- * \brief Tests on mln::accu::compute.
- */
+/// \file tests/accu/compute.cc
+///
+/// Tests on mln::accu::compute.
#include <mln/core/image/image2d.hh>
#include <mln/value/int_u8.hh>
+#include <mln/accu/count.hh>
#include <mln/accu/compute.hh>
-#include <mln/level/compute.hh>
-#include <mln/accu/min.hh>
int main()
{
using namespace mln;
using typename value::int_u8;
- // FIXME : make this test compile
-// int_u8 vs[3][3] = { {9,8,7},
-// {6,5,4},
-// {3,2,1} };
-
-// image2d<int_u8> ima = make::image(vs);
-// int a = accu::compute<accu::min>(ima);
-
-// std::cout << a << std::endl;
+ unsigned n = 3;
+ image2d<int_u8> ima(n, n);
+ unsigned c = accu::compute(accu::meta::count(), ima);
+ mln_assertion(c = n * n);
}
Index: tests/accu/Makefile.am
--- tests/accu/Makefile.am (revision 2833)
+++ tests/accu/Makefile.am (working copy)
@@ -19,6 +19,8 @@
nil \
pair \
rank \
+ snake_2d \
+ transform \
tuple
all_accus_SOURCES = all_accus.cc
@@ -37,6 +39,8 @@
nil_SOURCES = nil.cc
pair_SOURCES = pair.cc
rank_SOURCES = rank.cc
+snake_2d_SOURCES = snake_2d.cc
+transform_SOURCES = transform.cc
tuple_SOURCES = tuple.cc
TESTS = $(check_PROGRAMS)
Index: tests/accu/snake_2d.cc
--- tests/accu/snake_2d.cc (revision 0)
+++ tests/accu/snake_2d.cc (revision 0)
@@ -0,0 +1,52 @@
+// 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.
+
+/// \file tests/accu/snake_2d.cc
+///
+/// Tests on mln::accu::snake_2d.
+
+#include <mln/core/image/image2d.hh>
+#include <mln/accu/snake_2d.hh>
+#include <mln/accu/count.hh>
+#include <mln/win/rectangle2d.hh>
+#include <mln/pw/all.hh>
+#include <mln/level/compare.hh>
+
+
+int main()
+{
+ using namespace mln;
+
+ image2d<int> ima(4, 5);
+ win::rectangle2d rec(3, 3);
+
+ image2d<unsigned>
+ out = accu::snake_2d(accu::meta::count(), ima, rec),
+ ref(ima.domain());
+
+ mln_assertion(out == (pw::cst(rec.size()) | ima.domain()));
+}
Index: tests/transform/Makefile.am
--- tests/transform/Makefile.am (revision 2833)
+++ tests/transform/Makefile.am (working copy)
@@ -3,8 +3,12 @@
include $(top_srcdir)/milena/tests/tests.mk
check_PROGRAMS = \
- distance
+ distance \
+ distance_geodesic \
+ influence_zone_geodesic
distance_SOURCES = distance.cc
+distance_geodesic_SOURCES = distance_geodesic.cc
+influence_zone_geodesic_SOURCES = influence_zone_geodesic.cc
TESTS = $(check_PROGRAMS)
Index: mln/core/image/image2d.hh
--- mln/core/image/image2d.hh (revision 2833)
+++ mln/core/image/image2d.hh (working copy)
@@ -691,7 +691,7 @@
# include <mln/make/image.hh>
-// # include <mln/make/image2d.hh>
+# include <mln/make/image2d.hh>
#endif // ! MLN_CORE_IMAGE_IMAGE2D_HH
Index: mln/accu/snake_2d.hh
--- mln/accu/snake_2d.hh (revision 2832)
+++ mln/accu/snake_2d.hh (working copy)
@@ -1,16 +1,90 @@
-#include <mln/core/alias/neighb2d.hh>
+// 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_ACCU_SNAKE_2D_HH
+# define MLN_ACCU_SNAKE_2D_HH
+
+/// \file mln/accu/snake_2d.hh
+///
+/// Run an accumulator in a snake-like browsing.
+
+#include <mln/core/concept/image.hh>
+#include <mln/core/concept/meta_accumulator.hh>
+#include <mln/core/alias/window2d.hh>
#include <mln/win/diff.hh>
#include <mln/win/shift.hh>
-#include <mln/extension/adjust_fill.hh>
+#include <mln/extension/adjust.hh>
#include <mln/canvas/browsing/snake_generic.hh>
+
+
namespace mln
{
+ namespace accu
+ {
+
+
+ template <typename A, typename I, typename W>
+ mln_ch_value(I, mln_result(A))
+ snake_2d(const Accumulator<A>&, const Image<I>& input, const
Window<W>& win);
+
+
+ template <typename A, typename I, typename W>
+ mln_ch_value(I, mln_accu_with(A, mln_value(I))::result)
+ snake_2d(const Meta_Accumulator<A>&, const Image<I>& input,
const Window<W>& win);
+
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+ namespace internal
+ {
+
+
+ template <typename I, typename W>
+ void snake_2d_tests(const Image<I>& input_, const Window<W>&
win_)
+ {
+ const I& input = exact(input_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.has_data());
+ mln_precondition(! win.is_empty());
+ // mln_precondition(! win.is_valid());
+
+ (void) input;
+ (void) win;
+ }
+
+
template <typename I, typename W, typename A>
- struct snake2d_functor
+ struct snake_2d_functor
{
- typedef snake2d_functor<I,W, A> self;
+ typedef snake_2d_functor<I,W, A> self;
typedef void (self::*move_fun)();
typedef mln_deduce(I, psite, delta) dpsite;
@@ -44,9 +118,9 @@
std::vector<move_fun> moves;
std::vector<dpsite> dps;
- snake2d_functor(const I& input, const W& win)
- : input(input),
- win(win),
+ snake_2d_functor(const Image<I>& input, const Window<W>& win)
+ : input(exact(input)),
+ win(exact(win)),
accu(),
win_left_fwd(win::shift(win, mln::left) - win),
@@ -155,36 +229,54 @@
};
+
+ } // end of namespace mln::accu::internal
+
+
+
template <typename A, typename I, typename W>
inline
mln_ch_value(I, mln_result(A))
- snake2d(const Accumulator<A>&, const Image<I>& input, const
Window<W>& win)
+ snake_2d(const Accumulator<A>&, const Image<I>& input, const
Window<W>& win)
{
- trace::entering("accu::snake2d");
+ trace::entering("accu::snake_2d");
- typedef snake2d_functor<I, W, A> F;
- F f(exact(input), exact(win));
- canvas::browsing::snake_generic(f);
+ internal::snake_2d_tests(input, win);
- trace::exiting("accu::snake2d");
+ extension::adjust(input, win);
+ internal::snake_2d_functor<I, W, A> f(input, win);
+ canvas::browsing::snake_generic(f);
+ trace::exiting("accu::snake_2d");
return f.output;
}
+
template <typename A, typename I, typename W>
inline
mln_ch_value(I, mln_accu_with(A, mln_value(I))::result)
- snake2d(const Meta_Accumulator<A>&, const Image<I>& input, const
Window<W>& win)
+ snake_2d(const Meta_Accumulator<A>&, const Image<I>& input,
const Window<W>& win)
{
- trace::entering("accu::snake2d");
+ trace::entering("accu::snake_2d");
+
+ internal::snake_2d_tests(input, win);
typedef mln_accu_with(A, mln_value(I)) A_;
- typedef snake2d_functor<I, W, A_> F;
- F f(exact(input), exact(win));
+
+ extension::adjust(input, win);
+ internal::snake_2d_functor<I, W, A_> f(input, win);
canvas::browsing::snake_generic(f);
- trace::exiting("accu::snake2d");
+ trace::exiting("accu::snake_2d");
return f.output;
}
-} // mln
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::accu
+
+} // end of namespace mln
+
+
+#endif // ! MLN_ACCU_SNAKE_2D_HH
Property changes on: mln/accu/snake_2d.hh
___________________________________________________________________
Added: svn:mergeinfo
Index: mln/accu/transform.hh
--- mln/accu/transform.hh (revision 0)
+++ mln/accu/transform.hh (revision 0)
@@ -0,0 +1,175 @@
+// 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_ACCU_TRANSFORM_HH
+# define MLN_ACCU_TRANSFORM_HH
+
+/// \file mln/accu/transform.hh
+///
+/// Transform an image by applying locally an accumulator on its
+/// values.
+///
+/// \todo Specialize for fastest images.
+
+# include <mln/core/concept/meta_accumulator.hh>
+# include <mln/core/concept/image.hh>
+# include <mln/core/concept/window.hh>
+# include <mln/extension/adjust.hh>
+
+
+namespace mln
+{
+
+ namespace accu
+ {
+
+ template <typename I, typename A, typename W>
+ mln_ch_value(I, mln_result(A))
+ transform(const Image<I>& input,
+ const Accumulator<A>& a,
+ const Window<W>& win);
+
+ template <typename I, typename A, typename W>
+ mln_ch_value(I, mln_accu_with(A, mln_value(I))::result)
+ transform(const Image<I>& input,
+ const Meta_Accumulator<A>& a,
+ const Window<W>& win);
+
+
+
+# ifndef MLN_INCLUDE_ONLY
+
+
+ namespace impl
+ {
+
+ namespace generic
+ {
+
+ template <typename I, typename A, typename W>
+ mln_ch_value(I, mln_result(A))
+ transform(const Image<I>& input_,
+ const Accumulator<A>& a_,
+ const Window<W>& win_)
+ {
+ trace::entering("accu::impl::generic::transform");
+
+ const I& input = exact(input_);
+ A a = exact(a_);
+ const W& win = exact(win_);
+
+ mln_precondition(input.has_data());
+ // mln_precondition(win.is_valid());
+
+ extension::adjust(input, win);
+
+ mln_ch_value(I, mln_result(A)) output;
+ initialize(output, input);
+
+ mln_piter(I) p(input.domain());
+ mln_qiter(W) q(win, p);
+ for_all(p)
+ {
+ a.init();
+ for_all(q)
+ a.take(input(q));
+ output(p) = a.to_result();
+ }
+
+ trace::exiting("accu::impl::generic::transform");
+ return output;
+ }
+
+ } // end of namespace mln::accu::impl::generic
+
+ } // end of namespace mln::accu::impl
+
+
+ namespace internal
+ {
+
+ template <typename I, typename A, typename W>
+ inline
+ mln_ch_value(I, mln_result(A))
+ transform_dispatch(const Image<I>& input,
+ const Accumulator<A>& a,
+ const Window<W>& win)
+ {
+ return impl::generic::transform(input, a, win);
+ }
+
+ } // end of namespace mln::accu::internal
+
+
+
+ template <typename I, typename A, typename W>
+ inline
+ mln_ch_value(I, mln_result(A))
+ transform(const Image<I>& input,
+ const Accumulator<A>& a,
+ const Window<W>& win)
+ {
+ trace::entering("accu::transform");
+
+ mln_precondition(exact(input).has_data());
+ // mln_precondition(exact(win).is_valid());
+
+ mln_ch_value(I, mln_result(A)) output;
+ output = internal::transform_dispatch(input, a, win);
+
+ trace::exiting("accu::transform");
+ return output;
+ }
+
+ template <typename I, typename A, typename W>
+ mln_ch_value(I, mln_accu_with(A, mln_value(I))::result)
+ transform(const Image<I>& input,
+ const Meta_Accumulator<A>&,
+ const Window<W>& win)
+ {
+ trace::entering("accu::transform");
+
+ mln_precondition(exact(input).has_data());
+ // mln_precondition(exact(win).is_valid());
+
+ typedef mln_accu_with(A, mln_value(I)) A_;
+ A_ a;
+ mln_ch_value(I, mln_result(A_)) output;
+ output = internal::transform_dispatch(input, a, win);
+
+ trace::exiting("accu::transform");
+ return output;
+ }
+
+# endif // ! MLN_INCLUDE_ONLY
+
+ } // end of namespace mln::accu
+
+} // end of namespace mln
+
+
+#endif // ! MLN_ACCU_TRANSFORM_HH
Index: mln/accu/min.hh
--- mln/accu/min.hh (revision 2833)
+++ mln/accu/min.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,9 @@
#ifndef MLN_ACCU_MIN_HH
# define MLN_ACCU_MIN_HH
-/*! \file mln/accu/min.hh
- *
- * \brief Define an accumulator that computes a min.
- */
+/// \file mln/accu/min.hh
+///
+/// Define an accumulator that computes a min.
# include <mln/accu/internal/base.hh>
# include <mln/core/concept/meta_accumulator.hh>
Index: mln/accu/count.hh
--- mln/accu/count.hh (revision 2833)
+++ mln/accu/count.hh (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
@@ -29,11 +30,13 @@
# define MLN_ACCU_COUNT_HH
/// \file mln/accu/count.hh
+///
/// \brief Define an accumulator that counts.
# include <mln/accu/internal/base.hh>
# include <mln/core/concept/meta_accumulator.hh>
+
namespace mln
{
@@ -55,6 +58,9 @@
void take(const argument&);
void take(const count<T>& other);
+ void untake(const argument&);
+ void untake(const count<T>& other);
+
/// Force the value of the counter to \a c.
void set_value(unsigned c);
/// \}
@@ -71,6 +77,7 @@
unsigned count_;
};
+
namespace meta
{
@@ -87,6 +94,7 @@
} // end of namespace mln::accu::meta
+
# ifndef MLN_INCLUDE_ONLY
template <typename T>
@@ -115,6 +123,15 @@
template <typename T>
inline
void
+ count<T>::untake(const argument&)
+ {
+ mln_precondition(count_ > 0);
+ --count_;
+ }
+
+ template <typename T>
+ inline
+ void
count<T>::take(const count<T>& other)
{
count_ += other.count_;
@@ -122,6 +139,15 @@
template <typename T>
inline
+ void
+ count<T>::untake(const count<T>& other)
+ {
+ mln_precondition(other.count_ <= count_);
+ count_ -= other.count_;
+ }
+
+ template <typename T>
+ inline
unsigned
count<T>::to_result() const
{
Index: mln/accu/compute.hh
--- mln/accu/compute.hh (revision 2833)
+++ mln/accu/compute.hh (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
@@ -28,15 +29,15 @@
#ifndef MLN_ACCU_COMPUTE_HH
# define MLN_ACCU_COMPUTE_HH
-/*! \file mln/accu/compute.hh
- *
- * \brief Define an accumulator that computes image pixels.
- */
+/// \file mln/accu/compute.hh
+///
+/// Compute an accumulator on image pixels, i.e., couples (site,
+/// value).
+///
+/// \todo Specialize for fastest images.
# include <mln/core/concept/meta_accumulator.hh>
-# include <mln/core/concept/accumulator.hh>
# include <mln/core/concept/image.hh>
-# include <mln/metal/is_a.hh>
# include <mln/util/pix.hh>
@@ -58,7 +59,7 @@
*/
template <typename A, typename I>
mln_result(A)
- compute(const Image<I>& input);
+ compute(const Accumulator<A>& a, const Image<I>& input);
/*! \brief Make an accumulator compute the pixels of the image \p input.
@@ -73,34 +74,86 @@
*/
template <typename A, typename I>
mln_accu_with(A, util::pix<I>)::result
- compute(const Image<I>& input);
+ compute(const Meta_Accumulator<A>& a, const Image<I>& input);
# ifndef MLN_INCLUDE_ONLY
+
+ namespace impl
+ {
+
+ namespace generic
+ {
+
template <typename A, typename I>
- inline
mln_result(A)
- compute(const Image<I>& input_)
+ compute(const Accumulator<A>&, const Image<I>& input_)
{
- mlc_is_a(A, Accumulator)::check();
+ trace::entering("accu::impl::generic::compute");
+
const I& input = exact(input_);
+ mln_precondition(input.has_data());
+
A a;
mln_piter(I) p(input.domain());
for_all(p)
a.take(make::pix(input, p));
+
+ trace::exiting("accu::impl::generic::compute");
return a.to_result();
}
+ } // end of namespace mln::accu::impl::generic
+
+ } // end of namespace mln::accu::impl
+
+
+ namespace internal
+ {
+
+ template <typename A, typename I>
+ inline
+ mln_result(A)
+ compute_dispatch(const Accumulator<A>& a, const Image<I>&
input)
+ {
+ return impl::generic::compute(a, input);
+ }
+
+ } // end of namespace mln::accu::internal
+
+
+
+ template <typename A, typename I>
+ inline
+ mln_result(A)
+ compute(const Accumulator<A>& a, const Image<I>& input)
+ {
+ trace::entering("accu::compute");
+
+ mln_precondition(exact(input).has_data());
+ mln_result(A) output = internal::compute_dispatch(a, input);
+
+ trace::exiting("accu::compute");
+ return output;
+ }
+
template <typename A, typename I>
inline
mln_accu_with(A, util::pix<I>)::result
- compute(const Image<I>& input)
+ compute(const Meta_Accumulator<A>&, const Image<I>& input)
{
- mlc_is_a(A, Meta_Accumulator)::check();
+ trace::entering("accu::compute");
+
+ mln_precondition(exact(input).has_data());
+
typedef mln_accu_with(A, util::pix<I>) A_;
- return compute<A_>(input);
+ A_ a;
+ mln_result(A_) output = internal::compute_dispatch(a, input);
+
+ trace::exiting("accu::compute");
+ return output;
}
# endif // ! MLN_INCLUDE_ONLY
Index: mln/transform/influence_zone_geodesic.hh
--- mln/transform/influence_zone_geodesic.hh (revision 2833)
+++ mln/transform/influence_zone_geodesic.hh (working copy)
@@ -50,7 +50,6 @@
# ifndef MLN_INCLUDE_ONLY
-
namespace internal
{
@@ -107,4 +106,4 @@
} // end of namespace mln
-#endif // ! MLN_TRANSFORM_DISTANCE_HH
+#endif // ! MLN_TRANSFORM_INFLUENCE_ZONE_GEODESIC_HH
Index: mln/transform/distance.hh
--- mln/transform/distance.hh (revision 2833)
+++ mln/transform/distance.hh (working copy)
@@ -28,10 +28,11 @@
#ifndef MLN_TRANSFORM_DISTANCE_HH
# define MLN_TRANSFORM_DISTANCE_HH
-/*! \file mln/transform/distance.hh
- *
- * \brief Discrete distance transform.
- */
+/// \file mln/transform/distance.hh
+///
+/// Discrete distance transform.
+///
+/// \todo Make a canvas out of it.
# include <vector>
# include <mln/core/concept/image.hh>
Index: mln/transform/distance_geodesic.hh
--- mln/transform/distance_geodesic.hh (revision 2833)
+++ mln/transform/distance_geodesic.hh (working copy)
@@ -104,4 +104,4 @@
} // end of namespace mln
-#endif // ! MLN_TRANSFORM_DISTANCE_HH
+#endif // ! MLN_TRANSFORM_DISTANCE_GEODESIC_HH
Index: mln/morpho/erosion.hh
--- mln/morpho/erosion.hh (revision 2833)
+++ mln/morpho/erosion.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
@@ -29,6 +30,7 @@
# define MLN_MORPHO_EROSION_HH
/// \file mln/morpho/erosion.hh
+///
/// \brief Morphological erosion.
# include <mln/morpho/includes.hh>
@@ -63,11 +65,13 @@
{
const I& input = exact(input_);
const W& win = exact(win_);
+
+ mln_precondition(input.has_data());
+ mln_precondition(! win.is_empty());
+ // mln_precondition(win.is_valid());
+
(void) input;
(void) win;
-
- mln_precondition(exact(input).has_data());
- mln_precondition(! exact(win).is_empty());
}
} // end of mln::morpho::internal