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

- File List
- File Members

# automaton_view.hh

    00001 // automaton_view.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_IMPLEMENTATION_AUTOMATON_VIEW_HH
    00018 # define VCSN_AUTOMATA_IMPLEMENTATION_AUTOMATON_VIEW_HH
    00019
    00020 # include <vaucanson/automata/concept/automata_base.hh>
    00021
    00022 namespace vcsn {
    00023
    00024   template <class T>
    00025   class IdentityView
    00026   {
    00027     public:
    00028       IdentityView();
    00029       IdentityView(T&);
    00030       IdentityView(const T&);
    00031       IdentityView(const IdentityView&);
    00032
    00033       const T& object() const;
    00034       T& object();
    00035
    00036       operator T&();
    00037       operator const T&() const;
    00038
    00039     private:
    00040       T* object_;
    00041       const T* const_object_;
    00042   };
    00043
    00044   template <typename T>
    00045   struct automaton_traits< IdentityView<T> >
    00046     : automaton_traits<T>
    00047   {
    00048   };
    00049
    00050
    00051 #define AutoType(Type)                          \
    00052   typename Element<S, IdentityView<T> >::Type
    00053
    00054   template <class S, class T>
    00055   const typename automaton_traits<T>::tag_t&
    00056   op_get_tag(const AutomataBase<S>&, const IdentityView<T>&);
    00057
    00058   template <class S, class T>
    00059   typename automaton_traits<T>::tag_t&
    00060   op_get_tag(const AutomataBase<S>&, IdentityView<T>&);
    00061
    00062   template <class S, class T>
    00063   const typename automaton_traits<T>::geometry_t&
    00064   op_get_geometry(const AutomataBase<S>&, const IdentityView<T>&);
    00065
    00066   template <class S, class T>
    00067   typename automaton_traits<T>::geometry_t&
    00068   op_get_geometry(const AutomataBase<S>&, IdentityView<T>&);
    00069
    00070   template <class S, class T>
    00071   bool
    00072   op_exists(const AutomataBase<S>&, const IdentityView<T>&);
    00073
    00074   template <class S, class T>
    00075   typename automaton_traits<T>::states_t
    00076   op_states(const AutomataBase<S>&, const IdentityView<T>&);
    00077
    00078   template <class S, class T>
    00079   typename automaton_traits<T>::transitions_t
    00080   op_transitions(const AutomataBase<S>&, const IdentityView<T>&);
    00081
    00082   template <class S, class T>
    00083   typename automaton_traits<T>::initial_support_t
    00084   op_initial(const AutomataBase<S>&, const IdentityView<T>&);
    00085
    00086   template <class S, class T>
    00087   typename automaton_traits<T>::final_support_t
    00088   op_final(const AutomataBase<S>&, const IdentityView<T>&);
    00089
    00090   template <class S, class T>
    00091   void
    00092   op_set_initial(const AutomataBase<S>&, IdentityView<T>&,
    00093                  const typename automaton_traits<T>::hstate_t& state,
    00094                  const AutoType(series_set_elt_t)& s);
    00095
    00096   template <class S, class T>
    00097   AutoType(series_set_elt_t)
    00098   op_get_initial(const AutomataBase<S>&,
    00099                  const IdentityView<T>&,
    00100                  const typename automaton_traits<T>::hstate_t& state);
    00101
    00102   template <class S, class T>
    00103   void
    00104   op_set_final(const AutomataBase<S>&, IdentityView<T>&,
    00105                const typename automaton_traits<T>::hstate_t& state,
    00106                const typename Element<S, T>::series_set_elt_t& s);
    00107
    00108   template <class S, class T>
    00109   typename Element<S, T>::series_set_elt_t
    00110   op_get_final(const AutomataBase<S>&,
    00111                const IdentityView<T>&,
    00112                const typename automaton_traits<T>::hstate_t& state);
    00113
    00114   template <class S, class T>
    00115   void
    00116   op_clear_initial(const AutomataBase<S>&, IdentityView<T>&);
    00117
    00118   template <class S, class T>
    00119   void
    00120   op_clear_final(const AutomataBase<S>&, IdentityView<T>&);
    00121
    00122   template <class S, class T>
    00123   typename automaton_traits<T>::hstate_t
    00124   op_add_state(const AutomataBase<S>&, IdentityView<T>&);
    00125
    00126   template <class S, class T>
    00127   typename automaton_traits<T>::hstate_t
    00128   op_choose_state(const AutomataBase<S>&, IdentityView<T>&);
    00129
    00130   template <class S, class T>
    00131   typename automaton_traits<T>::htransition_t
    00132   op_add_transition(const AutomataBase<S>&, IdentityView<T>&,
    00133                     const typename automaton_traits<T>::hstate_t& from,
    00134                     const typename automaton_traits<T>::hstate_t& to,
    00135                     const typename Element<S, T>::label_t& label);
    00136
    00137   template <class S, class T>
    00138   typename automaton_traits<T>::htransition_t
    00139   op_add_series_transition(const AutomataBase<S>&, IdentityView<T>&,
    00140                            const typename automaton_traits<T>::hstate_t& from,
    00141                            const typename automaton_traits<T>::hstate_t& to,
    00142                            const typename Element<S, T>::series_set_elt_t&);
    00143
    00144   template <class S, class T>
    00145   typename automaton_traits<T>::htransition_t
    00146   op_add_spontaneous(const AutomataBase<S>&, IdentityView<T>&,
    00147                      const typename automaton_traits<T>::hstate_t& from,
    00148                      const typename automaton_traits<T>::hstate_t& to);
    00149
    00150   template <class S, class T>
    00151   typename automaton_traits<T>::htransition_t
    00152   op_add_letter_transition(const AutomataBase<S>&, IdentityView<T>&,
    00153                            const typename automaton_traits<T>::hstate_t& from,
    00154                            const typename automaton_traits<T>::hstate_t& to,
    00155                            const typename Element<S, T>::letter_t&);
    00156
    00157   template <class S, class T>
    00158   void
    00159   op_update(const AutomataBase<S>&, IdentityView<T>&,
    00160             const typename automaton_traits<T>::htransition_t&,
    00161             const AutoType(label_t)& l);
    00162
    00163   template <class S, class T>
    00164   void
    00165   op_del_state(const AutomataBase<S>&, IdentityView<T>&,
    00166                const typename automaton_traits<T>::hstate_t&);
    00167
    00168   template <class S, class T>
    00169   void
    00170   op_del_transition(const AutomataBase<S>&, IdentityView<T>&,
    00171                     const typename automaton_traits<T>::htransition_t&);
    00172
    00173   template <class S, class T>
    00174   bool
    00175   op_has_state(const AutomataBase<S>&, const IdentityView<T>&,
    00176                const typename automaton_traits<T>::hstate_t&);
    00177
    00178   template <class S, class T>
    00179   bool
    00180   op_has_transition(const AutomataBase<S>&, const IdentityView<T>&,
    00181                     const typename automaton_traits<T>::htransition_t&);
    00182
    00183   template <class S, class T>
    00184   typename automaton_traits<T>::hstate_t
    00185   op_src_of(const AutomataBase<S>&, const IdentityView<T>&,
    00186             const typename automaton_traits<T>::htransition_t&);
    00187
    00188   template <class S, class T>
    00189   typename automaton_traits<T>::hstate_t
    00190   op_dst_of(const AutomataBase<S>&, const IdentityView<T>&,
    00191             const typename automaton_traits<T>::htransition_t&);
    00192
    00193   template <class S, class T>
    00194   typename Element<S, T>::label_t
    00195   op_label_of(const AutomataBase<S>&, const IdentityView<T>&,
    00196               const typename automaton_traits<T>::htransition_t&);
    00197
    00198   template <class S, class T>
    00199   const typename Element<S, T>::series_set_elt_t
    00200   op_series_of(const AutomataBase<S>&, const IdentityView<T>&,
    00201                const typename automaton_traits<T>::htransition_t&);
    00202
    00203   template <class S, class T>
    00204   typename Element<S, T>::series_set_elt_value_t
    00205   op_series_value_of(const AutomataBase<S>&, const IdentityView<T>&,
    00206                      const typename automaton_traits<T>::htransition_t&);
    00207
    00208
    00209   template <class S, class T>
    00210   typename Element<S, T>::monoid_elt_t
    00211   op_word_of(const AutomataBase<S>&, const IdentityView<T>&,
    00212              const typename automaton_traits<T>::htransition_t&);
    00213
    00214   template <class S, class T>
    00215   typename Element<S, T>::monoid_elt_value_t
    00216   op_word_value_of(const AutomataBase<S>&, const IdentityView<T>&,
    00217                    const typename automaton_traits<T>::htransition_t&);
    00218
    00219   template <class S, class T>
    00220   typename Element<S, T>::letter_t
    00221   op_letter_of(const AutomataBase<S>&, const IdentityView<T>&,
    00222                const typename automaton_traits<T>::htransition_t&);
    00223
    00224   template <class S, class T>
    00225   bool
    00226   op_is_spontaneous(const AutomataBase<S>&, const IdentityView<T>&,
    00227                     const typename automaton_traits<T>::htransition_t&);
    00228
    00229 } // vcsn
    00230
    00231 # undef AutoType
    00232
    00233
    00234 # if !defined VCSN_USE_INTERFACE_ONLY || defined VCSN_USE_LIB
    00235 # include <vaucanson/automata/implementation/automaton_view.hxx>
    00236 #endif // VCSN_USE_INTERFACE_ONLY
    00237
    00238
    00239 #endif // ! VCSN_AUTOMATA_IMPLEMENTATION_AUTOMATON_VIEW_HH