18 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SERIES_SERIES_REP_BASE_HXX
19 # define VCSN_ALGEBRA_IMPLEMENTATION_SERIES_SERIES_REP_BASE_HXX
21 # include <vaucanson/algebra/implementation/series/series_rep_base.hh>
27 template <
template <
typename,
typename>
class B,
typename S,
typename M>
28 SeriesRepBase<B, S, M>::SeriesRepBase()
30 self_t*
self =
static_cast<self_t*
>(
this);
33 self->maybe_zero.push_back(
"0");
34 self->maybe_zero.push_back(
"z");
37 self->maybe_zero.push_back(
"_z");
38 self->maybe_zero.push_back(
"zero");
40 self->zero = *(
self->maybe_zero.begin());
42 self->close_par =
")";
46 self->open_weight =
"{";
47 self->close_weight =
"}";
48 self->spaces.push_back(
" ");
53 template <
template <
typename,
typename>
class B,
typename S,
typename M>
55 SeriesRepBase<B, S, M>::disambiguate(
const monoid_t& monoid,
59 typedef typename monoid_t::alphabet_t alphabet_t;
60 typedef typename alphabet_t::letter_t letter_t;
62 self_t*
self =
static_cast<self_t*
>(
this);
65 typedef std::vector<std::string>::const_iterator iterator_t;
67 self_t new_rep = *
self;
69 for (iterator_t zero_it = new_rep.maybe_zero.begin();
70 zero_it != new_rep.maybe_zero.end();
75 for_all_const_(alphabet_t, i, monoid.alphabet())
77 if (letter_traits<letter_t>::letter_to_literal(*i) == *zero_it)
88 if (new_rep.zero != *zero_it)
90 new_rep.zero = *zero_it;
91 orig = pointer_t(
new self_t(new_rep));
98 template <
template <
typename,
typename>
class B,
typename S,
typename M>
100 operator==(boost::shared_ptr<SeriesRepBase<B, S, M> > lhs,
101 boost::shared_ptr<SeriesRepBase<B, S, M> > rhs)
103 return (lhs->open_par == rhs->open_par &&
104 lhs->close_par == rhs->close_par &&
105 lhs->plus == rhs->plus &&
106 lhs->times == rhs->times &&
107 lhs->star == rhs->star &&
108 lhs->zero == rhs->zero &&
109 lhs->open_weight == rhs->open_weight &&
110 lhs->close_weight == rhs->close_weight &&
111 lhs->spaces == rhs->spaces &&
112 lhs->maybe_zero == rhs->maybe_zero);
119 #endif // !VCSN_ALGEBRA_IMPLEMENTATION_SERIES_SERIES_REP_BASE_HXX