length_visitor.hxx

00001 // length_visitor.hxx: this file is part of the Vaucanson project.
00002 //
00003 // Vaucanson, a generic library for finite state machines.
00004 //
00005 // Copyright (C) 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_LENGTH_VISITOR_HXX
00018 # define VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_LENGTH_VISITOR_HXX
00019 
00020 # include <vaucanson/algebra/implementation/series/rat/length_visitor.hh>
00021 
00022 # include <algorithm>
00023 
00024 namespace vcsn {
00025 
00026   namespace rat {
00027 
00028     template<typename M_, typename W_>
00029     void
00030     LengthVisitor<M_,W_>::sum_or_product(const Node<M_, W_>* left_,
00031                                          const Node<M_, W_>* right_)
00032     {
00033       left_->accept(*this);
00034       right_->accept(*this);
00035     }
00036 
00037     template<typename M_, typename W_>
00038     void
00039     LengthVisitor<M_, W_>::weight_or_star(const Node<M_, W_>* node)
00040     {
00041       node->accept(*this);
00042     }
00043 
00044     template<typename M_, typename W_>
00045     void
00046     LengthVisitor<M_, W_>::product(const Node<M_, W_>* left_,
00047                                    const Node<M_, W_>* right_)
00048     {
00049       sum_or_product(left_, right_);
00050     }
00051 
00052     template<typename M_, typename W_>
00053     void
00054     LengthVisitor<M_, W_>::sum(const Node<M_, W_>* left_,
00055                                const Node<M_, W_>* right_)
00056     {
00057       sum_or_product(left_, right_);
00058     }
00059 
00060     template<typename M_, typename W_>
00061     void
00062     LengthVisitor<M_, W_>::star(const Node<M_, W_>* node)
00063     {
00064       weight_or_star(node);
00065     }
00066 
00067     template<typename M_, typename W_>
00068     void
00069     LengthVisitor<M_, W_>::left_weight(const W_&, const Node<M_, W_>* node)
00070     {
00071       weight_or_star(node);
00072     }
00073 
00074     template<typename M_, typename W_>
00075     void
00076     LengthVisitor<M_, W_>::right_weight(const W_&, const Node<M_, W_>* node)
00077     {
00078       weight_or_star(node);
00079     }
00080 
00081     template<typename M_, typename W_>
00082     void
00083     LengthVisitor<M_, W_>::constant(const M_&)
00084     {
00085       ++s_;
00086     }
00087 
00088     template<typename M_, typename W_>
00089     void LengthVisitor<M_, W_>::zero()
00090     {
00091       ++s_;
00092     }
00093 
00094     template<typename M_, typename W_>
00095     void LengthVisitor<M_, W_>::one()
00096     {
00097       ++s_;
00098     }
00099 
00100     template<typename M_, typename W_>
00101     size_t LengthVisitor<M_, W_>::get() const
00102     {
00103       return s_;
00104     }
00105 
00106   } // End of namespace rat.
00107 
00108 } // End of namespace vcsn.
00109 
00110 
00111 
00112 #endif // ! VCSN_ALGEBRA_IMPLEMENTATION_SERIES_RAT_LENGTH_VISITOR_HXX

Generated on Fri Jul 28 12:18:48 2006 for Vaucanson by  doxygen 1.4.6