3858: New domain morpher, though a function from site to site.

https://svn.lrde.epita.fr/svn/oln/trunk/milena Index: ChangeLog from Thierry Geraud <thierry.geraud@lrde.epita.fr> New domain morpher, though a function from site to site. * mln/core/site_set/p_transformed.hh: New. * mln/core/site_set/p_transformed_piter.hh: New. * mln/core/site_set/all.hh: Update. * mln/core/image/all.hh: Update. * mln/core/image/dmorph: New directory. * mln/core/image/dmorph/transformed_image.hh: New. * mln/core/image/dmorph/all.hh: New. * tests/core/site_set/p_transformed.cc: New. * tests/core/site_set/pset_if.cc: Rename as... * tests/core/site_set/p_if.cc: ...this. * tests/core/site_set/Makefile.am: Update. * tests/core/image/dmorph: New directory. * tests/core/image/dmorph/Makefile.am: New. * tests/core/image/dmorph/transformed_image.cc: New. * tests/core/image/Makefile.am: Update. Misc. * mln/core/image/image_if.hh: Layout. * mln/core/image/sub_image.hh: Layout. * mln/core/internal/image_base.hh: Layout. * mln/core/internal/image_morpher.hh: Layout. * mln/core/internal/image_domain_morpher.hh: Upgrade doc style. * tests/core/image/p2p_image.cc: Move echo. mln/core/image/all.hh | 7 mln/core/image/dmorph/all.hh | 39 +++ mln/core/image/dmorph/transformed_image.hh | 272 +++++++++++++++++++++++++++ mln/core/image/image_if.hh | 6 mln/core/image/sub_image.hh | 2 mln/core/internal/image_base.hh | 5 mln/core/internal/image_domain_morpher.hh | 10 mln/core/internal/image_morpher.hh | 2 mln/core/site_set/all.hh | 4 mln/core/site_set/p_transformed.hh | 218 +++++++++++++++++++++ mln/core/site_set/p_transformed_piter.hh | 159 +++++++++++++++ tests/core/image/Makefile.am | 3 tests/core/image/dmorph/Makefile.am | 10 tests/core/image/dmorph/transformed_image.cc | 58 +++++ tests/core/image/p2p_image.cc | 7 tests/core/site_set/Makefile.am | 6 tests/core/site_set/p_if.cc | 6 tests/core/site_set/p_transformed.cc | 58 +++++ 18 files changed, 853 insertions(+), 19 deletions(-) Index: mln/core/site_set/all.hh --- mln/core/site_set/all.hh (revision 3857) +++ mln/core/site_set/all.hh (working copy) @@ -1,4 +1,5 @@ -// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE) +// Copyright (C) 2008, 2009 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 @@ -51,6 +52,7 @@ # include <mln/core/site_set/p_run.hh> # include <mln/core/site_set/p_set.hh> # include <mln/core/site_set/p_set_of.hh> +# include <mln/core/site_set/p_transformed.hh> # include <mln/core/site_set/p_vaccess.hh> # include <mln/core/site_set/p_vertices.hh> Index: mln/core/site_set/p_transformed.hh --- mln/core/site_set/p_transformed.hh (revision 0) +++ mln/core/site_set/p_transformed.hh (revision 0) @@ -0,0 +1,218 @@ +// Copyright (C) 2009 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_SITE_SET_P_TRANSFORMED_HH +# define MLN_CORE_SITE_SET_P_TRANSFORMED_HH + +/// \file mln/core/site_set/p_transformed.hh +/// +/// Definition of a site set defined by the transformation of another +/// site set. + +# include <mln/core/internal/site_set_base.hh> +# include <mln/core/concept/function.hh> + + +namespace mln +{ + + // Forward declarations. + template <typename S, typename F> struct p_transformed; + template <typename Pi, typename S, typename F> struct p_transformed_piter; + + + namespace trait + { + + template <typename S, typename F> + struct site_set_< p_transformed<S,F> > + { + typedef trait::site_set::nsites::unknown nsites; + typedef trait::site_set::bbox::unknown bbox; + typedef trait::site_set::contents::fixed contents; + typedef trait::site_set::arity::multiple arity; + }; + + } // end of namespace trait + + + /// Transform a site set \p s through the function \p f. + /// + /// \param[in] s A site set. + /// \param[in] f A function from site to site. + /// \return The transformed site set. + template <typename S, typename F> + p_transformed<S, F> + transform(const Site_Set<S>& s, const Function_v2v<F>& f); + + + + /// \brief Site set transformed through a function. + /// + /// \ingroup modsitesetsparse + /// + /// Parameter \c S is a site set type; parameter F is a function + /// from site to site. + template <typename S, typename F> + class p_transformed + : public internal::site_set_base_< mln_psite(S), p_transformed<S,F> >, + private metal::equal< mln_result(F), mln_psite(S) >::check_t + { + typedef p_transformed<S,F> self_; + typedef internal::site_set_base_<mln_result(F), self_> super_; + public: + + /// Element associated type. + typedef mln_element(S) element; + + + /// Psite associated type. + typedef mln_psite(S) psite; + + /// Forward Site_Iterator associated type. + typedef p_transformed_piter<mln_fwd_piter(S), S, F> fwd_piter; + + /// Backward Site_Iterator associated type. + typedef p_transformed_piter<mln_bkd_piter(S), S, F> bkd_piter; + + /// Site_Iterator associated type. + typedef fwd_piter piter; + + + /// Constructor with a site set \p s and a predicate \p f. + p_transformed(const S& s, const F& f); + + /// Constructor without argument. + p_transformed(); + + + /// Test if this site set is valid. + bool is_valid() const; + + + /// Test if \p p belongs to the subset. + bool has(const psite& p) const; + + + /// Return the size of this site set in memory. + std::size_t memory_size() const; + + /// Return the primary set. + const S& primary_set() const; + + /// Return the transformation function. + const F& function() const; + + protected: + + S s_; + F f_; + }; + + + +# ifndef MLN_INCLUDE_ONLY + + + template <typename S, typename F> + inline + p_transformed<S, F> + transform(const Site_Set<S>& s, const Function_v2v<F>& f) + { + mlc_equal(mln_result(F), mln_psite(S))::check(); + p_transformed<S, F> tmp(exact(s), exact(f)); + return tmp; + } + + + // p_transformed<S,F> + + template <typename S, typename F> + inline + p_transformed<S,F>::p_transformed() + { + } + + template <typename S, typename F> + inline + p_transformed<S,F>::p_transformed(const S& s, const F& f) + : s_(s), + f_(f) + { + } + + template <typename S, typename F> + inline + bool + p_transformed<S,F>::has(const psite& p) const + { + return s_.has(f_(p)); + } + + template <typename S, typename F> + inline + bool + p_transformed<S,F>::is_valid() const + { + return s_.is_valid(); + } + + template <typename S, typename F> + inline + std::size_t + p_transformed<S,F>::memory_size() const + { + return s_.memory_size() + sizeof(f_); + } + + template <typename S, typename F> + inline + const S& + p_transformed<S,F>::primary_set() const + { + return s_; + } + + template <typename S, typename F> + inline + const F& + p_transformed<S,F>::function() const + { + return f_; + } + +# endif // ! MLN_INCLUDE_ONLY + +} // end of namespace mln + + + +# include <mln/core/site_set/p_transformed_piter.hh> + + + +#endif // ! MLN_CORE_SITE_SET_P_TRANSFORMED_HH Index: mln/core/site_set/p_transformed_piter.hh --- mln/core/site_set/p_transformed_piter.hh (revision 0) +++ mln/core/site_set/p_transformed_piter.hh (revision 0) @@ -0,0 +1,159 @@ +// Copyright (C) 2009 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_SITE_SET_P_TRANSFORMED_PITER_HH +# define MLN_CORE_SITE_SET_P_TRANSFORMED_PITER_HH + +/// \file mln/core/site_set/p_transformed_piter.hh +/// +/// Definition of iterators on p_transformed<S,F>. + +# include <mln/core/internal/site_set_iterator_base.hh> +# include <mln/core/site_set/p_transformed.hh> + + +namespace mln +{ + + + /// Iterator on p_transformed<S,F>. + /// + /// Parameter \c S is a site set type; parameter F is a function + /// from point to Boolean. + /// + /// \see mln::p_transformed + // + template <typename Pi, typename S, typename F> + struct p_transformed_piter + : public internal::site_set_iterator_base< p_transformed<S,F>, // Site_Set. + p_transformed_piter<Pi,S,F> > // Exact. + { + /// Constructor without argument. + p_transformed_piter(); + + /// Constructor from a site set. + p_transformed_piter(const p_transformed<S,F>& s); + + /// Test the iterator validity. + bool is_valid_() const; + + /// Invalidate the iterator. + void invalidate_(); + + /// Start an iteration. + void start_(); + + /// Go to the next point. + void next_(); + + /// Change the set site targeted by this iterator. + void change_target(const p_transformed<S,F>& s); + + private: + typedef p_transformed_piter<Pi,S,F> self_; + typedef internal::site_set_iterator_base<p_transformed<S,F>, self_> super_; + + protected: + using super_::s_; + using super_::p_; + + // The underlying site iterator. + Pi pi_; + }; + + + +# ifndef MLN_INCLUDE_ONLY + + template <typename Pi, typename S, typename F> + inline + p_transformed_piter<Pi,S,F>::p_transformed_piter() + { + } + + template <typename Pi, typename S, typename F> + inline + p_transformed_piter<Pi,S,F>::p_transformed_piter(const p_transformed<S,F>& s) + { + this->change_target(s); + } + + template <typename Pi, typename S, typename F> + inline + bool + p_transformed_piter<Pi,S,F>::is_valid_() const + { + return pi_.is_valid(); + } + + template <typename Pi, typename S, typename F> + inline + void + p_transformed_piter<Pi,S,F>::invalidate_() + { + pi_.invalidate(); + } + + template <typename Pi, typename S, typename F> + inline + void + p_transformed_piter<Pi,S,F>::start_() + { + pi_.start(); + if (pi_.is_valid()) + p_ = s_->function()(pi_); + } + + template <typename Pi, typename S, typename F> + inline + void + p_transformed_piter<Pi,S,F>::next_() + { + pi_.next(); + if (pi_.is_valid()) + p_ = s_->function()(pi_); + } + + template <typename Pi, typename S, typename F> + inline + void + p_transformed_piter<Pi,S,F>::change_target(const p_transformed<S,F>& s) + { + s_ = & s; + // p might be also updated since it can hold a pointer towards + // the set it designates, so: + pi_.change_target(s.primary_set()); + // Last: + this->invalidate(); + } + +# endif // ! MLN_INCLUDE_ONLY + +} // end of namespace mln + + +#endif // ! MLN_CORE_SITE_SET_P_TRANSFORMED_PITER_HH Index: mln/core/image/image_if.hh --- mln/core/image/image_if.hh (revision 3857) +++ mln/core/image/image_if.hh (working copy) @@ -92,6 +92,7 @@ /// \brief Image which domain is restricted by a function. /// /// \ingroup modimagedomainmorpher + // template <typename I, typename F> struct image_if : public internal::image_domain_morpher< I, p_if<mln_domain(I), F>, @@ -115,18 +116,23 @@ operator image_if<const I, F>() const; }; + + // Operators. + // Image | Function_p2b. /// 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); Index: mln/core/image/all.hh --- mln/core/image/all.hh (revision 3857) +++ mln/core/image/all.hh (working copy) @@ -34,6 +34,13 @@ /// File that includes all image types. +// Sub-directories. + +# include <mln/core/image/dmorph/all.hh> + + +// Files. + # include <mln/core/image/cast_image.hh> # include <mln/core/image/ch_piter.hh> # include <mln/core/image/complex_image.hh> Index: mln/core/image/sub_image.hh --- mln/core/image/sub_image.hh (revision 3857) +++ mln/core/image/sub_image.hh (working copy) @@ -29,7 +29,6 @@ #ifndef MLN_CORE_IMAGE_SUB_IMAGE_HH # define MLN_CORE_IMAGE_SUB_IMAGE_HH - /// \file mln/core/image/sub_image.hh /// /// Definition of morpher that makes an image become restricted @@ -38,7 +37,6 @@ /// \todo Add a special case for "ima | box"; think about some other /// special cases... - # include <mln/core/internal/image_domain_morpher.hh> Index: mln/core/image/dmorph/transformed_image.hh --- mln/core/image/dmorph/transformed_image.hh (revision 0) +++ mln/core/image/dmorph/transformed_image.hh (revision 0) @@ -0,0 +1,272 @@ +// Copyright (C) 2009 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_IMAGE_DMORPH_TRANSFORMED_IMAGE_HH +# define MLN_CORE_IMAGE_DMORPH_TRANSFORMED_IMAGE_HH + +/// \file mln/core/image/dmorph/transformed_image.hh +/// +/// Definition of an image morpher that has a site set transformed +/// through a function. +/// +/// \todo It is a rough code. + +# include <mln/core/internal/image_domain_morpher.hh> +# include <mln/core/site_set/p_transformed.hh> + + +namespace mln +{ + + + // Forward declaration. + template <typename I, typename F> class transformed_image; + + + namespace internal + { + + /// Data structure for \c mln::transformed_image<I,F>. + template <typename I, typename F> + struct data< transformed_image<I,F> > + { + data(I& ima, const F& f); + + I ima_; + F f_; + p_transformed< mln_domain(I), F> domain_; + }; + + } // end of namespace mln::internal + + + + namespace trait + { + + template <typename I, typename F> + struct image_< transformed_image<I,F> > : default_image_morpher< I, + mln_value(I), + transformed_image<I,F> > + { + typedef trait::image::category::domain_morpher category; + + typedef trait::image::ext_domain::none ext_domain; // No extension of domain. + typedef trait::image::ext_value::irrelevant ext_value; + typedef trait::image::ext_io::irrelevant ext_io; + + typedef trait::image::vw_io::none vw_io; + typedef trait::image::vw_set::none vw_set; + typedef trait::image::value_alignment::not_aligned value_alignment; + typedef trait::image::value_storage::disrupted value_storage; + }; + + } // end of namespace mln::trait + + + + /// \brief Image having its domain restricted by a site set. + /// + /// \ingroup modimagedomainmorpher + // + template <typename I, typename F> + struct transformed_image : public internal::image_domain_morpher< I, + p_transformed< mln_domain(I), F>, + transformed_image<I,F> > + { + /// Skeleton. + typedef transformed_image< tag::image_<I>, tag::function_<F> > skeleton; + + /// Constructor without argument. + transformed_image(); + + /// Constructor. + transformed_image(I& ima, const F& f); + + /// Initialization. + void init_(I& ima, const F& f); + + + /// Give the definition domain. + const p_transformed< mln_domain(I), F>& domain() const; + + + /// Read-only access of pixel value at point site \p p. + mln_rvalue(I) operator()(const mln_psite(I)& p) const; + + /// Read and "write if possible" access of pixel value at point + /// site \p p. + mln_morpher_lvalue(I) operator()(const mln_psite(I)& p); + + + /// Const promotion via conversion. + operator transformed_image<const I, F>() const; + }; + + + + // Morpher creation. + + template <typename I, typename F> + transformed_image<const I, F> + transform_domain(const Image<I>& ima, const Function_v2v<F>& f); + + template <typename I, typename F> + transformed_image<I, F> + transform_domain(Image<I>& ima, const Function_v2v<F>& f); + + + + template <typename I, typename F, typename J> + void init_(tag::image_t, transformed_image<I,F>& target, const J& model); + + + +# ifndef MLN_INCLUDE_ONLY + + // init_ + + template <typename I, typename F, typename J> + inline + void init_(tag::image_t, transformed_image<I,F>& target, const J& model) + { + I ima; + init_(tag::image, ima, model); + F f; + init_(tag::function, f, model); + target.init_(ima, f); + } + + + // internal::data< transformed_image<I,F> > + + namespace internal + { + + template <typename I, typename F> + inline + data< transformed_image<I,F> >::data(I& ima, const F& f) + : ima_(ima), + f_(f), + domain_(ima.domain(), f) + { + } + + } // end of namespace mln::internal + + + // transformed_image<I,F> + + template <typename I, typename F> + inline + transformed_image<I,F>::transformed_image() + { + } + + template <typename I, typename F> + inline + transformed_image<I,F>::transformed_image(I& ima, const F& f) + { + init_(ima, f); + } + + template <typename I, typename F> + inline + void + transformed_image<I,F>::init_(I& ima, const F& f) + { + mln_precondition(! this->is_valid()); + this->data_ = new internal::data< transformed_image<I,F> >(ima, f); + } + + template <typename I, typename F> + inline + const p_transformed< mln_domain(I), F>& + transformed_image<I,F>::domain() const + { + return this->data_->domain_; + } + +template <typename I, typename F> +inline +mln_rvalue(I) +transformed_image<I,F>::operator()(const mln_psite(I)& p) const +{ + mln_precondition(this->delegatee_() != 0); + mln_precondition(exact(this)->has(p)); + mln_precondition(this->delegatee_()->has(p)); + return this->delegatee_()->operator()(this->data_->f_(p)); +} + +template <typename I, typename F> +inline +mln_morpher_lvalue(I) +transformed_image<I,F>::operator()(const mln_psite(I)& p) +{ + mln_precondition(this->delegatee_() != 0); + mln_precondition(exact(this)->has(p)); + mln_precondition(this->delegatee_()->has(p)); + return this->delegatee_()->operator()(this->data_->f_(p)); +} + + + template <typename I, typename F> + inline + transformed_image<I,F>::operator transformed_image<const I, F>() const + { + transformed_image<const I, F> tmp(this->data_->ima_, + this->data_->f_); + return tmp; + } + + + // Morpher creation. + + template <typename I, typename F> + inline + transformed_image<const I, F> + transform_domain(const Image<I>& ima, const Function_v2v<F>& f) + { + transformed_image<const I, F> tmp(exact(ima), exact(f)); + return tmp; + } + + template <typename I, typename F> + inline + transformed_image<I, F> + transform_domain(Image<I>& ima, const Function_v2v<F>& f) + { + transformed_image<I, F> tmp(exact(ima), exact(f)); + return tmp; + } + +# endif // ! MLN_INCLUDE_ONLY + +} // end of namespace mln + + +#endif // ! MLN_CORE_IMAGE_DMORPH_TRANSFORMED_IMAGE_HH Index: mln/core/image/dmorph/all.hh --- mln/core/image/dmorph/all.hh (revision 0) +++ mln/core/image/dmorph/all.hh (revision 0) @@ -0,0 +1,39 @@ +// Copyright (C) 2009 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_IMAGE_DMORPH_ALL_HH +# define MLN_CORE_IMAGE_DMORPH_ALL_HH + +/// \file mln/core/image/dmorph/all.hh +/// +/// File that includes all domain morpher image types. + + +# include <mln/core/image/dmorph/transformed_image.hh> + + +#endif // ! MLN_CORE_IMAGE_DMORPH_ALL_HH Index: mln/core/internal/image_base.hh --- mln/core/internal/image_base.hh (revision 3857) +++ mln/core/internal/image_base.hh (working copy) @@ -1,4 +1,5 @@ -// Copyright (C) 2007, 2008, 2009 EPITA Research and Development Laboratory +// Copyright (C) 2007, 2008, 2009 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 @@ -75,8 +76,10 @@ /// A base class for images. + /// /// Parameter \p T is the image value type. /// Parameter \p S is the image site set type. + // template <typename T, typename S, typename E> struct image_base : Index: mln/core/internal/image_morpher.hh --- mln/core/internal/image_morpher.hh (revision 3857) +++ mln/core/internal/image_morpher.hh (working copy) @@ -48,7 +48,9 @@ { /// A base class for images that are morphers. Parameter + /// /// \c I is the underlying-morphed image type. + // template <typename I, typename T, typename S, typename E> class image_morpher : public image_base<T, S, E> { Index: mln/core/internal/image_domain_morpher.hh --- mln/core/internal/image_domain_morpher.hh (revision 3857) +++ mln/core/internal/image_domain_morpher.hh (working copy) @@ -1,4 +1,5 @@ -// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory +// Copyright (C) 2007, 2008, 2009 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 @@ -28,10 +29,9 @@ #ifndef MLN_CORE_INTERNAL_IMAGE_DOMAIN_MORPHER_HH # define MLN_CORE_INTERNAL_IMAGE_DOMAIN_MORPHER_HH -/*! \file mln/core/internal/image_domain_morpher.hh - * - * \brief Definition of a base class for image morphers w.r.t. domain. - */ +/// \file mln/core/internal/image_domain_morpher.hh +/// +/// Definition of a base class for image morphers w.r.t. domain. # include <mln/core/internal/image_morpher.hh> Index: tests/core/site_set/p_transformed.cc --- tests/core/site_set/p_transformed.cc (revision 0) +++ tests/core/site_set/p_transformed.cc (revision 0) @@ -0,0 +1,58 @@ +// Copyright (C) 2009 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/core/site_set/p_transformed.cc +/// +/// Tests on mln::p_transformed. + +#include <mln/core/alias/box2d.hh> +#include <mln/core/site_set/p_transformed.hh> +#include <mln/geom/bbox.hh> + + + + +struct wrap : mln::Function_v2v< wrap > +{ + typedef mln::point2d result; + result operator()(const result& p) const + { + return result(p.row() + 5, p.col() + 1); + } +}; + + +int main() +{ + using namespace mln; + + box2d b(2, 2); + p_transformed<box2d,wrap> s(b, wrap()); + box2d b_ = geom::bbox(s); + + mln_assertion(b_.pmin() == point2d(5,1)); +} Index: tests/core/site_set/p_if.cc --- tests/core/site_set/p_if.cc (revision 3853) +++ tests/core/site_set/p_if.cc (working copy) @@ -1,5 +1,5 @@ -// Copyright (C) 2007, 2008 EPITA Research and Development Laboratory -// (LRDE) +// Copyright (C) 2007, 2008, 2009 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 +26,7 @@ // reasons why the executable file might be covered by the GNU General // Public License. -/// \file tests/core/site_set/pset_if.cc +/// \file tests/core/site_set/p_if.cc /// /// Tests on mln::p_if. Property changes on: tests/core/site_set/p_if.cc ___________________________________________________________________ Added: svn:mergeinfo Index: tests/core/site_set/Makefile.am --- tests/core/site_set/Makefile.am (revision 3857) +++ tests/core/site_set/Makefile.am (working copy) @@ -13,7 +13,8 @@ p_queue \ p_queue_fast \ p_set \ - pset_if \ + p_if \ + p_transformed \ p_vaccess \ p_vertices @@ -26,7 +27,8 @@ p_queue_SOURCES = p_queue.cc p_queue_fast_SOURCES = p_queue_fast.cc p_set_SOURCES = p_set.cc -pset_if_SOURCES = pset_if.cc +p_if_SOURCES = p_if.cc +p_transformed_SOURCES = p_transformed.cc p_vaccess_SOURCES = p_vaccess.cc p_vertices_SOURCES = p_vertices.cc p_edges_SOURCES = p_edges.cc Index: tests/core/image/p2p_image.cc --- tests/core/image/p2p_image.cc (revision 3857) +++ tests/core/image/p2p_image.cc (working copy) @@ -1,4 +1,5 @@ -// Copyright (C) 2008 EPITA Research and Development Laboratory (LRDE) +// Copyright (C) 2008, 2009 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 @@ -33,8 +34,6 @@ #include <mln/core/image/p2p_image.hh> #include <mln/fun/p2p/translation.hh> -#include <mln/debug/iota.hh> - # define ima_ apply_p2p(ima, fun::p2p::translation(dp)) @@ -48,8 +47,6 @@ box2d b = make::box2d(0,0, 2,2); image2d<int> ima(b, 0); // No border. - debug::iota(ima); - dpoint2d dp(-1,+1); box2d b_ = make::box2d(-1,+1, 1,3); Index: tests/core/image/dmorph/Makefile.am --- tests/core/image/dmorph/Makefile.am (revision 0) +++ tests/core/image/dmorph/Makefile.am (revision 0) @@ -0,0 +1,10 @@ +## Process this file through Automake to create Makefile.in. + +include $(top_srcdir)/milena/tests/tests.mk + +check_PROGRAMS = \ + transformed_image + +transformed_image_SOURCES = transformed_image.cc + +TESTS = $(check_PROGRAMS) Index: tests/core/image/dmorph/transformed_image.cc --- tests/core/image/dmorph/transformed_image.cc (revision 0) +++ tests/core/image/dmorph/transformed_image.cc (revision 0) @@ -0,0 +1,58 @@ +// Copyright (C) 2009 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/core/image/dmorph/transformed_image.cc +/// +/// Tests on mln::transformed_image. + +#include <mln/core/var.hh> +#include <mln/core/image/image2d.hh> +#include <mln/fun/p2p/translation.hh> +#include <mln/debug/iota.hh> +#include <mln/geom/bbox.hh> + +#include <mln/core/image/dmorph/transformed_image.hh> + + + +int main() +{ + using namespace mln; + + box2d b(2, 3); + image2d<int> ima(b); + debug::iota(ima); + + dpoint2d dp(-1,+1); + mln_VAR( ima_, transform_domain( ima, + fun::p2p::translation_t<point2d>(dp) ) ); + + box2d b_ = geom::bbox(ima_.domain()); + + mln_assertion( b_.pmin() == b.pmin() + dp && + b_.pmax() == b.pmax() + dp ); +} Index: tests/core/image/Makefile.am --- tests/core/image/Makefile.am (revision 3857) +++ tests/core/image/Makefile.am (working copy) @@ -2,6 +2,9 @@ include $(top_srcdir)/milena/tests/tests.mk +SUBDIRS = \ + dmorph + ##FIXME: re-enable tests check_PROGRAMS = \ cast_image \
participants (1)
-
Thierry Geraud