- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

# dispatch_visitor.hxx

    00001 // dispatch_visitor.hxx: this file is part of the Vaucanson project.
    00002 //
    00003 // Vaucanson, a generic library for finite state machines.
    00004 //
    00005 // Copyright (C) 2004, 2005 The Vaucanson Group.
    00006 //
    00007 // This program is free software; you can redistribute it and/or
    00008 // modify it under the terms of the GNU General Public License
    00009 // as published by the Free Software Foundation; either version 2
    00010 // of the License, or (at your option) any later version.
    00011 //
    00012 // The complete GNU General Public Licence Notice can be found as the
    00013 // `COPYING' file in the root directory.
    00014 //
    00015 // The Vaucanson Group consists of people listed in the `AUTHORS' file.
    00016 //
    00017 #ifndef VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_DISPATCH_VISITOR_HXX
    00018 # define VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_DISPATCH_VISITOR_HXX
    00019
    00020 # include <vaucanson/algebra/implementation/series/rat/dispatch_visitor.hh>
    00021
    00022 namespace vcsn
    00023 {
    00024
    00025   namespace algebra
    00026   {
    00027
    00028     template <class Matcher, class Monoid, class Semiring>
    00029     DispatchVisitor<Matcher, Monoid, Semiring>::DispatchVisitor(Matcher& m) :
    00030       matcher_(m)
    00031     {}
    00032
    00033     template <class Matcher, class Monoid, class Semiring>
    00034     DispatchVisitor<Matcher, Monoid, Semiring>::~DispatchVisitor()
    00035     {}
    00036
    00037     template <class Matcher, class Monoid, class Semiring>
    00038     void
    00039     DispatchVisitor<Matcher, Monoid, Semiring>::
    00040     product(const node_t* lhs, const node_t* rhs)
    00041     {
    00042       ret_ = matcher_.match_nodeProduct(typename Matcher::Product(lhs, rhs));
    00043     }
    00044
    00045     template <class Matcher, class Monoid, class Semiring>
    00046     void
    00047     DispatchVisitor<Matcher, Monoid, Semiring>::
    00048     sum(const node_t* lhs, const node_t* rhs)
    00049     {
    00050       ret_ = matcher_.match_nodeSum(typename Matcher::Sum(lhs, rhs));
    00051     }
    00052
    00053     template <class Matcher, class Monoid, class Semiring>
    00054     void
    00055     DispatchVisitor<Matcher, Monoid, Semiring>::
    00056     star(const node_t* node)
    00057     {
    00058       ret_ = matcher_.match_nodeStar(typename Matcher::Star(node));
    00059     }
    00060
    00061     template <class Matcher, class Monoid, class Semiring>
    00062     void
    00063     DispatchVisitor<Matcher, Monoid, Semiring>::
    00064     left_weight(const semiring_elt_value_t& w, const node_t* node)
    00065     {
    00066       ret_ = matcher_.match_nodeLeftWeight(typename Matcher::LeftWeight(w,
    00067                                                                         node));
    00068     }
    00069
    00070     template <class Matcher, class Monoid, class Semiring>
    00071     void
    00072     DispatchVisitor<Matcher, Monoid, Semiring>::
    00073     right_weight(const semiring_elt_value_t& w, const node_t* node)
    00074     {
    00075       ret_ = matcher_.match_nodeRightWeight(typename
    00076                                             Matcher::RightWeight(node, w));
    00077     }
    00078
    00079     template <class Matcher, class Monoid, class Semiring>
    00080     void
    00081     DispatchVisitor<Matcher, Monoid, Semiring>::
    00082     constant(const monoid_elt_value_t& m)
    00083     {
    00084       ret_ = matcher_.match_nodeConstant(typename Matcher::Constant(m));
    00085     }
    00086
    00087     template <class Matcher, class Monoid, class Semiring>
    00088     void
    00089     DispatchVisitor<Matcher, Monoid, Semiring>::
    00090     zero()
    00091     {
    00092       ret_ = matcher_.match_nodeZero(typename Matcher::Zero());
    00093     }
    00094
    00095     template <class Matcher, class Monoid, class Semiring>
    00096     void
    00097     DispatchVisitor<Matcher, Monoid, Semiring>::
    00098     one()
    00099     {
    00100       ret_ = matcher_.match_nodeOne(typename Matcher::One());
    00101     }
    00102
    00103     template <class Matcher, class Monoid, class Semiring>
    00104     typename DispatchVisitor<Matcher, Monoid, Semiring>::return_type
    00105     DispatchVisitor<Matcher, Monoid, Semiring>::
    00106     get_ret()
    00107     {
    00108       return ret_;
    00109     }
    00110
    00111     template <class M, class W>
    00112     template <class Matcher>
    00113     typename Matcher::return_type
    00114     DispatchFunction< rat::exp<M, W> >::d(Matcher& matcher,
    00115                                           const rat::exp<M, W>& exp)
    00116     {
    00117       DispatchVisitor<Matcher, M, W> v(matcher);
    00118       exp.accept(v);
    00119       return v.get_ret ();
    00120     }
    00121
    00122   } // End of namespace algebra.
    00123
    00124 } // End of namespace vcsn.
    00125
    00126 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_DISPATCH_VISITOR_HXX