https://svn.lrde.epita.fr/svn/oln/trunk/olena
Index: ChangeLog
from Thierry Geraud <thierry.geraud(a)lrde.epita.fr>
Move the responsibility of iteration on window points from
images to windows.
* ChangeLog: Add missing former entry.
* core/concept/image.hh (value): Add missing code.
(qiter, fwd_qiter, bkd_qiter): Move to...
* core/concept/window.hh: ...here.
(point): New virtual type.
* core/concept/neighborhood.hh (point): Likewise.
* core/2d/aliases.hh,
* core/2d/neighb2d.hh,
* core/2d/dpoint2d.hh,
* core/2d/window2d.hh,
* core/2d/box2d.hh: Update.
* core/gen/dpoints_piter.hh (include): Remove useless ones.
* oln/core/internal/neighborhood_base.hh: New.
* core/gen/neighb.hh: Update inheritance.
* oln/core/internal/window_base.hh: New.
* core/gen/window.hh: Update inheritance.
(vtypes): Update.
* core/internal/point_set_std_based.hh: Fix missing return.
* core/internal/image_base.hh: Update.
* core/internal/point2d.hh: Fix wrong visibility.
2d/aliases.hh | 35 ++++++++------
2d/box2d.hh | 3 -
2d/dpoint2d.hh | 4 +
2d/neighb2d.hh | 3 -
2d/point2d.hh | 4 +
2d/window2d.hh | 5 +-
concept/image.hh | 4 -
concept/neighborhood.hh | 1
concept/window.hh | 6 ++
gen/dpoints_piter.hh | 6 --
gen/neighb.hh | 8 +--
gen/single_value_image.hh | 2
gen/window.hh | 11 ++--
internal/image_base.hh | 4 -
internal/neighborhood_base.hh | 92 ++++++++++++++++++++++++++++++++++++++
internal/point2d.hh | 2
internal/point_set_std_based.hh | 1
internal/window_base.hh | 96 ++++++++++++++++++++++++++++++++++++++++
18 files changed, 249 insertions(+), 38 deletions(-)
Index: oln/core/concept/image.hh
--- oln/core/concept/image.hh (revision 857)
+++ oln/core/concept/image.hh (working copy)
@@ -195,9 +195,6 @@
{
stc_using_from(Image, point);
- stc_typename(qiter);
- stc_typename(fwd_qiter);
- stc_typename(bkd_qiter);
bool has(const point& p) const;
protected:
@@ -454,6 +451,7 @@
typename Value_Wise_Mutable_Image<Exact>::lvaluep
Value_Wise_Mutable_Image<Exact>::value(const typename
Value_Wise_Accessible_Image<Exact>::vsite& v)
{
+ return exact(this)->impl_value_read_write(v);
}
template <typename Exact>
Index: oln/core/concept/window.hh
--- oln/core/concept/window.hh (revision 857)
+++ oln/core/concept/window.hh (working copy)
@@ -29,6 +29,7 @@
# define OLN_CORE_CONCEPT_WINDOW_HH
# include <oln/core/equipment.hh>
+# include <oln/core/concept/point.hh>
namespace oln
@@ -40,6 +41,11 @@
struct Window : public Any<Exact>
{
stc_typename(grid);
+ stc_typename(point);
+
+ stc_typename(qiter);
+ stc_typename(fwd_qiter);
+ stc_typename(bkd_qiter);
protected:
Window();
Index: oln/core/concept/neighborhood.hh
--- oln/core/concept/neighborhood.hh (revision 857)
+++ oln/core/concept/neighborhood.hh (working copy)
@@ -40,6 +40,7 @@
struct Neighborhood : public Any<Exact>
{
stc_typename(grid);
+ stc_typename(point);
protected:
Neighborhood();
Index: oln/core/2d/aliases.hh
--- oln/core/2d/aliases.hh (revision 857)
+++ oln/core/2d/aliases.hh (working copy)
@@ -1,4 +1,4 @@
-// Copyright (C) 2001, 2003, 2004, 2005, 2006 EPITA Research and
+// Copyright (C) 2001, 2003, 2004, 2005, 2006, 2007 EPITA Research and
// Development Laboratory
//
// This file is part of the Olena Library. This library is free
@@ -35,29 +35,36 @@
/// Forward declarations.
/// \{
+
+ template <typename P> class box_;
+ template <typename P> class box_fwd_piter_;
+ template <typename P> class box_bkd_piter_;
+
template <typename D> class neighb_;
template <typename D> class window_;
- template <typename P> class topo_lbbox_;
- template <typename P> class fwd_piter_bbox_;
- template <typename P> class bkd_piter_bbox_;
- template <typename P> class fwd_qiter_win_;
- template <typename P> class bkd_qiter_win_;
+ template <typename P> class dpoints_fwd_piter_;
+ template <typename P> class dpoints_bkd_piter_;
+
/// \}
/// Aliases.
/// \{
- typedef neighb_<dpoint2d> neighb2d;
- typedef window_<dpoint2d> window2d;
-
- typedef topo_lbbox_<point2d> topo2d;
+ typedef box_<point2d> box2d;
+ typedef box_fwd_piter_<point2d> piter2d;
+ typedef box_fwd_piter_<point2d> fwd_piter2d;
+ typedef box_bkd_piter_<point2d> bkd_piter2d;
- typedef fwd_piter_bbox_<point2d> fwd_piter2d;
- typedef bkd_piter_bbox_<point2d> bkd_piter2d;
+ typedef neighb_<dpoint2d> neighb2d;
+ typedef dpoints_fwd_piter_<point2d> niter2d;
+ typedef dpoints_fwd_piter_<point2d> fwd_niter2d;
+ typedef dpoints_bkd_piter_<point2d> bkd_niter2d;
- typedef fwd_qiter_win_<point2d> fwd_qiter2d;
- typedef bkd_qiter_win_<point2d> bkd_qiter2d;
+ typedef window_<dpoint2d> window2d;
+ typedef dpoints_fwd_piter_<point2d> qiter2d;
+ typedef dpoints_fwd_piter_<point2d> fwd_qiter2d;
+ typedef dpoints_bkd_piter_<point2d> bkd_qiter2d;
/// \}
Index: oln/core/2d/neighb2d.hh
--- oln/core/2d/neighb2d.hh (revision 857)
+++ oln/core/2d/neighb2d.hh (working copy)
@@ -31,12 +31,13 @@
# include <oln/core/gen/neighb.hh>
# include <oln/core/2d/dpoint2d.hh>
+# include <oln/core/2d/aliases.hh>
namespace oln
{
- typedef neighb_<dpoint2d> neighb2d;
+ // FIXME: neighb2d should be an actual type, not an alias...
namespace internal
Index: oln/core/2d/dpoint2d.hh
--- oln/core/2d/dpoint2d.hh (revision 857)
+++ oln/core/2d/dpoint2d.hh (working copy)
@@ -88,4 +88,8 @@
} // end of namespace oln
+// dpoint2d goes with point2d so:
+# include <oln/core/2d/point2d.hh>
+
+
#endif // ! OLN_CORE_2D_DPOINT2D_HH
Index: oln/core/2d/window2d.hh
--- oln/core/2d/window2d.hh (revision 857)
+++ oln/core/2d/window2d.hh (working copy)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006 EPITA Research and Development Laboratory
+// Copyright (C) 2006, 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
@@ -30,12 +30,13 @@
# include <oln/core/gen/window.hh>
# include <oln/core/2d/dpoint2d.hh>
+# include <oln/core/2d/aliases.hh>
namespace oln
{
- typedef window_<dpoint2d> window2d;
+ // FIXME: window2d should be an actual type, not an alias...
window2d mk_square(unsigned odd_len);
Index: oln/core/2d/box2d.hh
--- oln/core/2d/box2d.hh (revision 857)
+++ oln/core/2d/box2d.hh (working copy)
@@ -30,12 +30,13 @@
# include <oln/core/gen/box.hh>
# include <oln/core/2d/point2d.hh>
+# include <oln/core/2d/aliases.hh>
namespace oln
{
- typedef box_<point2d> box2d;
+ // FIXME: box2d should be an actual type, not an alias...
} // end of namespace oln
Index: oln/core/2d/point2d.hh
--- oln/core/2d/point2d.hh (revision 857)
+++ oln/core/2d/point2d.hh (working copy)
@@ -88,4 +88,8 @@
} // end of namespace oln
+// point2d goes with dpoint2d so:
+# include <oln/core/2d/dpoint2d.hh>
+
+
#endif // ! OLN_CORE_2D_POINT2D_HH
Index: oln/core/gen/dpoints_piter.hh
--- oln/core/gen/dpoints_piter.hh (revision 857)
+++ oln/core/gen/dpoints_piter.hh (working copy)
@@ -29,8 +29,6 @@
# define OLN_CORE_GEN_DPOINTS_PITER_HH
# include <oln/core/concept/iterator_on_points.hh>
-# include <oln/core/concept/window.hh>
-# include <oln/core/concept/neighborhood.hh>
# include <oln/core/internal/dpoints_impl.hh>
@@ -39,8 +37,8 @@
/// Fwd decls.
- template <typename P> struct dpoints_fwd_piter_;
- template <typename P> struct dpoints_bkd_piter_;
+ template <typename P> class dpoints_fwd_piter_;
+ template <typename P> class dpoints_bkd_piter_;
// Super types.
Index: oln/core/gen/neighb.hh
--- oln/core/gen/neighb.hh (revision 857)
+++ oln/core/gen/neighb.hh (working copy)
@@ -30,7 +30,7 @@
# define OLN_CORE_GEN_NEIGHB_HH
# include <oln/core/internal/dpoints_impl.hh>
-# include <oln/core/concept/neighborhood.hh>
+# include <oln/core/internal/neighborhood_base.hh>
namespace oln
@@ -46,7 +46,7 @@
struct super_trait_< neighb_<Dp> >
{
typedef neighb_<Dp> current__;
- typedef Neighborhood<current__> ret;
+ typedef internal::neighborhood_base_<current__> ret;
};
@@ -54,14 +54,14 @@
template <typename Dp>
struct vtypes< neighb_<Dp> >
{
- typedef stc_type(Dp, grid) grid;
+ typedef stc_type(Dp, point) point;
};
/// Generic classical neighborhood class.
template <typename Dp>
- class neighb_ : public Neighborhood< neighb_<Dp> >,
+ class neighb_ : public internal::neighborhood_base_< neighb_<Dp> >,
public internal::dpoints_impl_<Dp>
{
public:
Index: oln/core/gen/window.hh
--- oln/core/gen/window.hh (revision 857)
+++ oln/core/gen/window.hh (working copy)
@@ -28,8 +28,9 @@
#ifndef OLN_CORE_GEN_WINDOW_HH
# define OLN_CORE_GEN_WINDOW_HH
+# include <oln/core/internal/window_base.hh>
# include <oln/core/internal/dpoints_impl.hh>
-# include <oln/core/concept/window.hh>
+# include <oln/core/gen/dpoints_piter.hh>
namespace oln
@@ -45,7 +46,7 @@
struct super_trait_< window_<Dp> >
{
typedef window_<Dp> current__;
- typedef Window<current__> ret;
+ typedef internal::window_base_<current__> ret;
};
@@ -53,14 +54,16 @@
template <typename Dp>
struct vtypes< window_<Dp> >
{
- typedef stc_type(Dp, grid) grid;
+ typedef stc_type(Dp, point) point;
+ typedef dpoints_fwd_piter_<point> fwd_qiter;
+ typedef dpoints_bkd_piter_<point> bkd_qiter;
};
/// Generic classical windoworhood class.
template <typename Dp>
- class window_ : public Window< window_<Dp> >,
+ class window_ : public internal::window_base_< window_<Dp> >,
public internal::dpoints_impl_<Dp>
{
public:
Index: oln/core/gen/single_value_image.hh
--- oln/core/gen/single_value_image.hh (revision 857)
+++ oln/core/gen/single_value_image.hh (working copy)
@@ -48,6 +48,8 @@
typedef point psite;
typedef Ps pset;
+ typedef typename point::coord coord;
+
typedef T value;
typedef const T& rvalue;
Index: oln/core/internal/window_base.hh
--- oln/core/internal/window_base.hh (revision 0)
+++ oln/core/internal/window_base.hh (revision 0)
@@ -0,0 +1,96 @@
+// 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 OLN_CORE_INTERNAL_WINDOW_BASE_HH
+# define OLN_CORE_INTERNAL_WINDOW_BASE_HH
+
+# include <oln/core/concept/window.hh>
+
+
+namespace oln
+{
+
+
+ // Fwd decl.
+ namespace internal { template <typename Exact> class window_base_; }
+
+
+ // Super type.
+ template <typename Exact>
+ struct super_trait_< internal::window_base_<Exact> >
+ {
+ typedef Window<Exact> ret;
+ };
+
+
+ /// Virtual types.
+ template <typename Exact>
+ struct vtypes< internal::window_base_<Exact> >
+ {
+ typedef stc::abstract point;
+ typedef stc::abstract fwd_qiter;
+ typedef stc::abstract bkd_qiter;
+
+ typedef stc_deferred(point) point__;
+ typedef stc_deferred(fwd_qiter) fwd_qiter__;
+
+ typedef stc::final< stc_type(point__, grid) > grid;
+ typedef stc::final< fwd_qiter__ > qiter;
+ };
+
+
+ namespace internal
+ {
+
+ /// Base class for implementation of windows class.
+
+ template <typename Exact>
+ class window_base_ : public Window<Exact>
+ {
+ protected:
+ window_base_();
+
+ }; // end of class oln::window_base_<Exact>
+
+
+
+# ifndef OLN_INCLUDE_ONLY
+
+ template <typename Exact>
+ window_base_<Exact>::window_base_()
+ {
+ }
+
+# endif
+
+
+ } // end of namespace oln::internal
+
+} // end of namespace oln
+
+
+#endif // ! OLN_CORE_INTERNAL_WINDOW_BASE_HH
Index: oln/core/internal/neighborhood_base.hh
--- oln/core/internal/neighborhood_base.hh (revision 0)
+++ oln/core/internal/neighborhood_base.hh (revision 0)
@@ -0,0 +1,92 @@
+// Copyright (C) 2001, 2003, 2004, 2005, 2006, 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 OLN_CORE_INTERNAL_NEIGHBORHOOD_BASE_HH
+# define OLN_CORE_INTERNAL_NEIGHBORHOOD_BASE_HH
+
+# include <oln/core/concept/neighborhood.hh>
+
+
+namespace oln
+{
+
+
+ // Fwd decl.
+ namespace internal { template <typename Exact> class neighborhood_base_; }
+
+
+ // Super type.
+ template <typename Exact>
+ struct super_trait_< internal::neighborhood_base_<Exact> >
+ {
+ typedef Neighborhood<Exact> ret;
+ };
+
+
+ /// Virtual types.
+ template <typename Exact>
+ struct vtypes< internal::neighborhood_base_<Exact> >
+ {
+ typedef stc::abstract point;
+
+ typedef stc_deferred(point) point__;
+ typedef stc::final< stc_type(point__, grid) > grid;
+ };
+
+
+ namespace internal
+ {
+
+ /// Base class for implementation of neighborhoods class.
+
+ template <typename Exact>
+ class neighborhood_base_ : public Neighborhood< neighb_<Exact> >
+ {
+ protected:
+ neighborhood_base_();
+
+ }; // end of class oln::neighborhood_base_<Exact>
+
+
+
+# ifndef OLN_INCLUDE_ONLY
+
+ template <typename Exact>
+ neighborhood_base_<Exact>::neighborhood_base_()
+ {
+ }
+
+# endif
+
+
+ } // end of namespace oln::internal
+
+} // end of namespace oln
+
+
+#endif // ! OLN_CORE_INTERNAL_NEIGHBORHOOD_BASE_HH
Index: oln/core/internal/point_set_std_based.hh
--- oln/core/internal/point_set_std_based.hh (revision 857)
+++ oln/core/internal/point_set_std_based.hh (working copy)
@@ -109,6 +109,7 @@
for_all(i)
ostr << i.to_point() << ' ';
ostr << "}";
+ return ostr;
}
Index: oln/core/internal/image_base.hh
--- oln/core/internal/image_base.hh (revision 857)
+++ oln/core/internal/image_base.hh (working copy)
@@ -33,7 +33,6 @@
# include <oln/core/internal/utils.hh>
# include <oln/core/gen/box.hh>
# include <oln/core/gen/image_pset_piter.hh>
-# include <oln/core/gen/dpoints_piter.hh>
@@ -140,9 +139,6 @@
typedef stc_deferred(point) point__;
typedef stc::final< point__ > psite;
- typedef stc::final< dpoints_fwd_piter_<point__> > fwd_qiter;
- typedef stc::final< dpoints_bkd_piter_<point__> > bkd_qiter;
- typedef fwd_qiter qiter;
};
template <typename Exact>
Index: oln/core/internal/point2d.hh
--- oln/core/internal/point2d.hh (revision 857)
+++ oln/core/internal/point2d.hh (working copy)
@@ -64,9 +64,9 @@
class point2d_ : public point_base_<Exact>
{
typedef point_base_<Exact> super;
- stc_using(coord);
public:
+ stc_using(coord);
coord row() const;
coord& row();