17 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_REVERSE_VISITOR_HH
18 # define VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_REVERSE_VISITOR_HH
20 # include <vaucanson/algebra/concept/series_base.hh>
21 # include <vaucanson/algebra/concept/semiring_base.hh>
22 # include <vaucanson/algebra/implementation/series/rat/exp.hh>
30 template <
class Semiring,
class Word,
class Weight>
31 class ReverseVisitor :
32 public rat::DefaultMutableNodeVisitor<Word, Weight>
35 ReverseVisitor(
const algebra::SemiringBase<Semiring>& s);
39 product(rat::Node<Word, Weight>* lhs,
40 rat::Node<Word, Weight>* rhs);
48 left_weight(Weight& w);
52 right_weight(Weight& w);
58 transpose(
const algebra::SeriesBase<S>&,
const Weight&);
63 transpose(
const algebra::SemiringBase<S>&,
const Weight&);
73 template <
typename S,
typename T>
74 struct DefaultTransposeFun;
76 template <
typename S,
typename Word,
typename Weight>
77 struct DefaultTransposeFun< S, rat::exp<Word, Weight> >
79 rat::exp<Word, Weight>&
80 operator () (
const S&,
const rat::exp<Word, Weight>& exp);
87 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
88 # include <vaucanson/algebra/implementation/series/rat/reverse_visitor.hxx>
89 # endif // ! VCSN_USE_INTERFACE_ONLY
91 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_REVERSE_VISITOR_HH