00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 #ifndef VCSN_ALGORITHMS_AUT_TO_EXP_HH
00018 # define VCSN_ALGORITHMS_AUT_TO_EXP_HH
00019 
00032 
00033 
00034 # include <vaucanson/design_pattern/design_pattern.hh>
00035 # include <vaucanson/automata/concept/automata_base.hh>
00036 
00037 namespace vcsn {
00038 
00056   template<typename A, typename AI>
00057   typename Element<A, AI>::series_set_elt_t
00058   aut_to_exp(const Element<A, AI>& a);
00059 
00077   template<typename A, typename AI, typename Chooser>
00078   typename Element<A, AI>::series_set_elt_t
00079   aut_to_exp(const Element<A, AI>& a, const Chooser& c);
00080 
00091   struct DefaultChooser
00092   {
00093       template <class Auto_>
00094       typename Auto_::hstate_t
00095       operator()(const Auto_& a) const;
00096   };
00097 
00103   struct RandomChooser
00104   {
00108       template <class Auto_>
00109       typename Auto_::hstate_t
00110       operator()(const Auto_& a) const;
00111   };
00112 
00113 
00114   struct HChooser
00115   {
00116       template <class Auto_>
00117       typename Auto_::hstate_t
00118       operator()(const Auto_& a) const;
00119   };
00120 
00127   struct DMChooser
00128   {
00132       template <class Auto_>
00133       typename Auto_::hstate_t
00134       operator()(const Auto_& a) const;
00135   };
00136 
00145   class ListChooser
00146   {
00147     typedef std::list<unsigned int> list_t;
00148   public :
00149     ListChooser(const list_t& l);
00150 
00151     template <class Auto_>
00152     typename Auto_::hstate_t operator() (const Auto_& a);
00153 
00154   private :
00155     list_t list_;
00156     list_t::const_iterator pos_;
00157   };
00158 
00159 } 
00160 
00161 
00162 
00163 
00164 
00165 
00166 # if !defined VCSN_USE_INTERFACE_ONLY
00167 #  include <vaucanson/algorithms/aut_to_exp.hxx>
00168 # endif // VCSN_USE_INTERFACE_ONLY
00169 
00170 #endif // ! VCSN_ALGORITHMS_AUT_TO_EXP_HH