Index: doc/ChangeLog
from Giovanni Palma <giovanni(a)lrde.epita.fr>
* ref/doxygen.config.in: Remove deprecated entries.
Index: olena/ChangeLog
from Giovanni Palma <giovanni(a)lrde.epita.fr>
* oln/morpho/dilation.hh: Correct comments.
* oln/morpho/attribute_closing_opening.hh: Correct namespaces.
* oln/morpho/attribute_closing_opening_map.hh: Likewise.
* tests/morpho/tests/attribute: Likewise.
* oln/morpho/attributes.hh: Add attr namespace.
* oln/morpho/environments.hh: Add file.
Index: olena/oln/morpho/dilation.hh
--- olena/oln/morpho/dilation.hh Thu, 18 Mar 2004 18:24:14 +0100 van-vl_n
(oln/b/5_dilation.h 1.19 640)
+++ olena/oln/morpho/dilation.hh Wed, 24 Mar 2004 16:06:41 +0100 palma_g
(oln/b/5_dilation.h 1.19 640)
@@ -41,11 +41,11 @@
** \brief Processing dilation.
**
** Compute the morphological dilation of input using se
- ** as structural element.
+ ** as structural element.\n
**
** On grey-scale images, each point is replaced by the maximum value
** of its neighbors, as indicated by se. On binary images,
- ** a logical or is performed between neighbors.
+ ** a logical or is performed between neighbors.\n
**
** The morpho::fast version of this function use a different
** algorithm: This algorithm is described in
@@ -53,12 +53,12 @@
** M. Van Droogenbroeck and H. Talbot.
** "Fast computation of morphological operations with arbitrary
** structuring elements". Pattern Recognition Letters,
- ** 17(14):1451-1460, 1996.
+ ** 17(14):1451-1460, 1996.\n
**
** An histogram of the value of the neighborhood indicated by
** se is updated while iterating over all point of the
** image. Doing so is more efficient when the
- ** structural element is large.
+ ** structural element is large.\n
**
** \param I Exact type of the input image.
** \param E Exact type of the neighborhood.
Index: olena/oln/morpho/attribute_closing_opening.hh
--- olena/oln/morpho/attribute_closing_opening.hh Mon, 15 Mar 2004 17:40:54 +0100 van-vl_n
(oln/q/49_attribute_ 1.22 640)
+++ olena/oln/morpho/attribute_closing_opening.hh Wed, 24 Mar 2004 11:41:41 +0100 palma_g
(oln/q/49_attribute_ 1.22 640)
@@ -101,9 +101,9 @@
oln_concrete_type(I) \
T##_opening(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& Ng, \
- const attr_lambda_type(T##_type<unsigned>) &lambda) \
+ const attr_lambda_type(attr::T##_type<unsigned>) &lambda) \
{ \
- return tarjan::internal::attr_opening_<I, N, T##_type<unsigned> >(input, Ng,
lambda); \
+ return tarjan::internal::attr_opening_<I, N, attr::T##_type<unsigned>
>(input, Ng, lambda); \
}
# define xxx_closing_decl(T) \
@@ -111,9 +111,9 @@
oln_concrete_type(I) \
T##_closing(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& Ng, \
- const attr_lambda_type(T##_type<unsigned>) &lambda) \
+ const attr_lambda_type(attr::T##_type<unsigned>) &lambda) \
{ \
- return tarjan::internal::attr_closing_<I, N, T##_type<unsigned> >(input, Ng,
lambda); \
+ return tarjan::internal::attr_closing_<I, N, attr::T##_type<unsigned>
>(input, Ng, lambda); \
}
@@ -123,9 +123,9 @@
oln_concrete_type(I) \
T##_opening(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& Ng, \
- const attr_lambda_type(T##_type<I>) &lambda) \
+ const attr_lambda_type(attr::T##_type<I>) &lambda) \
{ \
- return tarjan::internal::attr_opening_<I, N, T##_type<I> >(input, Ng,
lambda); \
+ return tarjan::internal::attr_opening_<I, N, attr::T##_type<I> >(input, Ng,
lambda); \
}
# define xxx_closing_im_decl(T) \
@@ -133,9 +133,9 @@
oln_concrete_type(I) \
T##_closing(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& Ng, \
- const attr_lambda_type(T##_type<I>) &lambda) \
+ const attr_lambda_type(attr::T##_type<I>) &lambda) \
{ \
- return tarjan::internal::attr_closing_<I, N, T##_type<I> >(input, Ng,
lambda); \
+ return tarjan::internal::attr_closing_<I, N, attr::T##_type<I> >(input, Ng,
lambda); \
}
/*!
Index: olena/oln/morpho/attributes.hh
--- olena/oln/morpho/attributes.hh Mon, 15 Mar 2004 17:40:54 +0100 van-vl_n
(oln/j/45_attributes 1.9 644)
+++ olena/oln/morpho/attributes.hh Wed, 24 Mar 2004 19:01:19 +0100 palma_g
(oln/j/45_attributes 1.9 644)
@@ -27,17 +27,19 @@
#ifndef OLN_MORPHO_ATTRIBUTES_HH
# define OLN_MORPHO_ATTRIBUTES_HH
+# include <oln/basics.hh>
# include <mlc/type.hh>
# include <vector>
+# include <oln/morpho/environments.hh>
// attribute dedicated macros
-# define attr_lambda_type(T) typename oln::morpho::attr_traits<T>::lambda_type
-# define attr_env_type(T) typename oln::morpho::attr_traits<T>::env_type
-# define attr_value_type(T) typename oln::morpho::attr_traits<T>::value_type
-
-# define attr_lambda_type_(T) oln::morpho::attr_traits<T>::lambda_type
-# define attr_env_type_(T) oln::morpho::attr_traits<T>::env_type
-# define attr_value_type_(T) oln::morpho::attr_traits<T>::value_type
+# define attr_lambda_type(T) typename
oln::morpho::attr::attr_traits<T>::lambda_type
+# define attr_env_type(T) typename oln::morpho::attr::attr_traits<T>::env_type
+# define attr_value_type(T) typename oln::morpho::attr::attr_traits<T>::value_type
+
+# define attr_lambda_type_(T) oln::morpho::attr::attr_traits<T>::lambda_type
+# define attr_env_type_(T) oln::morpho::attr::attr_traits<T>::env_type
+# define attr_value_type_(T) oln::morpho::attr::attr_traits<T>::value_type
# define attr_type_decl(self_type) \
@@ -48,6 +50,9 @@
namespace oln {
namespace morpho {
+ /*! \brief Implementation of attributes.
+ */
+ namespace attr {
/*! \brief Useful tools for morphological math.
*/
namespace tools {
@@ -63,66 +68,6 @@
}
} // !tools
- /*!
- ** \brief Top of environment hierarchy.
- */
- template <class Exact>
- struct env: public mlc_hierarchy::any<Exact>
- {
- };
-
- /*!
- ** \brief Useless environment.
- **
- ** This environment is an empty one.
- */
- struct NullEnv: public env<NullEnv>
- {
- };
-
- /*!
- ** \brief Environment containing image.
- **
- ** Used for image substitution in other_image attribute.
- */
- template <class I>
- struct OtherImageEnv: public env<OtherImageEnv<I> >
- {
- typedef abstract::image<I> im_type;
-
- OtherImageEnv(const abstract::image<I> &im): im_(im)
- {};
-
- const im_type &getImage() const
- {
- return im_;
- }
-
- protected:
- const im_type &im_;
- };
-
- /*!
- ** \brief Environment containing point.
- **
- ** Used for point substitution in other_point attribute.
- */
- template <class I>
- struct OtherPointEnv: public env<OtherPointEnv<I> >
- {
- typedef abstract::image<I> im_type;
-
-// OtherImageEnv(const abstract::image<I> &im): im_(im)
-// {};
-
- const oln_point_type(I) &getPoint(const oln_point_type(I) &p) const
- {
- return p;
- }
-
-// protected:
-// const im_type &im_;
- };
// the traits fwd declaration
/*!
@@ -526,60 +471,177 @@
};
};
- /*--------------*
- | other_point |
- *------------*/
-// /*!
-// ** \class other_point
-// **
-// ** \brief Metaclass used to change attribute behavior.
-// **
-// ** This class do the same job that its Dad parameter, but force it
-// ** to work on other data.
-// */
-// template <class Dad, class I, class Exact = mlc::final>
-// class other_point:
-// public change_exact<Dad, typename mlc::exact_vt<other_point<Dad, I,
Exact>, Exact>::ret >::ret
-// {
-// public:
-// typedef other_image<Dad, I, Exact> self_type; /*< Self type of
the class.*/
-// typedef typename abstract::image<mlc_exact_type(I)> im_type; /*<
Type of substituted image.*/
-// attr_type_decl(self_type);
-// typedef typename change_exact<Dad,
-// typename mlc::exact_vt<other_point<Dad, I, Exact>,
-// Exact>::ret >::ret super_type; /*< Mother class type.*/
-
-// /*!
-// ** \brief Constructor.
-// **
-// ** Dispatch to Dad constructor.
-// */
-// other_point(): super_type()
-// {
-// };
-
-// /*!
-// ** \brief lambda_type Constructor.
-// **
-// ** Dispatch to Dad constructor.
-// */
-// other_point(const lambda_type &lambda): super_type(lambda)
-// {
-// };
-
-// /*!
-// ** \brief Image Constructor.
-// **
-// ** Dispatch to Dad constructor but substitute image argument with
-// ** the image contained in the environment.
-// */
-// template <typename IM>
-// other_point(const abstract::image<IM> &im,
-// const oln_point_type(I) &p,
-// const env_type &e): super_type(im, e.getPoint(p), e)
-// {
-// };
-// };
+ /*----------------------*
+ | ball_parent_change |
+ *--------------------*/
+ /*!
+ ** \class other_point
+ **
+ ** \brief Metaclass used to change attribute behavior.
+ **
+ ** This class do the same job that its Dad parameter, but force it
+ ** to work on other data.
+ */
+ template <class I, class Exact = mlc::final>
+ class ball_parent_change:
+ public attribute<mlc_2_exact_vt_type(ball_parent_change, I, Exact)>
+ {
+ public:
+ typedef ball_parent_change<I, Exact> self_type; /*< Self type of the
class.*/
+ typedef typename abstract::image<mlc_exact_type(I)> im_type; /*< Type of
substituted image.*/
+ attr_type_decl(self_type);
+ typedef oln_value_type(I) pts_type; ///< should be list <?>
+ typedef typename pts_type::const_iterator cst_iter_type; ///< const iterator on
Point vector.
+ typedef typename pts_type::value_type point_type; ///< Point type associated to
im_type.
+ typedef oln_dpoint_type(point_type) dpoint_type; ///< Dpoint type associated to
im_type.
+
+ /*!
+ ** \brief Constructor.
+ **
+ ** Dispatch to Dad constructor.
+ */
+ ball_parent_change(): value_(ntg_zero_val(value_type)), points_()
+ {
+ };
+
+ /*!
+ ** \brief lambda_type Constructor.
+ **
+ ** Dispatch to Dad constructor.
+ */
+ ball_parent_change(const lambda_type &lambda): value_(lambda), points_()
+ {
+ };
+
+ /*!
+ ** \brief Image Constructor.
+ **
+ ** Dispatch to Dad constructor but substitute image argument with
+ ** the image contained in the environment.
+ */
+ template <typename IM>
+ ball_parent_change(const abstract::image<IM> &,
+ const oln_point_type(IM) &p,
+ const env_type &e): points_()//: super_type(/*e.getImage(), */e.getPoint(p),
e)
+ {
+ std::copy(e.getParent()[p].begin(),
+ e.getParent()[p].end(),
+ std::back_inserter(points_));
+ };
+
+ /*!
+ ** \brief Accessor to value_.
+ **
+ ** Virtual method.
+ ** \see getValue_impl()
+ */
+ const value_type &getValue() const
+ {
+ mlc_dispatch(getValue)();
+ };
+
+
+ /*!
+ ** \brief Accessor to pts_.
+ **
+ ** Virtual method.
+ ** \see getPts_impl()
+ */
+ const pts_type &getPts() const
+ {
+ mlc_dispatch(getPts)();
+ };
+
+ // impl
+ /*!
+ ** \brief Implementation of getValue().
+ **
+ ** Override this method in order to provide a new version of
+ ** getValue().
+ **
+ ** \warning Do not call this method, use getValue() instead.
+ */
+ const value_type &getValue_impl() const
+ {
+ return value_;
+ };
+
+ /*!
+ ** \brief Implementation of getValue().
+ **
+ ** Override this method in order to provide a new version of
+ ** getPts().
+ **
+ ** \warning Do not call this method, use getPts() instead.
+ */
+ const pts_type &getPts_impl() const
+ {
+ return points_;
+ };
+
+ /*!
+ ** \brief += operator implementation.
+ **
+ ** This is an implementation of the += operator. Override this
+ ** method to provide a new implementation of this operator.
+ ** \warning This method SHOULDN'T directly be called.
+ */
+ void pe_impl(const self_type &rhs)
+ {
+ precondition(points_.size() < (128 * 128 * 128 + 1));
+ std::copy(rhs.getPts().begin(),
+ rhs.getPts().end(),
+ std::back_inserter(points_));
+ compute_value();
+ value_ = ntg::max(value_, rhs.getValue());
+ };
+
+ /*!
+ ** \brief "<" operator implementation.
+ **
+ ** This is an implementation of the += operator. Override this
+ ** method to provide a new implementation of this operator.
+ ** \warning This method SHOULDN'T directly be called.
+ */
+ bool less_impl(const lambda_type &lambda) const
+ {
+ return value_ < lambda;
+ };
+
+ /*!
+ ** \brief != operator implementation.
+ **
+ ** This is an implementation of the += operator. Override this
+ ** method to provide a new implementation of this operator.
+ ** \warning This method SHOULDN'T directly be called.
+ */
+ bool ne_impl(const lambda_type &lambda) const
+ {
+ return lambda != value_;
+ };
+
+ protected:
+ void compute_value()
+ {
+ value_type last = value_;
+ value_ = ntg_zero_val(value_type);
+ for (cst_iter_type p1 = points_.begin(); p1 != points_.end(); ++p1)
+ for (cst_iter_type p2 = points_.begin(); p2 != points_.end(); ++p2)
+ {
+ unsigned d = 0;
+ dpoint_type p = *p1 - *p2;
+ for (int i = 0; i < point_traits<point_type>::dim; ++i)
+ d += p.nth(i) * p.nth(i);
+ if (d > value_)
+ value_ = d;
+ }
+ value_ /= 2;
+ value_ = ntg::max(value_, last);
+ }
+
+ value_type value_;
+ pts_type points_;
+ };
/*-----------*
| height |
@@ -1151,11 +1213,11 @@
**
** \arg p Point to consider in the image.
*/
- dist_type(const im_type&,
+ dist_type(//const im_type&,
const point_type &p,
- const env_type &) :
- value_(ntg_zero_val(value_type)),
- center_(p)
+ const env_type &) //:
+ // value_(ntg_zero_val(value_type)),
+ //center_(p)
{
};
@@ -1605,112 +1667,130 @@
\------------------------*/
- // integral traits
+ /*!
+ ** \brief Trait specialization for the integral attribute.
+ */
template <class T, class Exact>
struct attr_traits<integral_type<T, Exact> >
{
- typedef T value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef T value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef env::NullEnv env_type; ///< Type of environment.
};
- // height traits
+ /*!
+ ** \brief Trait specialization for the height attribute.
+ */
template <class T, class Exact>
struct attr_traits<height_type<T, Exact> >
{
- typedef T value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef T value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef env::NullEnv env_type; ///< Type of environment.
};
- // card traits
+ /*!
+ ** \brief Trait specialization for card attribute.
+ */
template <class T, class Exact>
struct attr_traits<card_type<T, Exact> >
{
- typedef T value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef T value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef env::NullEnv env_type; ///< Type of environment.
};
- // maxvalue traits
+ /*!
+ ** \brief Trait specialization for the maxvalue attribute.
+ */
template <class T, class Exact>
struct attr_traits<maxvalue_type<T, Exact> >
{
- typedef T value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef T value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef env::NullEnv env_type; ///< Type of environment.
};
- // minvalue traits
+ /*!
+ ** \brief Trait specialization for the minvalue attribute.
+ */
template <class T, class Exact>
struct attr_traits<minvalue_type<T, Exact> >
{
- typedef T value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef T value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef env::NullEnv env_type; ///< Type of environment.
};
- // ball traits
+ /*!
+ ** \brief Trait specialization for the ball attribute.
+ */
template <class I, class Exact>
struct attr_traits<ball_type<I, Exact> >
{
- typedef unsigned value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef unsigned value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef oln::morpho::env::NullEnv env_type; ///< Type of environment.
};
- // dist traits
+ /*!
+ ** \brief Trait specialization for the dist attribute.
+ */
template <class I, class Exact>
struct attr_traits<dist_type<I, Exact> >
{
- typedef float value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef float value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef oln::morpho::env::NullEnv env_type; ///< Type of environment.
};
- // cube traits
+ /*!
+ ** \brief Trait specialization for the cube attribute.
+ */
template <class I, class Exact>
struct attr_traits<cube_type<I, Exact> >
{
- typedef unsigned value_type;
- typedef value_type lambda_type;
- typedef NullEnv env_type;
+ typedef unsigned value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef oln::morpho::env::NullEnv env_type; ///< Type of environment.
};
- // box traits
+ /*!
+ ** \brief Trait specialization for the box attribute.
+ */
template <class I, class Exact>
struct attr_traits<box_type<I, Exact> >
{
- typedef unsigned value_type;
- typedef ntg::vec<I::dim, value_type, mlc::final> lambda_type;
- typedef NullEnv env_type;
+ typedef unsigned value_type; ///< Type of data.
+ typedef ntg::vec<I::dim, value_type, mlc::final> lambda_type; ///< Type of
lambda.
+ typedef oln::morpho::env::NullEnv env_type; ///< Type of environment.
};
- // other_image traits
+ /*!
+ ** \brief Trait specialization for the other_image attribute.
+ */
template <class Dad, class I, class Exact>
struct attr_traits<other_image<Dad, I, Exact> >
{
//typedef typename change_exact<Dad, other_image<Dad, I, Exact>
>::ret super_type;
typedef typename change_exact<Dad,
typename mlc::exact_vt<other_image<Dad, I, Exact>,
- Exact>::ret>::ret super_type;
- typedef attr_value_type(super_type) value_type;
- typedef attr_lambda_type(super_type) lambda_type;
- typedef OtherImageEnv<I> env_type;
- };
-
-// // other_point traits
-// template <class Dad, class I, class Exact>
-// struct attr_traits<other_point<Dad, I, Exact> >
-// {
-// //typedef typename change_exact<Dad, other_image<Dad, I, Exact>
>::ret super_type;
-// typedef typename change_exact<Dad,
-// typename mlc::exact_vt<other_point<Dad, I, Exact>,
-// Exact>::ret>::ret super_type;
-// typedef attr_value_type(super_type) value_type;
-// typedef attr_lambda_tye(super_type) lambda_type;
-// typedef OtherPointEnv<I> env_type;
-// };
+ Exact>::ret>::ret super_type; ///< Parent class type.
+ typedef attr_value_type(super_type) value_type; ///< Type of data.
+ typedef attr_lambda_type(super_type) lambda_type; ///< Type of lambda.
+ typedef oln::morpho::env::OtherImageEnv<I> env_type; ///< Type of
environment.
+ };
+
+ /*!
+ ** \brief Trait specialization for the ball_parent_change attribute.
+ */
+ template <class I, class Exact>
+ struct attr_traits<ball_parent_change<I, Exact> >
+ {
+ typedef unsigned value_type; ///< Type of data.
+ typedef value_type lambda_type; ///< Type of lambda.
+ typedef env::ParentEnv<I> env_type; ///< Type of environment.
+ };
// traits for other_image derivation
@@ -1725,17 +1805,7 @@
typedef integral_type<T, NewExact> ret;
};
-// /*!
-// ** \brief Change the exact type of an attribute.
-// **
-// ** Traits to change dist_type exact type.
-// */
-// template <class NewExact, class OldExact, class T>
-// struct change_exact<dist_type<T, OldExact>, NewExact>
-// {
-// typedef dist_type<T, NewExact> ret;
-// };
-
+ }// !attr
} // !morpho
} //!oln
@@ -1748,3 +1818,4 @@
#endif // !OLN_MORPHO_ATTRIBUTES
+
Index: olena/oln/morpho/attribute_closing_opening_map.hh
--- olena/oln/morpho/attribute_closing_opening_map.hh Tue, 23 Mar 2004 13:37:46 +0100
van-vl_n (oln/j/49_attribute_ 1.10 600)
+++ olena/oln/morpho/attribute_closing_opening_map.hh Wed, 24 Mar 2004 12:01:08 +0100
palma_g (oln/j/49_attribute_ 1.10 600)
@@ -61,7 +61,7 @@
** \param D Attribute exact type.
** \param Env Type of environment.
*/
- template <class I, class D, class Env = morpho::NullEnv>
+ template <class I, class D, class Env = morpho::env::NullEnv>
struct f_tarjan_map
{
public:
@@ -213,10 +213,10 @@
oln_concrete_type(I) \
T##_opening(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& ng, \
- const attr_lambda_type(T##_type<>)& lambda) \
+ const attr_lambda_type(attr::T##_type<>)& lambda) \
{ \
- return tarjan_map<T##_type<>, I, N>(false, input, ng, lambda, \
- attr_env_type(T##_type<>)()); \
+ return tarjan_map<attr::T##_type<>, I, N>(false, input, ng, lambda, \
+ attr_env_type(attr::T##_type<>)()); \
}
// same but attribute take care of the image type
@@ -225,10 +225,10 @@
oln_concrete_type(I) \
T##_opening(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& ng, \
- const attr_lambda_type(T##_type<I>)& lambda) \
+ const attr_lambda_type(attr::T##_type<I>)& lambda) \
{ \
- return tarjan_map<T##_type<I>, I, N>(false, input, ng, lambda, \
- attr_env_type(T##_type<I>)()); \
+ return tarjan_map<attr::T##_type<I>, I, N>(false, input, ng, lambda, \
+ attr_env_type(attr::T##_type<I>)()); \
}
//return input;
@@ -239,10 +239,10 @@
oln_concrete_type(I) \
T##_closing(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& ng, \
- const attr_lambda_type(T##_type<>)& lambda) \
+ const attr_lambda_type(attr::T##_type<>)& lambda) \
{ \
- return tarjan_map<T##_type<>, I, N>(true, input, ng, lambda, \
- attr_env_type(T##_type<>)()); \
+ return tarjan_map<attr::T##_type<>, I, N>(true, input, ng, lambda, \
+ attr_env_type(attr::T##_type<>)()); \
}
// same but attribute take care of the image type
@@ -251,10 +251,10 @@
oln_concrete_type(I) \
T##_closing(const abstract::non_vectorial_image<I>& input, \
const abstract::neighborhood<N>& ng, \
- const attr_lambda_type(T##_type<I>)& lambda) \
+ const attr_lambda_type(attr::T##_type<I>)& lambda) \
{ \
- return tarjan_map<T##_type<I>, I, N>(true, input, ng, lambda, \
- attr_env_type(T##_type<I>)());\
+ return tarjan_map<attr::T##_type<I>, I, N>(true, input, ng, lambda, \
+ attr_env_type(attr::T##_type<I>)());\
}
/*!
Index: olena/tests/morpho/tests/attribute
--- olena/tests/morpho/tests/attribute Mon, 15 Mar 2004 17:17:49 +0100 palma_g
(oln/j/51_attribute 1.4 644)
+++ olena/tests/morpho/tests/attribute Wed, 24 Mar 2004 12:07:10 +0100 palma_g
(oln/j/51_attribute 1.4 644)
@@ -28,7 +28,7 @@
bool fail(false);
typedef image2d<int_u8> img_type;
- typedef oln::morpho::card_type<unsigned> area_type;
+ typedef oln::morpho::attr::card_type<unsigned> area_type;
const area_type::lambda_type area = 100;
const neighborhood2d nb = neighb_c8();
// const oln::morpho::NullEnv env;
Index: doc/ref/doxygen.config.in
--- doc/ref/doxygen.config.in Mon, 15 Mar 2004 16:47:03 +0100 palma_g (oln/v/29_doxygen.co
1.3 644)
+++ doc/ref/doxygen.config.in Wed, 24 Mar 2004 12:03:43 +0100 palma_g (oln/v/29_doxygen.co
1.3 644)
@@ -206,8 +206,3 @@
# Configuration::addtions related to the search engine
#---------------------------------------------------------------------------
SEARCHENGINE = YES
-CGI_NAME = search.cgi
-CGI_URL =
-DOC_URL =
-DOC_ABSPATH =
-BIN_ABSPATH = /usr/local/bin/
Index: olena/oln/morpho/environments.hh
--- olena/oln/morpho/environments.hh Thu, 25 Mar 2004 14:59:49 +0100 palma_g ()
+++ olena/oln/morpho/environments.hh Wed, 24 Mar 2004 17:53:34 +0100 palma_g
(oln/m/17_environmen 644)
@@ -0,0 +1,110 @@
+// Copyright (C) 2004 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, 59 Temple Place - Suite 330, 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_MORPHO_ENVIRONMENTS_HH
+# define OLN_MORPHO_ENVIRONMENTS_HH
+# include <oln/basics.hh>
+# include <mlc/type.hh>
+
+namespace oln
+{
+ namespace morpho
+ {
+ /*! \brief Implementation of environments used by attributes.
+ */
+ namespace env
+ {
+ /*! brief Abstract stuff for environments.
+ */
+ namespace abstract
+ {
+ /*!
+ ** \brief Top of environment hierarchy.
+ */
+ template <class Exact>
+ struct env: public mlc_hierarchy::any<Exact>
+ {
+ };
+ } // !abstract
+
+ /*!
+ ** \brief Useless environment.
+ **
+ ** This environment is an empty one.
+ */
+ struct NullEnv: public abstract::env<NullEnv>
+ {
+ };
+
+ /*!
+ ** \brief Environment containing image.
+ **
+ ** Used for image substitution in other_image attribute.
+ */
+ template <class I>
+ struct OtherImageEnv: public abstract::env<OtherImageEnv<I> >
+ {
+ typedef oln::abstract::image<I> im_type;
+
+ OtherImageEnv(const oln::abstract::image<I> &im): im_(im)
+ {};
+
+ const im_type &getImage() const
+ {
+ return im_;
+ }
+
+ protected:
+ const im_type &im_;
+ };
+
+ /*!
+ ** \brief Environment containing point.
+ **
+ ** Used for point substitution in other_point attribute.
+ */
+ template <class I>
+ struct ParentEnv: public abstract::env<ParentEnv<I> >
+ {
+ typedef oln::abstract::image<I> im_type;
+
+ ParentEnv(const oln::abstract::image<I> &im): im_(im)
+ {};
+
+ const im_type &getParent() const
+ {
+ return im_;
+ }
+
+ protected:
+ const im_type &im_;
+ };
+
+ }
+ }
+}
+#endif // !OLN_MORPHO_ENVIRONMENTS_HH
--
Giovanni Palma
EPITA - promo 2005 - membre d'EpX - LRDE
Mob. : +33 (0)6 60 97 31 74