Vaucanson 1.4
automata_ops.hh
Go to the documentation of this file.
00001 // automata_ops.hh: this file is part of the Vaucanson project.
00002 //
00003 // Vaucanson, a generic library for finite state machines.
00004 //
00005 // Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 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_AUTOMATA_CONCEPT_AUTOMATA_OPS_HH
00018 # define VCSN_AUTOMATA_CONCEPT_AUTOMATA_OPS_HH
00019 
00030 # include <vaucanson/automata/concept/automata_base.hh>
00031 
00032 namespace vcsn {
00033 
00034 #define AutoType(Type)                          \
00035   typename Element<S, T>::Type
00036 
00040 
00041 
00042 
00044   template<typename S, typename R, typename T>
00045   R op_convert(const AutomataBase<S> &se,
00046                SELECTOR(R), const T& data);
00047 
00048   template<typename S, typename T>
00049   const T& op_convert(const AutomataBase<S>&,
00050                       SELECTOR(T), const T& from_data);
00051 
00053   template<typename S, typename T, typename U>
00054   void
00055   op_assign(const AutomataBase<S>& s,
00056             T& dst, const U& src);
00057 
00058   template<typename S, typename T>
00059   void
00060   op_assign(const AutomataBase<S>& concept, T& dst, const T& src);
00061 
00062   template <class S, class T>
00063   const typename automaton_traits<T>::tag_t&
00064   op_get_tag(const AutomataBase<S>&, const T&);
00065 
00066   template <class S, class T>
00067   typename automaton_traits<T>::tag_t&
00068   op_get_tag(const AutomataBase<S>&, T&);
00069 
00070   template <class S, class T>
00071   const typename automaton_traits<T>::geometry_t&
00072   op_get_geometry(const AutomataBase<S>&, const T&);
00073 
00074   template <class S, class T>
00075   typename automaton_traits<T>::geometry_t&
00076   op_get_geometry(const AutomataBase<S>&, T&);
00077 
00078   template <class S, class T>
00079   bool
00080   op_exists(const AutomataBase<S>& s, const T&);
00081 
00082   template <class S, class T>
00083   typename automaton_traits<T>::states_t
00084   op_states(const AutomataBase<S>&, const T&);
00085 
00086   template <class S, class T>
00087   typename automaton_traits<T>::hstate_t
00088   op_get_state(const AutomataBase<S>&, const T&, int state);
00089 
00090   template <class S, class T>
00091   typename automaton_traits<T>::transitions_t
00092   op_transitions(const AutomataBase<S>&, const T&);
00093 
00094   template <class S, class T>
00095   typename automaton_traits<T>::initial_support_t
00096   op_initial(const AutomataBase<S>&, const T&);
00097 
00098   template <class S, class T>
00099   typename automaton_traits<T>::final_support_t
00100   op_final(const AutomataBase<S>&, const T&);
00101 
00102   template <class S, class T>
00103   void
00104   op_set_initial(const AutomataBase<S>&, T&,
00105                  const typename automaton_traits<T>::hstate_t& state,
00106                  const AutoType(series_set_elt_t)& s);
00107 
00108   template <class S, class T>
00109   AutoType(series_set_elt_t)
00110   op_get_initial(const AutomataBase<S>&,
00111                  const T&,
00112                  const typename automaton_traits<T>::hstate_t& state);
00113 
00114   template <class S, class T>
00115   bool
00116   op_is_initial(const AutomataBase<S>&,
00117                 const T&,
00118                 const typename automaton_traits<T>::hstate_t& state);
00119 
00120   template <class S, class T>
00121   void
00122   op_set_final(const AutomataBase<S>&, T&,
00123                const typename automaton_traits<T>::hstate_t& state,
00124                const typename Element<S, T>::series_set_elt_t& s);
00125 
00126   template <class S, class T>
00127   typename Element<S, T>::series_set_elt_t
00128   op_get_final(const AutomataBase<S>&,
00129                const T&,
00130                const typename automaton_traits<T>::hstate_t& state);
00131 
00132   template <class S, class T>
00133   bool
00134   op_is_final(const AutomataBase<S>&,
00135               const T&,
00136               const typename automaton_traits<T>::hstate_t& state);
00137 
00138   template <class S, class T>
00139   void
00140   op_set_initial(const AutomataBase<S>&, T&,
00141                  int state,
00142                  const AutoType(series_set_elt_t)& s);
00143 
00144   template <class S, class T>
00145   AutoType(series_set_elt_t)
00146   op_get_initial(const AutomataBase<S>&,
00147                  const T&,
00148                  int state);
00149 
00150   template <class S, class T>
00151   bool
00152   op_is_initial(const AutomataBase<S>&,
00153                 const T&,
00154                 int state);
00155 
00156   template <class S, class T>
00157   void
00158   op_set_final(const AutomataBase<S>&, T&,
00159                int state,
00160                const typename Element<S, T>::series_set_elt_t& s);
00161 
00162   template <class S, class T>
00163   typename Element<S, T>::series_set_elt_t
00164   op_get_final(const AutomataBase<S>&,
00165                const T&,
00166                int state);
00167 
00168   template <class S, class T>
00169   bool
00170   op_is_final(const AutomataBase<S>&,
00171               const T&,
00172               int state);
00173 
00174   template <class S, class T>
00175   void
00176   op_clear_initial(const AutomataBase<S>&, T&);
00177 
00178   template <class S, class T>
00179   void
00180   op_clear_final(const AutomataBase<S>&, T&);
00181 
00182   template <class S, class T>
00183   typename automaton_traits<T>::hstate_t
00184   op_add_state(const AutomataBase<S>&, T&);
00185 
00186   template <class S, class T>
00187   typename automaton_traits<T>::hstate_t
00188   op_choose_state(const AutomataBase<S>&, T&);
00189 
00190   template <class S, class T>
00191   typename automaton_traits<T>::htransition_t
00192   op_add_transition(const AutomataBase<S>&, T&,
00193                     const typename automaton_traits<T>::hstate_t& from,
00194                     const typename automaton_traits<T>::hstate_t& to,
00195                     const typename Element<S, T>::label_t& label);
00196 
00197   template<class S, class T>
00198   typename automaton_traits<T>::htransition_t
00199   op_add_weighted_transition(const AutomataBase<S>&, T&,
00200                              const typename automaton_traits<T>::hstate_t& from,
00201                              const typename automaton_traits<T>::hstate_t& to,
00202                              const typename Element<S, T>::semiring_elt_t& w,
00203                              const typename Element<S, T>::monoid_elt_value_t& m);
00204 
00205   template <class S, class T>
00206   typename automaton_traits<T>::htransition_t
00207   op_add_series_transition(const AutomataBase<S>&, T&,
00208                            const typename automaton_traits<T>::hstate_t& from,
00209                            const typename automaton_traits<T>::hstate_t& to,
00210                            const typename Element<S, T>::series_set_elt_t&);
00211 
00212   template <class S, class T>
00213   typename automaton_traits<T>::htransition_t
00214   op_add_spontaneous(const AutomataBase<S>&, T&,
00215                      const typename automaton_traits<T>::hstate_t& from,
00216                      const typename automaton_traits<T>::hstate_t& to,
00217                      const typename Element<S, T>::semiring_elt_t&);
00218 
00219   template <class S, class T>
00220   typename automaton_traits<T>::htransition_t
00221   op_add_letter_transition(const AutomataBase<S>&, T&,
00222                            const typename automaton_traits<T>::hstate_t& from,
00223                            const typename automaton_traits<T>::hstate_t& to,
00224                            const typename Element<S, T>::letter_t&);
00225 
00226   template <class S, class T>
00227   typename automaton_traits<T>::htransition_t
00228   op_add_transition(const AutomataBase<S>&, T&,
00229                     int from,
00230                     int to,
00231                     const typename Element<S, T>::label_t& label);
00232 
00233   template<class S, class T>
00234   typename automaton_traits<T>::htransition_t
00235   op_add_weighted_transition(const AutomataBase<S>&, T&,
00236                              int from,
00237                              int to,
00238                              const typename Element<S, T>::semiring_elt_t& w,
00239                              const typename Element<S, T>::monoid_elt_value_t& m);
00240 
00241   template <class S, class T>
00242   typename automaton_traits<T>::htransition_t
00243   op_add_series_transition(const AutomataBase<S>&, T&,
00244                            int from,
00245                            int to,
00246                            const typename Element<S, T>::series_set_elt_t&);
00247 
00248   template <class S, class T>
00249   typename automaton_traits<T>::htransition_t
00250   op_add_spontaneous(const AutomataBase<S>&, T&,
00251                      int from,
00252                      int to,
00253                      const typename Element<S, T>::semiring_elt_t&);
00254 
00255   template <class S, class T>
00256   typename automaton_traits<T>::htransition_t
00257   op_add_letter_transition(const AutomataBase<S>&, T&,
00258                            int from,
00259                            int to,
00260                            const typename Element<S, T>::letter_t&);
00261 
00262   template <class S, class T>
00263   void
00264   op_update(const AutomataBase<S>&, T&,
00265             const typename automaton_traits<T>::htransition_t&,
00266             const AutoType(label_t)& l);
00267 
00268   template <class S, class T>
00269   void
00270   op_del_state(const AutomataBase<S>&, T&,
00271                const typename automaton_traits<T>::hstate_t&);
00272 
00273   template <class S, class T>
00274   void
00275   op_del_state(const AutomataBase<S>&, T&,
00276                int);
00277 
00278   template <class S, class T>
00279   void
00280   op_del_transition(const AutomataBase<S>&, T&,
00281                     const typename automaton_traits<T>::htransition_t&);
00282 
00283   template <class S, class T>
00284   bool
00285   op_has_state(const AutomataBase<S>&, const T&,
00286                const typename automaton_traits<T>::hstate_t&);
00287 
00288   template <class S, class T>
00289   bool
00290   op_has_state(const AutomataBase<S>&, const T&,
00291                int);
00292 
00293   template <class S, class T>
00294   bool
00295   op_has_transition(const AutomataBase<S>&, const T&,
00296                     const typename automaton_traits<T>::htransition_t&);
00297 
00298   template <class S, class T>
00299   typename automaton_traits<T>::hstate_t
00300   op_src_of(const AutomataBase<S>&, const T&,
00301             const typename automaton_traits<T>::htransition_t&);
00302 
00303   template <class S, class T>
00304   typename automaton_traits<T>::hstate_t
00305   op_dst_of(const AutomataBase<S>&, const T&,
00306             const typename automaton_traits<T>::htransition_t&);
00307 
00308   template <class S, class T>
00309   typename Element<S, T>::label_t
00310   op_label_of(const AutomataBase<S>&, const T&,
00311               const typename automaton_traits<T>::htransition_t&);
00312 
00313   template <class S, class T>
00314   const typename Element<S, T>::series_set_elt_t
00315   op_series_of(const AutomataBase<S>&, const T&,
00316                const typename automaton_traits<T>::htransition_t&);
00317 
00318   template <class S, class T>
00319   typename Element<S, T>::series_set_elt_value_t
00320   op_series_value_of(const AutomataBase<S>&, const T&,
00321                      const typename automaton_traits<T>::htransition_t&);
00322 
00323 
00324   template <class S, class T>
00325   typename Element<S, T>::monoid_elt_t
00326   op_word_of(const AutomataBase<S>&, const T&,
00327              const typename automaton_traits<T>::htransition_t&);
00328 
00329   template <class S, class T>
00330   typename Element<S, T>::semiring_elt_t
00331   op_weight_of(const AutomataBase<S>&, const T&,
00332                const typename automaton_traits<T>::htransition_t&);
00333 
00334   template <class S, class T>
00335   typename Element<S, T>::monoid_elt_value_t
00336   op_word_value_of(const AutomataBase<S>&, const T&,
00337                    const typename automaton_traits<T>::htransition_t&);
00338 
00339   template <class S, class T>
00340   typename Element<S, T>::letter_t
00341   op_letter_of(const AutomataBase<S>&, const T&,
00342                const typename automaton_traits<T>::htransition_t&);
00343 
00344   template <class S, class T>
00345   bool
00346   op_is_spontaneous(const AutomataBase<S>&, const T&,
00347                     const typename automaton_traits<T>::htransition_t&);
00348 
00350 
00354 } // vcsn
00355 
00356 
00357 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
00358 #  include <vaucanson/automata/concept/automata_ops.hxx>
00359 # endif // VCSN_USE_INTERFACE_ONLY
00360 
00361 #endif // ! VCSN_AUTOMATA_CONCEPT_AUTOMATA_OPS_HH