17 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SERIES_SERIES_HH
18 # define VCSN_ALGEBRA_IMPLEMENTATION_SERIES_SERIES_HH
20 # include <vaucanson/algebra/concept/series_base.hh>
21 # include <vaucanson/algebra/implementation/series/series_rep.hh>
33 struct semiring_slot_tag {};
34 struct monoid_slot_tag {};
38 template<
typename Semiring,
typename Mono
id>
41 private SetSlot<Semiring, semiring_slot_tag>,
42 private SetSlot<Monoid, monoid_slot_tag>
44 typedef SeriesRep<Semiring, Monoid> series_rep_t;
45 typedef boost::shared_ptr<series_rep_t> shared_series_rep_t;
47 Series(
const Semiring& w,
const Monoid& m);
48 Series(
const Semiring& w,
const Monoid& m,
const series_rep_t& sr);
53 const Monoid&
monoid()
const;
55 const shared_series_rep_t representation()
const;
60 shared_series_rep_t rep_;
63 template <
class W,
class M,
class NewW,
class NewM>
64 struct mute_series_traits<
Series<W, M>, NewW, NewM >
69 template <
class W,
class M,
class NewW,
class NewM>
70 typename mute_series_traits<Series<W, M>, NewW, NewM >::ret
71 mute_series(
const Series<W, M>& s,
const NewW& w,
const NewM& m);
80 template <
class W,
class M,
class T>
82 public MetaElement<algebra::SeriesBase<algebra::Series<W, M> >, T>
90 template<
typename W,
typename M>
91 struct dynamic_traits<algebra::Series<W, M> >
92 : dynamic_traits<algebra::SeriesBase<algebra::Series<W, M> > >
94 static const bool ret =
95 dynamic_traits<W>::ret || dynamic_traits<M>::ret;
104 template<
typename W,
typename M>
105 struct virtual_types<algebra::Series<W, M> >
106 : virtual_types<algebra::SeriesBase<algebra::Series<W, M> > >
108 typedef W semiring_t;
115 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
116 # include <vaucanson/algebra/implementation/series/series.hxx>
117 #endif // VCSN_USE_INTERFACE_ONLY
120 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SERIES_SERIES_HH