2006-09-27 Thierry GERAUD <theo(a)tegucigalpa.lrde.epita.fr>
Update grid classes and add static checks for image vtypes.
* oln/core/abstract/fwd_decls.hh: New.
* tests/image_entry.cc: Update.
* oln/core/abstract/image.hh (include): Add fwd_decls.
(decl): Add static checks.
* oln/core/abstract/image/mutability/hierarchy.hh
(lvalue_t, psite_t): Update. oln_check_type_of is now useless
cause vtypes are now automatically checked in the decl structure.
* oln/core/abstract/image/bbox/hierarchy.hh
(bbox_t, point_t): Likewise.
(decl): Add static checks.
* oln/core/abstract/grid.hh (include): Update.
(point_type, dpoint_type, size_type, coord_type): Remove.
We have point->grid, not the contrary.
(grid): Change inheritance to stc::any__simple.
* oln/core/1d/grid1d.hh: Update.
* oln/core/2d/grid2d.hh: Update.
* oln/core/3d/grid3d.hh: Update.
* oln/basics2d.hh (include): Add grid2d.
* oln/Makefile.am (nobase_oln_HEADERS): Update.
Index: tests/image_entry.cc
===================================================================
--- tests/image_entry.cc (revision 580)
+++ tests/image_entry.cc (working copy)
@@ -31,7 +31,7 @@
// stress image_typeness.hh. This might be done in another test, of
// course.
-#include <oln/core/1d/grid1d.hh>
+#include <oln/basics2d.hh>
#include <oln/core/image_entry.hh>
namespace my
@@ -56,18 +56,19 @@
// inheritance relation to the right abstract::image_dimension
// class using the sole grid information (the grid can be seen
// here as a ``tag'').
- typedef oln::grid1d grid_type;
+ typedef oln::grid2d grid_type;
// Likewise, for the switch of image_typeness using the type of
// the value of the image.
typedef char value_type;
// FIXME: Dummy values.
- typedef my::dummy topo_type;
- typedef my::dummy point_type;
- typedef my::dummy fwd_piter_type;
- typedef my::dummy bkd_piter_type;
- typedef my::dummy concrete_type;
+ typedef topo2d topo_type;
+ typedef point2d point_type;
+ typedef fwd_piter2d fwd_piter_type;
+ typedef bkd_piter2d bkd_piter_type;
+ typedef my::image concrete_type;
+ typedef my::dummy morpher_type;
};
}
@@ -90,11 +91,11 @@
main()
{
// Check its internally defined vtypes.
- mlc::assert_< mlc_eq(my::image::grid_t, oln::grid1d) >::check();
+ mlc::assert_< mlc_eq(my::image::grid_t, oln::grid2d) >::check();
mlc::assert_< mlc_eq(my::image::value_t, char) >::check();
// Check its image dimension abstraction.
- mlc::assert_< mlc_is_a_(my::image, oln::abstract::image1d) >::check();
+ mlc::assert_< mlc_is_a_(my::image, oln::abstract::image2d) >::check();
// Check its image type abstraction.
mlc::assert_< mlc_is_a_(my::image,
oln::abstract::grey_level_image) >::check();
Index: oln/core/abstract/image.hh
===================================================================
--- oln/core/abstract/image.hh (revision 580)
+++ oln/core/abstract/image.hh (working copy)
@@ -30,6 +30,7 @@
# define OLN_CORE_ABSTRACT_IMAGE_HH
# include <oln/core/typedefs.hh>
+# include <oln/core/abstract/fwd_decls.hh>
# include <oln/automatic/image.hh>
@@ -60,8 +61,8 @@
public:
- struct decl {
-
+ struct decl
+ {
stc_virtual_typedef(topo);
stc_virtual_typedef(grid);
@@ -79,8 +80,15 @@
stc_virtual_typedef(morpher);
- decl() {
- // FIXME: ...
+ decl()
+ {
+ mlc::assert_< mlc_is_a(topo, abstract::topology) >::check();
+ mlc::assert_< mlc_is_a(grid, abstract::grid) >::check();
+ mlc::assert_< mlc_is_a(piter, abstract::iterator_on_points) >::check();
+ mlc::assert_< mlc_is_a(fwd_piter, abstract::iterator_on_points) >::check();
+ mlc::assert_< mlc_is_a(bkd_piter, abstract::iterator_on_points) >::check();
+ // FIXME: Rec.
+ // mlc::assert_< mlc_is_a(concrete, abstract::image) >::check();
}
};
Index: oln/core/abstract/image/mutability/hierarchy.hh
===================================================================
--- oln/core/abstract/image/mutability/hierarchy.hh (revision 580)
+++ oln/core/abstract/image/mutability/hierarchy.hh (working copy)
@@ -53,12 +53,13 @@
{
private:
- typedef oln_check_type_of(E, lvalue) lvalue_t;
- typedef oln_check_type_of(E, psite) psite_t;
+ typedef oln_type_of(E, lvalue) lvalue_t;
+ typedef oln_type_of(E, psite) psite_t;
public:
- struct decl {
+ struct decl
+ {
stc_virtual_typedef(lvalue);
};
Index: oln/core/abstract/image/bbox/hierarchy.hh
===================================================================
--- oln/core/abstract/image/bbox/hierarchy.hh (revision 580)
+++ oln/core/abstract/image/bbox/hierarchy.hh (working copy)
@@ -29,8 +29,10 @@
# define OLN_CORE_ABSTRACT_IMAGE_BBOX_HIERARCHY_HH
# include <oln/core/abstract/image.hh>
+# include <oln/core/abstract/bbox.hh>
+
namespace oln
{
@@ -49,13 +51,19 @@
{
private:
- typedef oln_check_type_of(E, bbox) bbox_t;
- typedef oln_check_type_of(E, point) point_t;
+ typedef oln_type_of(E, bbox) bbox_t;
+ typedef oln_type_of(E, point) point_t;
public:
- struct decl {
+ struct decl
+ {
stc_virtual_typedef(bbox);
+
+ decl()
+ {
+ mlc::assert_< mlc_is_a(bbox, abstract::bbox) >::check();
+ }
};
// Concrete method.
Index: oln/core/abstract/grid.hh
===================================================================
--- oln/core/abstract/grid.hh (revision 580)
+++ oln/core/abstract/grid.hh (working copy)
@@ -28,10 +28,6 @@
#ifndef OLN_CORE_ABSTRACT_GRID_HH
# define OLN_CORE_ABSTRACT_GRID_HH
-# include <mlc/assert.hh>
-# include <mlc/cmp.hh>
-# include <mlc/to_string.hh>
-# include <oln/core/abstract/any.hh>
# include <oln/core/typedefs.hh>
@@ -40,24 +36,20 @@
// Forward declaration.
namespace abstract
{
- template <typename G> class grid;
+ template <typename E> class grid;
}
- /// Virtual types associated to oln::abstract::image.
- template <typename G>
- struct vtypes< abstract::grid<G> >
+ /// Virtual types associated to oln::abstract::grid.
+ template <typename E>
+ struct vtypes< abstract::grid<E> >
{
- typedef mlc::undefined point_type;
- typedef mlc::none dpoint_type;
- typedef mlc::undefined size_type;
- typedef mlc::undefined coord_type;
typedef mlc::undefined dimvalue_type;
};
namespace abstract {
template <typename E>
- struct grid : public oln::abstract::any<E>
+ struct grid : public virtual stc::any__simple<E>
{
protected:
grid()
Index: oln/core/abstract/fwd_decls.hh
===================================================================
--- oln/core/abstract/fwd_decls.hh (revision 0)
+++ oln/core/abstract/fwd_decls.hh (revision 0)
@@ -0,0 +1,53 @@
+// Copyright (C) 2005, 2006 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_ABSTRACT_FWD_DECLS_HH
+# define OLN_CORE_ABSTRACT_FWD_DECLS_HH
+
+namespace oln
+{
+
+ namespace abstract
+ {
+
+ template <typename E> class bbox;
+ template <typename E> class dpoint;
+ template <typename E> class grid;
+ template <typename E> class image;
+ template <typename E> class iterator;
+ template <typename E> class iterator_on_points;
+ template <typename E> class neighborhood;
+ template <typename E> class point;
+ template <typename E> class point_set;
+ template <typename E> class topology;
+
+ } // end of namespace oln::abstract
+
+} // end of namespace oln
+
+
+#endif // ! OLN_CORE_ABSTRACT_FWD_DECLS_HH
Index: oln/core/1d/grid1d.hh
===================================================================
--- oln/core/1d/grid1d.hh (revision 580)
+++ oln/core/1d/grid1d.hh (working copy)
@@ -35,12 +35,8 @@
namespace oln
{
- // Forward declarations.
- class grid1d;
- class point1d;
- class dpoint1d;
- class size1d;
- class coord_t;
+ // Fwd decl.
+ struct grid1d;
// Super type.
stc_set_super(grid1d, abstract::grid<grid1d>);
@@ -49,14 +45,10 @@
template <>
struct vtypes<grid1d>
{
- typedef point1d point_type;
- typedef dpoint1d dpoint_type;
- typedef coord_t coord_type;
- typedef size1d size_type;
typedef mlc::uint_<1> dimvalue_type;
};
- /// A 1-dimension rectangular grid.
+ /// A 1-dimension grid.
struct grid1d : public stc_get_supers(grid1d)
{
protected:
Index: oln/core/2d/grid2d.hh
===================================================================
--- oln/core/2d/grid2d.hh (revision 580)
+++ oln/core/2d/grid2d.hh (working copy)
@@ -35,12 +35,8 @@
namespace oln
{
- // Forward declarations.
+ // Fwd decl.
struct grid2d;
- struct point2d;
- struct dpoint2d;
- struct size2d;
- struct coord_t;
// Super type.
stc_set_super(grid2d, abstract::grid<grid2d>);
@@ -49,10 +45,6 @@
template <>
struct vtypes<grid2d>
{
- typedef point2d point_type;
- typedef dpoint2d dpoint_type;
- typedef size2d size_type;
- typedef coord_t coord_type;
typedef mlc::uint_<2> dimvalue_type;
};
Index: oln/core/3d/grid3d.hh
===================================================================
--- oln/core/3d/grid3d.hh (revision 580)
+++ oln/core/3d/grid3d.hh (working copy)
@@ -34,13 +34,8 @@
namespace oln
{
-
- // Forward declarations.
+ // Fwd decl.
struct grid3d;
- struct point3d;
- struct dpoint3d;
- struct size3d;
- struct coord_t;
// Super type.
stc_set_super(grid3d, abstract::grid<grid3d>);
@@ -49,14 +44,10 @@
template <>
struct vtypes<grid3d>
{
- typedef point3d point_type;
- typedef dpoint3d dpoint_type;
- typedef size3d size_type;
- typedef coord_t coord_type;
typedef mlc::uint_<3> dimvalue_type;
};
- /// A 3-dimension rectangular grid.
+ /// A 3-dimension cubic grid.
struct grid3d : public stc_get_supers(grid3d)
{
protected:
Index: oln/basics2d.hh
===================================================================
--- oln/basics2d.hh (revision 580)
+++ oln/basics2d.hh (working copy)
@@ -32,6 +32,8 @@
# include <oln/core/2d/aliases.hh>
+# include <oln/core/2d/grid2d.hh>
+
# include <oln/core/2d/point2d.hh>
namespace oln { template class point2d_<int>; }
@@ -54,7 +56,6 @@
namespace oln { template class neighb_<dpoint2d>; }
# include <oln/core/2d/neighb2d.hh>
-
# include <oln/core/2d/image2d.hh>
Index: oln/Makefile.am
===================================================================
--- oln/Makefile.am (revision 580)
+++ oln/Makefile.am (working copy)
@@ -31,6 +31,7 @@
core/abstract/bbox.hh \
core/abstract/dpoint.hh \
core/abstract/entry.hh \
+ core/abstract/fwd_decls.hh \
core/abstract/grid.hh \
core/abstract/image.hh \
core/abstract/image/accessibility/hierarchy.hh \