17 #ifndef VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_HH
18 # define VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_HH
20 # include <vaucanson/algebra/concept/freemonoid_product_base.hh>
21 # include <vaucanson/algebra/implementation/monoid/monoid_rep.hh>
22 # include <vaucanson/algebra/implementation/series/series_rep.hh>
36 template <
class F,
class S>
37 struct FreeMonoidProduct;
43 template <
typename F,
typename S>
44 struct MonoidRep<FreeMonoidProduct<F, S> > :
45 MonoidRepBase<MonoidRep, FreeMonoidProduct<F, S> >
54 std::string close_par;
63 template <
typename Semiring,
typename F,
typename S>
64 struct SeriesRep<Semiring, FreeMonoidProduct<F, S> > :
65 SeriesRepBase<SeriesRep, Semiring, FreeMonoidProduct<F, S> >
68 typedef Semiring semiring_t;
71 typedef FreeMonoidProduct<F, S> monoid_t;
74 typedef SeriesRep<semiring_t, monoid_t> self_t;
77 typedef boost::shared_ptr<self_t> pointer_t;
80 typedef SeriesRep<Semiring, F> first_rep_t;
81 typedef SeriesRep<Semiring, S> second_rep_t;
84 first_rep_t& first_representation();
85 second_rep_t& second_representation();
86 const first_rep_t& first_representation()
const;
87 const second_rep_t& second_representation()
const;
89 void disambiguate(
const monoid_t&, pointer_t&);
94 first_rep_t first_representation_;
97 second_rep_t second_representation_;
100 template <
typename F,
typename S>
101 bool operator==(boost::shared_ptr<MonoidRep<FreeMonoidProduct<F, S> > >,
102 boost::shared_ptr<MonoidRep<FreeMonoidProduct<F, S> > >);
104 template <
typename Semiring,
typename F,
typename S>
105 bool operator==(boost::shared_ptr<SeriesRep<Semiring,
106 FreeMonoidProduct<F, S> > >,
107 boost::shared_ptr<SeriesRep<Semiring,
108 FreeMonoidProduct<F, S> > >);
115 template<
class F,
class S>
122 typedef MonoidRep<FreeMonoidProduct<F, S> > monoid_rep_t;
123 typedef boost::shared_ptr<monoid_rep_t> shared_monoid_rep_t;
155 shared_monoid_rep_t rep_;
158 template<
class F,
class S>
174 template<
class F,
class S>
175 struct dynamic_traits<algebra::FreeMonoidProduct<F, S> >
176 : dynamic_traits<algebra::FreeMonoidProductBase<algebra::FreeMonoidProduct<F, S> > >
180 ret = dynamic_traits<F>::ret or dynamic_traits<S>::ret;
188 template<
class F,
class S,
typename T>
190 :
MetaElement<algebra::FreeMonoidProductBase<algebra::FreeMonoidProduct<F, S> >, T>
192 typedef F first_monoid_t;
193 typedef S second_monoid_t;
200 template <
class F,
class S>
201 struct virtual_types<algebra::FreeMonoidProduct<F, S> >
202 : virtual_types<algebra::FreeMonoidProductBase<algebra::FreeMonoidProduct<F, S> > >
204 typedef F first_monoid_t;
205 typedef S second_monoid_t;
210 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
211 # include <vaucanson/algebra/concept/freemonoid_product.hxx>
212 # endif // VCSN_USE_INTERFACE_ONLY
215 #endif // ! VCSN_ALGEBRA_CONCEPT_FREEMONOID_PRODUCT_HH